Linux程式設計-擷取錯誤資訊

來源:互聯網
上載者:User

在調用庫函數或系統調用函數後,絕大多數情況下執行成功返回 0;如果執行失敗則返
回-1,並對外部全域變數 error 賦值,以指示具體的錯誤情況。所有的錯誤碼都在 errno.h
檔案中定義。以下是/usr/include/asm/errno.h 檔案的部分內容。 
come from /usr/include/asm/errno.h 
#ifndef _I386_ERRNO_H 
#define _I386_ERRNO_H

#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 */ //I/O 錯誤 
…… 
為了列印出具體的 error 值所對應的錯誤提示資訊,一般使用 perror 函數。此函式宣告

//come from /usr/include/stdio.h 
738 __BEGIN_NAMESPACE_STD 
739 /* Print a message describing the meaning of the value of errno. // 列印錯誤值的
具體資訊描述 
740 
741 This function is a possible cancellation point and therefore not 
742 marked with __THROW. */ 
743 extern void perror (__const char *__s); //perror 函式宣告 
744 __END_NAMESPACE_STD 
另外,Linux 系統還提供了以下錯誤處理函數: 
#include //string.h 標頭檔中 
char *strerror(int errnum); //strerror 函式宣告 
#include //errno.h 標頭檔中 
extern char *sys_errlist[ ]; //sys_errlist 函式宣告 
extern int sys_nerr; //sys_nerr 函式宣告 
perror()可將語言相關的訊息寫入到標準錯誤輸出,描述調用系統函數或庫函數期間遇到
的最後一個錯誤。perror()首先輸出參數字串 s,後接冒號、空格、訊息和分行符號。為了發
揮它的最大作用,參數字串應包括導致錯誤的程式的名稱。錯誤編號取自符號 errno,出錯
時將設定此符號,但執行無錯誤調用後不會清除此符號。訊息的內容與將 errno 用作參數的
strerror()函數返回的內容相同。如果給定了一個 NULL 字串,則 perror()函數只輸出訊息和
分行符號。 
perror()函數沒有傳回值。如果 errnum(sterror 函數的形參)訊息編號有效,則 strerror()
將返回指向語言相關的訊息字串的指標。程式不應修改所指向的數組,而後續調用該函數
可覆蓋該數組。如果有效 errnum 訊息編號不包括對應語言相關的訊息,則 strerror()會將
errnum 用作要加入 sys_errlist 的索引,以擷取訊息字串。如果 errnum 訊息編號無效,則
strerror()將返回指向 NULL 字串的指標。 
為使各種形式的訊息格式化,系統提供了 strerror() 函數和訊息字串數組 sys_errlist。strerror() 
函數可將 errnum 中的錯誤編號映射為語言相關的錯誤訊息字串,同時返回指向該字串的
指標。返回的訊息字串不帶分行符號。可將 errno 用作要加入 sys_errlist 的索引,以擷取不帶
分行符號的未轉換訊息字串。 
另外,外部語言環境影響會對 perror 函數產生影響,環境變數 LANG 環境變數指定
strerror()和 perror()輸出的訊息的語言類型。如 果 語言相關的訊息不可用,或者未設定 LANG,

或者將其設定為空白字串,則將使用與“C”語言關聯的訊息的預設版本。

 

 本文由 知識無憂網 首發,轉載請保留此資訊!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.