Linux錯誤碼大全

一、基本介紹

在Linux系統中,每一個錯誤都對應了一個唯一的錯誤碼,表示了相應錯誤的類型和錯誤產生的原因。Linux系統使用負數來表示錯誤碼,在頭文件errno.h中定義,通常使用全局變量errno來保存上一次系統調用的錯誤碼。使用perror或strerror函數可以將錯誤碼轉換為可讀性較強的字符串錯誤信息。

以下是一些常用的錯誤碼:

#define EPERM 1 /* Operation not permitted */
#define ENOENT 2 /* No such file or directory */
#define ESRCH 3 /* No such process */
#define EINTR 4 /* Interrupted system call */
#define EIO 5 /* I/O error */
#define ENXIO 6 /* No such device or address */
#define E2BIG 7 /* Argument list too long */
#define ENOEXEC 8 /* Exec format error */
#define EBADF 9 /* Bad file number */
#define ECHILD 10 /* No child processes */
#define EAGAIN 11 /* Try again */
#define ENOMEM 12 /* Out of memory */
#define EACCES 13 /* Permission denied */
... // 其他錯誤碼省略

二、常見錯誤碼及其原因

1. EPERM

EPERM表示操作沒有被允許,通常是因為權限不足導致的。例如,試圖修改root用戶的密碼時,會返回EPERM錯誤。

#include 
#include 
#include 

int main()
{
  if(setuid(0) == -1)
  {
    perror("setuid");
    return errno;
  }
  printf("setuid success.\n");
  return 0;
}

以上代碼試圖切換當前進程的用戶身份為root,如果執行該程序的用戶沒有足夠的權限,setuid函數就會返回-1,並設置errno為EPERM。

2. ENOENT

ENOENT表示文件或目錄不存在。例如,試圖打開不存在的文件時,會返回該錯誤。

#include 
#include 

int main()
{
  FILE* fp;
  fp = fopen("/path/to/nonexistent/file", "r");
  if(fp == NULL)
  {
    perror("fopen");
    return errno;
  }
  fclose(fp);
  return 0;
}

以上代碼試圖打開一個不存在的文件,由於該文件不存在,fopen函數會返回NULL,並設置errno為ENOENT。

3. EIO

EIO表示輸入/輸出錯誤,通常是因為設備故障或文件系統損壞導致的。

#include 
#include 

int main()
{
  FILE* fp;
  char buffer[1024];
  size_t bytes_read;
  fp = fopen("/path/to/file", "r");
  if(fp == NULL)
  {
    perror("fopen");
    return errno;
  }
  bytes_read = fread(buffer, sizeof(char), sizeof(buffer), fp);
  if(bytes_read == 0)
  {
    if(ferror(fp))
    {
      perror("fread");
      return errno;
    }
  }
  fclose(fp);
  return 0;
}

以上代碼試圖讀取一個文件,如果讀取過程中發生了輸入/輸出錯誤,fread函數會返回0,並設置errno為EIO。

三、常用處理方式

1. perror函數

perror函數用於將錯誤碼轉換為可讀性較強的錯誤信息輸出到標準錯誤流。例如,使用perror函數輸出上面示例程序的錯誤信息:

#include 
#include 
#include 

int main()
{
  if(setuid(0) == -1)
  {
    perror("setuid");
    return errno;
  }
  printf("setuid success.\n");
  return 0;
}

執行該程序時,如果當前用戶沒有充足的權限,perror函數將輸出:

setuid: Operation not permitted

2. strerror函數

strerror函數用於將錯誤碼轉換為可讀性較強的錯誤信息字符串。

#include 
#include 
#include 

int main()
{
  if(setuid(0) == -1)
  {
    printf("setuid failed: %s\n", strerror(errno));
    return errno;
  }
  printf("setuid success.\n");
  return 0;
}

執行該程序時,如果當前用戶沒有充足的權限,strerror函數將輸出:

setuid failed: Operation not permitted

四、總結

Linux系統的錯誤碼為我們處理程序中可能出現的錯誤提供了方便,通過errno.h頭文件中定義的錯誤碼,我們可以快速地確定程序中出現的錯誤類型和錯誤原因。在編寫程序時,我們應該仔細閱讀系統調用和庫函數對錯誤碼的文檔描述,了解每個錯誤碼的具體含義和解決方案,並使用perror和strerror等函數進行錯誤信息的輸出和處理。

原創文章,作者:ESBI,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/137838.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ESBI的頭像ESBI
上一篇 2024-10-04 00:18
下一篇 2024-10-04 00:18

相關推薦

  • Python語法大全解析

    本文旨在全面闡述Python語法,並提供相關代碼示例,幫助讀者更好地理解Python語言。 一、基礎語法 1、Python的注釋方式 # 這是單行注釋 “”” 這是多行注釋,可以注…

    編程 2025-04-29
  • 二級考級舞蹈大全目錄

    本文將從以下多個方面對二級考級舞蹈大全目錄進行詳細闡述。 一、目錄結構 二級考級舞蹈大全目錄主要分為三級,即一級目錄、二級目錄和三級目錄。其中,一級目錄為舞蹈類型,二級目錄為舞蹈名…

    編程 2025-04-29
  • Python命令大全及說明

    Python是一種高級編程語言,由Guido van Rossum於1989年底發明。它具有良好的語法結構和面向對象的編程思想,具有簡潔、易讀、易學的特點,是初學者以及專業開發人員…

    編程 2025-04-29
  • Python海龜庫代碼大全

    Python海龜庫是Python語言中一個常用的繪圖庫,它提供了一套海龜繪圖的API,使得使用者可以通過編寫相應的代碼來控制海龜的行進路徑,從而實現各種圖形的繪製。本文將以Pyth…

    編程 2025-04-28
  • Python語句大全

    本文將詳細闡述Python語句大全,並給出代碼實例。 一、基本語句 Python基本語句包括賦值語句、條件語句、循環語句等,其中最基礎的是賦值語句。如下: a = 1 b = 2 …

    編程 2025-04-28
  • Python函數大全表

    Python是一種高級編程語言,被廣泛應用於數據科學、人工智能、Web開發等領域。Python函數大全表是Python標準函數庫的一個大全,包括了Python中所有的標準函數及其用…

    編程 2025-04-27
  • Python函數用法大全

    本文主要介紹Python函數的用法,包括定義函數、參數傳遞、返回值、lambda表達式等方面。通過深入的學習,讀者將掌握Python函數的全面應用,提高自己的編程水平。 一、定義函…

    編程 2025-04-27
  • Python模塊庫大全官網

    Python模塊庫大全官網是一個全面收錄Python模塊庫的網站,開發者可以在該網站中找到自己需要的模塊庫、文檔、教程等資源,提高開發效率,降低開發成本。本文將從多個方面對Pyth…

    編程 2025-04-27
  • 如何在Linux中添加用戶並修改配置文件

    本文將從多個方面詳細介紹在Linux系統下如何添加新用戶並修改配置文件 一、添加新用戶 在Linux系統下創建新用戶非常簡單,只需使用adduser命令即可。使用以下命令添加新用戶…

    編程 2025-04-27
  • 如何解決linux jar包 invalid or corrupt jarfile問題

    對於許多開發人員和系統管理員在Linux環境下使用Java開發過程中遇到的一個常見的問題是 invalid or corrupt jarfile(無效或損壞的jar文件)錯誤。當您…

    編程 2025-04-27

發表回復

登錄後才能評論