errno、_doserrno、_sys_errlist、および _sys_nerr
これらのグローバル変数には、perror 関数および strerror 関数でエラー メッセージ出力のために使用されるエラー コードが格納されます。 これらのグローバル変数の代わりに、次の表に示すセキュリティが強化されたバージョンを使用する必要があります。
グローバル変数 |
セキュリティが強化されたバージョン |
---|---|
_doserrno |
|
_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 を必ず確認してください。
エラーが発生したとき、errno は必ずしもシステム コールが返すエラー コードと同じ値に設定されるわけではありません。 I/O 操作の場合、_doserrno を使用すると、errno コードに相当するオペレーティング システムのエラー コードを取得できます。 大部分の非 I/O 操作については、_doserrno の値は未定義です。
errno の各値には関連付けられているエラー メッセージがあり、このエラー メッセージを perror を使用して出力したり、strerror を使用して文字列に格納したりできます。 perror および strerror は、_sys_errlist 配列、および _sys_errlist の要素の数を示す _sys_nerr を使用して、エラー情報を処理します。
ライブラリの数値演算ルーチンは、errno を設定するために _matherr を呼び出します。 別の方法で数値演算エラーを処理するには、_matherr の説明に従って独自のルーチンを作成し、_matherr という名前を付けます。
errno のすべての値は、ERRNO.H で定義済み定数として定義されており、UNIX と互換性があります。これらの値は次の表に示します。 ANSI 規格では、ERANGE、EILSEQ、および EDOM だけが指定されています。
定数 |
システム エラー メッセージ |
値 |
---|---|---|
EPERM |
Operation not permitted |
1 |
ENOENT |
No such file or directory |
2 |
ESRCH |
No such process |
3 |
EINTR |
Interrupted function |
4 |
EIO |
I/O error |
5 |
ENXIO |
No such device or address |
6 |
E2BIG |
Argument list too long |
7 |
ENOEXEC |
Exec format error |
8 |
EBADF |
Bad file number |
9 |
ECHILD |
No spawned processes |
10 |
EAGAIN |
No more processes or not enough memory or maximum nesting level reached |
11 |
ENOMEM |
Not enough memory |
12 |
EACCES |
アクセス許可は拒否されました。 |
13 |
EFAULT |
Bad address |
14 |
EBUSY |
Device or resource busy |
16 |
EEXIST |
File exists |
17 |
EXDEV |
Cross-device link |
18 |
ENODEV |
No such device |
19 |
ENOTDIR |
Not a directory |
20 |
EISDIR |
Is a directory |
21 |
EINVAL |
Invalid argument |
22 |
ENFILE |
Too many files open in system |
23 |
EMFILE |
Too many open files |
24 |
ENOTTY |
Inappropriate I/O control operation |
25 |
EFBIG |
File too large |
27 |
ENOSPC |
No space left on device |
28 |
ESPIPE |
Invalid seek |
29 |
EROFS |
Read-only file system |
30 |
EMLINK |
Too many links |
31 |
EPIPE |
Broken pipe |
32 |
EDOM |
Math argument |
33 |
ERANGE |
Result too large |
34 |
EDEADLK |
Resource deadlock would occur |
36 |
EDEADLOCK |
Same as EDEADLK for compatibility with older Microsoft C versions |
36 |
ENAMETOOLONG |
Filename too long |
38 |
ENOLCK |
No locks available |
39 |
ENOSYS |
Function not supported |
40 |
ENOTEMPTY |
Directory not empty |
41 |
EILSEQ |
Illegal byte sequence |
42 |
STRUNCATE |
String was truncated |
80 |