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 操作ではerrno コードのオペレーティング システムのエラー コードに相当する機能にアクセスするために _doserrno を使用します。ほとんどの非 I/O 操作用に _doserrno の値は未定義です。

errno の各値は perror を使用して出力されるかまたは文字列を strerror を使用して保存できるエラー メッセージに関連付けられます。perror と strerror は _sys_errlist のエラー情報を処理するために配列と _sys_nerr の _sys_errlist の要素数を使用します。

ライブラリのルーチンは _matherr を呼び出して errno を設定します。数値演算エラーを別に処理する場合は独自のルーチンを _matherr の参照の説明に従って書き込み _matherr という名前を付けます。

ERRNO.H の定義済み定数で定義されている errno のすべての値はUNIX の互換性次に示します。ERANGEEILSEQ と EDOM のみ ANSI 規格に指定されます。

定数

システム エラー メッセージ

EPERM

許可されない操作

1

ENOENT

このようなファイルまたはディレクトリがない

2

ESRCH

このようなプロセスはありません。

3

EINTR

中断した関数

4

EIO

I/O エラー

5

ENXIO

このようなデバイスまたはアドレスは

6

E2BIG

長い引数リストが長すぎる

7

ENOEXEC

実行ファイルのエラー

8

EBADF

bad file number

9

ECHILD

子プロセスが存在しない

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

不適切な入出力操作の制御

25

EFBIG

非常に大きなファイル

27

ENOSPC

デバイスの空き領域がありません

28

ESPIPE

無効な Seek

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