inux中c語言errno的使用

2021-07-07 09:06:06 字數 1491 閱讀 3423

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特點 ...