errnoのヘルプ・マニュアル
日本語 英語
errno --help
man errno
ERRNO(3) Linux Programmer’s Manual ERRNO(3)
名前
errno - 直近に発生したエラーの番号
書式
#include
説明
ヘ ッダファイル で整数型の変数 errno が定義されており、システ
ムコールやいくつかのライブラリ関数は、エラーが発生した際にこの変数に そ
の 原因を示す値を設定する。この値は呼び出しの返り値がエラー (ほとんどの
システムコールでは -1 で、ほとんどのライブラリ関数では -1 か NULL) を示
したときにのみ意味を持つが、ライブラリ関数は成功した場合も errno を変更
することが許されている。
有効なエラー番号はいずれも 0 以外の値を持つ。どのシステムコールもライブ
ラリ関数も errno を 0 に設定することはない。
いくつかのシステムコールやライブラリ関数 (例えば getpriority(2)) では、
成功した場合の有効な返り値として -1 が返されることがある。このような 場
合、成功なのかエラーなのかを区別するためには、呼び出しの前に errno を 0
に設定しておけばよい。呼び出しの返り値がエラー発生の可能性を示すもの だ
った場合には、 errno が 0 以外の値かを見て確認すればよい。
errno は、ISO C standard で int 型の変更可能な左辺値として定義されてお
り、明示的に宣言を行ってはならない; errno はマクロの場合もあり え る 。
errno はスレッド毎に値を持つ。つまりあるスレッドで errno が設定されても
、他のスレッドの errno には影響しない。
POSIX.1 で定義されているすべてのエラー名には、それぞれ異なる値が対応 し
ていなければならない。但し、 EAGAIN と EWOULDBLOCK は例外で、これらは同
じ値を持ってもよい。
E2BIG 引き数リストが長過ぎる (POSIX.1)
EACCES 許可がない (POSIX.1)
EADDRINUSE アドレスがすでに使用されている (POSIX.1)
EADDRNOTAVAIL アドレスが使用できない (POSIX.1)
EAFNOSUPPORT アドレス・ファミリーがサポートされていない (POSIX.1)
EAGAIN リソースが一時的に利用不可 (EWOULDBLOCK と同じ値でも よ
い) (POSIX.1)
EALREADY 接続が既に処理中である (POSIX.1)
EBADE 不正なやり取り (exchange) である
EBADF ファイルディスクリプタが不正である (POSIX.1)
EBADFD ファイルディスクリプタが不正な状態である
EBADMSG メッセージが不正である (POSIX.1)
EBADR 不正なリクエストディスクリプタ
EBADRQC 不正なリクエストコード
EBADSLT 不正なスロット
EBUSY リソースが使用中である (POSIX.1)
ECANCELED 操作がキャンセルされた (POSIX.1)
ECHILD 子プロセスが無い (POSIX.1)
ECHRNG チャンネル番号が範囲外である
ECOMM 送信時に通信エラーが発生した
ECONNABORTED 接続が中止された (POSIX.1)
ECONNREFUSED 接続が拒否された (POSIX.1)
ECONNRESET 接続がリセットされた (POSIX.1)
EDEADLK リソースのデッドロックを回避した (POSIX.1)
EDEADLOCK EDEADLK の同義語
EDESTADDRREQ 宛先アドレスが必要である (POSIX.1)
EDOM 数学関数で引き数が領域外である (out of domain)
EDQUOT ディスク・クォータ (quota) を超過した (POSIX.1)
EEXIST ファイルが存在する (POSIX.1)
EFAULT アドレスが不正である (POSIX.1)
EFBIG ファイルが大き過ぎる (POSIX.1)
EHOSTDOWN ホストがダウンしている
EHOSTUNREACH ホストに到達不能である (POSIX.1)
EIDRM 識別子が削除された (POSIX.1)
EILSEQ 不正なバイト列 (POSIX.1, C99)
EINPROGRESS 操作が実行中である (POSIX.1)
EINTR 関数呼び出しが割り込まれた (POSIX.1); signal(7) 参照。
EINVAL 引数が無効である (POSIX.1)
EIO 入出力エラー (POSIX.1)
EISCONN ソケットが接続されている (POSIX.1)
EISDIR ディレクトリである (POSIX.1)
EISNAM 名前付きのファイルである
EKEYEXPIRED 鍵が期限切れとなった
EKEYREJECTED 鍵がサーバにより拒否された
EKEYREVOKED 鍵が無効となった
EL2HLT 停止 (レベル 2)
EL2NSYNC 同期できていない (レベル 2)
EL3HLT 停止 (レベル 3)
EL3RST リセット (レベル 3)
ELIBACC 必要な共有ライブラリにアクセスできなかった
ELIBBAD 壊れた共有ライブラリにアクセスしようとした
ELIBMAX リンクしようとした共有ライブラリが多過ぎる
ELIBSCN a.out のライブラリセクションが壊れている (corrupted)
ELIBEXEC 共有ライブラリを直接実行できなかった
ELOOP シンボリック・リンクの回数が多過ぎる (POSIX.1)
EMEDIUMTYPE 間違ったメディア種別である
EMFILE オープンされているファイルが多過ぎる (POSIX.1)
EMLINK リンクが多過ぎる (POSIX.1)
EMSGSIZE メッセージが長過ぎる (POSIX.1)
EMULTIHOP マルチホップ (multihop) を試みた (POSIX.1)
ENAMETOOLONG ファイル名が長過ぎる (POSIX.1)
ENETDOWN ネットワークが不通である (POSIX.1)
ENETRESET 接続がネットワーク側から中止された (POSIX.1)
ENETUNREACH ネットワークが到達不能である (POSIX.1)
ENFILE シ ス テ ム 全体でオープンされているファイルが多過ぎる
(POSIX.1)
ENOBUFS 使用可能なバッファ空間が な い (POSIX.1 (XSI STREAMS
option))
ENODATA ストリームの読み出しキューの先頭に読み出し可能なメッセ
ージがない (POSIX.1)
ENODEV そのようなデバイスは無い (POSIX.1)
ENOENT そのようなファイルやディレクトリは無い (POSIX.1)
ENOEXEC 実行ファイル形式のエラー (POSIX.1)
ENOKEY 要求された鍵が利用できない
ENOLCK 利用できるロックが無い (POSIX.1)
ENOLINK リンクが切れている (POSIX.1)
ENOMEDIUM メディアが見つからない
ENOMEM 十分な空きメモリ領域が無い (POSIX.1)
ENOMSG 要求された型のメッセージが存在しない (POSIX.1)
ENONET マシンがネットワーク上にない
ENOPKG パッケージがインストールされていない
ENOPROTOOPT 指定されたプロトコルが利用できない (POSIX.1)
ENOSPC デバイスに空き領域が無い (POSIX.1)
ENOSR 指定されたストリーム・リソースが存在 し な い (POSIX.1
(XSI STREAMS option))
ENOSTR ストリームではない (POSIX.1 (XSI STREAMS option))
ENOSYS 関数が実装されていない (POSIX.1)
ENOTBLK ブロックデバイスが必要である
ENOTCONN ソケットが接続されていない (POSIX.1)
ENOTDIR ディレクトリではない (POSIX.1)
ENOTEMPTY ディレクトリが空ではない (POSIX.1)
ENOTSOCK ソケットではない (POSIX.1)
ENOTSUP 操作がサポートされていない (POSIX.1)
ENOTTY I/O 制御操作が適切でない (POSIX.1)
ENOTUNIQ 名前がネットワークで一意ではない
ENXIO そのようなデバイスやアドレスはない (POSIX.1)
EOPNOTSUPP ソケットでサポートしていない操作である (POSIX.1)
(Linux で は ENOTSUP と EOPNOTSUPP は同じ値を持つが、
POSIX.1 に従えば両者のエラー値は区別されるべきである。)
EOVERFLOW 指 定 さ れ た デ ー タ 型に格納するには値が大き過ぎる
(POSIX.1)
EPERM 操作が許可されていない (POSIX.1)
EPFNOSUPPORT サポートされていないプロトコルファミリーである
EPIPE パイプが壊れている (POSIX.1)
EPROTO プロトコル・エラー (POSIX.1)
EPROTONOSUPPORT プロトコルがサポートされていない (POSIX.1)
EPROTOTYPE ソケットに指定できないプロト コ ル ・ タ イ プ で あ る
(POSIX.1)
ERANGE 結果が大き過ぎる (POSIX.1, C99)
EREMCHG リモートアドレスが変わった
EREMOTE オブジェクトがリモートにある
EREMOTEIO リモート I/O エラー
ERESTART システムコールが中断され再スタートが必要である
EROFS 読み出し専用のファイルシステムである (POSIX.1)
ESHUTDOWN 通信相手がシャットダウンされて送信できない
ESPIPE 無効なシーク (POSIX.1)
ESOCKTNOSUPPORT サポートされていないソケット種別である
ESRCH そのようなプロセスは無い (POSIX.1)
ESTALE ファイルハンドルが古い状態になっている (POSIX.1)
NFS や他のファイルシステムで起こりうる。
ESTRPIPE ストリーム・パイプ・エラー
ETIME 時間が経過した (POSIX.1 (XSI STREAMS option))
(POSIX.1 では "STREAM ioctl(2) timeout" と書かれている)
ETIMEDOUT 操作がタイムアウトした (POSIX.1)
ETXTBSY テキストファイルが使用中である (POSIX.1)
EUCLEAN Structure needs cleaning
EUNATCH プロトコルのドライバが付与 (attach) されていない
EUSERS ユーザ数が多過ぎる
EWOULDBLOCK 操作がブロックされる見込みである (EAGAIN と同じ値でもよ
い) (POSIX.1)
EXDEV 不適切なリンク (POSIX.1)
EXFULL 変換テーブルが一杯である
注意
以下はよくやる間違いである。
if (somecall() == -1) {
printf("somecall() failed\n");
if (errno == ...) { ... }
}
このようにすると、参照している時点では errno はもはや somecall() から返
された値を保持しているとは限らない (printf(3) により変更されているか も
し れない)。ライブラリコールをまたいで errno の値を保存したい場合は、以
下のように保存しなければならない:
if (somecall() == -1) {
int errsv = errno;
printf("somecall() failed\n");
if (errsv == ...) { ... }
}
昔の C では、 をインクルードするのではなく errno を 手 動 で
(extern int errno のように) 定義するのが一般的であった。 このようなこと
はしないこと。こうすると、最近のバージョンの C ライブラリでは正しく動作
し ないだろう。しかし、(非常に) 古い Unix システムでは、 がな
く、宣言が必要なことがあるかもしれない。 err(3), error(3), perror(3),
strerror(3)
2008-07-09 ERRNO(3)
ERRNO(3) Linux Programmer’s Manual ERRNO(3)
NAME
errno - number of last error
SYNOPSIS
#include
DESCRIPTION
The header file defines the integer variable errno, which is
set by system calls and some library functions in the event of an error
to indicate what went wrong. Its value is significant only when the
return value of the call indicated an error (i.e., -1 from most system
calls; -1 or NULL from most library functions); a function that suc-
ceeds is allowed to change errno.
Valid error numbers are all non-zero; errno is never set to zero by any
system call or library function.
For some system calls and library functions (e.g., getpriority(2)), -1
is a valid return on success. In such cases, a successful return can
be distinguished from an error return by setting errno to zero before
the call, and then, if the call returns a status that indicates that an
error may have occurred, checking to see if errno has a non-zero value.
errno is defined by the ISO C standard to be a modifiable lvalue of
type int, and must not be explicitly declared; errno may be a macro.
errno is thread-local; setting it in one thread does not affect its
value in any other thread.
All the error names specified by POSIX.1 must have distinct values,
with the exception of EAGAIN and EWOULDBLOCK, which may be the same.
Below is a list of the symbolic error names that are defined on Linux.
Some of these are marked POSIX.1, indicating that the name is defined
by POSIX.1-2001, or C99, indicating that the name is defined by C99.
E2BIG Argument list too long (POSIX.1)
EACCES Permission denied (POSIX.1)
EADDRINUSE Address already in use (POSIX.1)
EADDRNOTAVAIL Address not available (POSIX.1)
EAFNOSUPPORT Address family not supported (POSIX.1)
EAGAIN Resource temporarily unavailable (may be the same value
as EWOULDBLOCK) (POSIX.1)
EALREADY Connection already in progress (POSIX.1)
EBADE Invalid exchange
EBADF Bad file descriptor (POSIX.1)
EBADFD File descriptor in bad state
EBADMSG Bad message (POSIX.1)
EBADR Invalid request descriptor
EBADRQC Invalid request code
EBADSLT Invalid slot
EBUSY Device or resource busy (POSIX.1)
ECANCELED Operation canceled (POSIX.1)
ECHILD No child processes (POSIX.1)
ECHRNG Channel number out of range
ECOMM Communication error on send
ECONNABORTED Connection aborted (POSIX.1)
ECONNREFUSED Connection refused (POSIX.1)
ECONNRESET Connection reset (POSIX.1)
EDEADLK Resource deadlock avoided (POSIX.1)
EDEADLOCK Synonym for EDEADLK
EDESTADDRREQ Destination address required (POSIX.1)
EDOM Mathematics argument out of domain of function
(POSIX.1, C99)
EDQUOT Disk quota exceeded (POSIX.1)
EEXIST File exists (POSIX.1)
EFAULT Bad address (POSIX.1)
EFBIG File too large (POSIX.1)
EHOSTDOWN Host is down
EHOSTUNREACH Host is unreachable (POSIX.1)
EIDRM Identifier removed (POSIX.1)
EILSEQ Illegal byte sequence (POSIX.1, C99)
EINPROGRESS Operation in progress (POSIX.1)
EINTR Interrupted function call (POSIX.1); see signal(7).
EINVAL Invalid argument (POSIX.1)
EIO Input/output error (POSIX.1)
EISCONN Socket is connected (POSIX.1)
EISDIR Is a directory (POSIX.1)
EISNAM Is a named type file
EKEYEXPIRED Key has expired
EKEYREJECTED Key was rejected by service
EKEYREVOKED Key has been revoked
EL2HLT Level 2 halted
EL2NSYNC Level 2 not synchronized
EL3HLT Level 3 halted
EL3RST Level 3 halted
ELIBACC Cannot access a needed shared library
ELIBBAD Accessing a corrupted shared library
ELIBMAX Attempting to link in too many shared libraries
ELIBSCN lib section in a.out corrupted
ELIBEXEC Cannot exec a shared library directly
ELOOP Too many levels of symbolic links (POSIX.1)
EMEDIUMTYPE Wrong medium type
EMFILE Too many open files (POSIX.1)
EMLINK Too many links (POSIX.1)
EMSGSIZE Message too long (POSIX.1)
EMULTIHOP Multihop attempted (POSIX.1)
ENAMETOOLONG Filename too long (POSIX.1)
ENETDOWN Network is down (POSIX.1)
ENETRESET Connection aborted by network (POSIX.1)
ENETUNREACH Network unreachable (POSIX.1)
ENFILE Too many open files in system (POSIX.1)
ENOBUFS No buffer space available (POSIX.1 (XSI STREAMS
option))
ENODATA No message is available on the STREAM head read queue
(POSIX.1)
ENODEV No such device (POSIX.1)
ENOENT No such file or directory (POSIX.1)
ENOEXEC Exec format error (POSIX.1)
ENOKEY Required key not available
ENOLCK No locks available (POSIX.1)
ENOLINK Link has been severed (POSIX.1)
ENOMEDIUM No medium found
ENOMEM Not enough space (POSIX.1)
ENOMSG No message of the desired type (POSIX.1)
ENONET Machine is not on the network
ENOPKG Package not installed
ENOPROTOOPT Protocol not available (POSIX.1)
ENOSPC No space left on device (POSIX.1)
ENOSR No STREAM resources (POSIX.1 (XSI STREAMS option))
ENOSTR Not a STREAM (POSIX.1 (XSI STREAMS option))
ENOSYS Function not implemented (POSIX.1)
ENOTBLK Block device required
ENOTCONN The socket is not connected (POSIX.1)
ENOTDIR Not a directory (POSIX.1)
ENOTEMPTY Directory not empty (POSIX.1)
ENOTSOCK Not a socket (POSIX.1)
ENOTSUP Operation not supported (POSIX.1)
ENOTTY Inappropriate I/O control operation (POSIX.1)
ENOTUNIQ Name not unique on network
ENXIO No such device or address (POSIX.1)
EOPNOTSUPP Operation not supported on socket (POSIX.1)
(ENOTSUP and EOPNOTSUPP have the same value on Linux,
but according to POSIX.1 these error values should be
distinct.)
EOVERFLOW Value too large to be stored in data type (POSIX.1)
EPERM Operation not permitted (POSIX.1)
EPFNOSUPPORT Protocol family not supported
EPIPE Broken pipe (POSIX.1)
EPROTO Protocol error (POSIX.1)
EPROTONOSUPPORT Protocol not supported (POSIX.1)
EPROTOTYPE Protocol wrong type for socket (POSIX.1)
ERANGE Result too large (POSIX.1, C99)
EREMCHG Remote address changed
EREMOTE Object is remote
EREMOTEIO Remote I/O error
ERESTART Interrupted system call should be restarted
EROFS Read-only file system (POSIX.1)
ESHUTDOWN Cannot send after transport endpoint shutdown
ESPIPE Invalid seek (POSIX.1)
ESOCKTNOSUPPORT Socket type not supported
ESRCH No such process (POSIX.1)
ESTALE Stale file handle (POSIX.1)
This error can occur for NFS and for other file systems
ESTRPIPE Streams pipe error
ETIME Timer expired (POSIX.1 (XSI STREAMS option))
(POSIX.1 says "STREAM ioctl(2) timeout")
ETIMEDOUT Connection timed out (POSIX.1)
ETXTBSY Text file busy (POSIX.1)
EUCLEAN Structure needs cleaning
EUNATCH Protocol driver not attached
EUSERS Too many users
EWOULDBLOCK Operation would block (may be same value as EAGAIN)
(POSIX.1)
EXDEV Improper link (POSIX.1)
EXFULL Exchange full
NOTES
A common mistake is to do
if (somecall() == -1) {
printf("somecall() failed\n");
if (errno == ...) { ... }
}
where errno no longer needs to have the value it had upon return from
somecall() (i.e., it may have been changed by the printf(3)). If the
value of errno should be preserved across a library call, it must be
saved:
if (somecall() == -1) {
int errsv = errno;
printf("somecall() failed\n");
if (errsv == ...) { ... }
}
It was common in traditional C to declare errno manually (i.e., extern
int errno) instead of including . Do not do this. It will
not work with modern versions of the C library. However, on (very) old
Unix systems, there may be no and the declaration is needed.
SEE ALSO
err(3), error(3), perror(3), strerror(3)
COLOPHON
This page is part of release 3.22 of the Linux man-pages project. A
description of the project, and information about reporting bugs, can
be found at http://www.kernel.org/doc/man-pages/.
2008-07-09 ERRNO(3)