errno、 _doserrno、 _sys_errlist 和 _sys_nerr

這些通用的變數會保留所使用的錯誤代碼 perrorstrerror 函式來列印錯誤訊息。 更安全的功能版本,列在此表格應該用它們的全域變數的位置。

全域變數

功能的對等用法

_doserrno

_get_doserrno, _set_doserrno

_errno

_get_errno, _set_errno

在 STDLIB 中宣告這些變數。以 h

extern int _doserrno; 
extern int errno; 
extern char *_sys_errlist[ ];
extern int _sys_nerr;

備註

errno與_errno連線到相同的變數。 errno使用程式碼定義#define errno (*_errno())

errno設定系統層級呼叫中發生錯誤。 因為errno存放可能被變更的值加以設定,這個值的最後一次呼叫後續的呼叫。 一定要檢查errno立即之前和之後可能會將其設定的呼叫。

在發生錯誤, errno不一定是設定為 [加班工時和系統呼叫所傳回的錯誤碼。 對於 I/O 作業,使用_doserrno來存取作業系統的錯誤代碼對等用法的errno代碼。 對於大部分的非 i/o 作業的值_doserrno尚未定義。

每個errno值時才可以使用列印錯誤訊息perror或儲存在字串,使用strerror。 perror與strerror使用_sys_errlist陣列和_sys_nerr中的項目數_sys_errlist,來處理錯誤的資訊。

文件庫的數學常式集errno藉由呼叫 _matherr。 若要以不同方式處理算術錯誤,撰寫您自己的常式,根據_matherr參考描述,並命名為_matherr。

所有errno為預先定義的常數 ERRNO 中定義的值。H,UNIX 相容,而且如下所示。 只有ERANGE, EILSEQ和EDOM詳列於 ANSI 標準。

常數

系統錯誤訊息

EPERM

不允許這項操作

1

ENOENT

無此檔案或目錄

2

ESRCH

沒有這項處理

3

EINTR

插斷的函式

4

EIO

I/O 錯誤

5

ENXIO

沒有此類的裝置或位址

6

E2BIG

引數清單太長

7

ENOEXEC

執行格式錯誤

8

EBADF

檔案號碼錯誤

9

ECHILD

繁衍 (spawn) 的處理程序

10

EAGAIN

沒有更多的處理程序或沒有足夠記憶體或最大的巢狀層級上限

11

ENOMEM

沒有足夠的記憶體

12

EACCES

拒絕的權限

13

EFAULT

不正確的地址

14

EBUSY

裝置或忙線中的資源

16

EEXIST

檔案已存在

17

EXDEV

交互裝置連結

18

ENODEV

沒有這種裝置

19

ENOTDIR

不是一個目錄

20

EISDIR

是一個目錄

21

EINVAL

無效的引數

22

ENFILE

在系統中開啟太多檔案

23

EMFILE

開啟太多檔案

24

ENOTTY

不適當的 I/O 控制作業

25

EFBIG

檔案太大

27

ENOSPC

在裝置上已無空間

28

ESPIPE

無效的搜尋

29

EROFS

唯讀的檔案系統

30

EMLINK

太多的連結

31

EPIPE

管道中斷

32

EDOM

數學引數

33

ERANGE

結果太大

34

EDEADLK

就會發生資源鎖死

36

EDEADLOCK

與 Microsoft C 上的舊版的相容性的 EDEADLK 一樣

36

ENAMETOOLONG

檔名太長

38

ENOLCK

沒有可用的鎖定

39

ENOSYS

不支援的函式

40

ENOTEMPTY

目錄不是空的

41

EILSEQ

不合法的位元組序列

42

STRUNCATE

已截斷字串

80

請參閱

參考

全域變數

errno 常數

perror

strerror

_get_doserrno

_set_doserrno

_get_errno

_set_errno