errno、_doserrno、_sys_errlist、および _sys_nerr

これらのグローバル変数には、perror 関数および strerror 関数でエラー メッセージ出力のために使用されるエラー コードが格納されます。 これらのグローバル変数の代わりに、次の表に示すセキュリティが強化されたバージョンを使用する必要があります。

グローバル変数

セキュリティが強化されたバージョン

_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 を必ず確認してください。

エラーが発生したとき、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

参照

参照

グローバル変数

errno 定数

perror

strerror

_get_doserrno

_set_doserrno

_get_errno

_set_errno