inux中c語言errno的使用
sep252013
, 程式語言
在linux中使用c語言程式設計時,errno是個很有用的動動。他可以把最後一次呼叫c的方法的錯誤**保留。但是如果最後一次成功的呼叫c的方法,errno不會改變。因此,只有在c語言函式返回值異常時,再檢測errno。
errno會返回乙個數字,每個數字代表乙個錯誤型別。詳細的可以檢視標頭檔案。/usr/include/asm/errno.h
如何把errno的數字轉換成相應的文字說明?
方式一:可以使用strerrno函式
1char *strerror(int errno)
使用方式如下: 1
fprintf(stderr,"error in createprocess %s, process id %d ",strerror(errno),processid)
將錯誤**轉換為字串錯誤資訊,可以將該字串和其它的資訊組合輸出到使用者介面。
注:假設processid是乙個已經獲取了的整形id
方式二:使用perror函式
1void perror(const char *s)
函式說明
perror ( )用來將上乙個函式發生錯誤的原因輸出到標準錯誤(stderr),引數s 所指的字串會先列印出,後面再加上錯誤原因 字串。此錯誤原因依照全域性變數 errno 的值來決定要輸出的字串。
另外並不是所有的c函式呼叫發生的錯誤資訊都會修改errno。例如gethostbyname函式。
errno是否是執行緒安全的?
errno
是支援執行緒安全的,而且,一般而言,編譯器會自動保證errno的安全性。
我們看下相關標頭檔案 /usr/include/bits/errno.h
會看到如下內容:
# if !defined _libc || defined_libc_reentrant
/* when using threads, errno is a per-thread value. */
# define errno (*__errno_location ())
# endif
# endif /* !__assembler__ */
#endif /* _errno_h */
也就是說,在沒有定義__libc或者定義_libc_reentrant的時候,errno是多執行緒/程序安全的。
為了檢測一下你編譯器是否定義上述變數,不妨使用下面乙個簡單程式。12
3456
78910
1112
1314
1516
1718
1920
2122
2324
25#include
#include
int main( void )
linux中c語言errno的使用
在linux中使用c語言程式設計時,errno是個很有用的動動。他可以把最後一次呼叫c的方法的錯誤 保留。但是如果最後一次成功的呼叫c的方法,errno不會改變。因此,只有在c語言函式返回值異常時,再檢測errno。errno會返回乙個數字,每個數字代表乙個錯誤型別。詳細的可以檢視標頭檔案。usr ...
linux中c語言errno的使用
在linux中使用c語言程式設計時,errno是個很有用的動動。他可以把最後一次呼叫c的方法的錯誤 保留。但是如果最後一次成功的呼叫c的方法,errno不會改變。因此,只有在c語言函式返回值異常時,再檢測errno。errno會返回乙個數字,每個數字代表乙個錯誤型別。詳細的可以檢視標頭檔案。usr ...
c語言 出錯處理errno
include void perror const char msg 1.errno變數 檔案 中定義了符號 errno 以及可以賦予它的各種常量,這些常量都是以字元 e 開頭。例如,若 errno 等於常量 eacces,表示產生了許可權問題 例如,沒有開啟所要求檔案的足夠許可權 errno特點 ...