.\" Copyright (c) 1996 Andries Brouwer (aeb@cwi.nl) .\" .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, write to the Free .\" Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, .\" USA. .\" .\" 5 Oct 2002, Modified by Michael Kerrisk .\" Updated for POSIX.1 2001 .\" 2004-12-17 Martin Schulze , mtk .\" Removed errno declaration prototype, added notes .\" 2006-02-09 Kurt Wall, mtk .\" Added non-POSIX errors .\" .\" Japanese Version Copyright (c) 1997 HIROFUMI Nishizuka .\" all rights reserved. .\" Translated 1997-12-24, HIROFUMI Nishizuka .\" Updated 1999-03-01, NAKANO Takeo .\" Updated 1999-08-21, NAKANO Takeo .\" Updated 2003-07-03, Akihiro MOTOKI .\" Updated 2005-03-15, Akihiro MOTOKI .\" Updated 2006-02-15, Akihiro MOTOKI, Catch up to LDP v2.23 .\" Updated 2006-07-14, Akihiro MOTOKI, Catch up to LDP v2.34 .\" Updated 2008-08-07, Akihiro MOTOKI, Catch up to LDP v3.05 .\" .TH ERRNO 3 2008-07-09 "" "Linux Programmer's Manual" .SH 名前 errno \- 直近に発生したエラーの番号 .SH 書式 .B #include .\".sp .\".BI "extern int " errno ; .SH 説明 ヘッダファイル .I で整数型の変数 .I errno が定義されており、 システムコールやいくつかのライブラリ関数は、エラーが発生した際に この変数にその原因を示す値を設定する。 この値は呼び出しの返り値がエラー (ほとんどのシステムコールでは \-1 で、ほとんどのライブラリ関数では \-1 か NULL) を示したときに のみ意味を持つが、ライブラリ関数は成功した場合も .I errno を変更することが許されている。 有効なエラー番号はいずれも 0 以外の値を持つ。 どのシステムコールもライブラリ関数も \fIerrno\fP を 0 に設定することはない。 いくつかのシステムコールやライブラリ関数 (例えば .BR getpriority (2)) では、成功した場合の有効な返り値として \-1 が返されることがある。 このような場合、成功なのかエラーなのかを区別するためには、 呼び出しの前に .I errno を 0 に設定しておけばよい。呼び出しの返り値がエラー発生の可能性を 示すものだった場合には、 .I errno が 0 以外の値かを見て確認すればよい。 \fIerrno\fP は、ISO C standard で \fIint\fP 型の変更可能な左辺値 として定義されており、明示的に宣言を行ってはならない; \fIerrno\fP はマクロの場合もありえる。 \fIerrno\fP はスレッド毎に値を持つ。 つまりあるスレッドで \fIerrno\fP が設定されても、 他のスレッドの \fIerrno\fP には影響しない。 POSIX.1 で定義されているすべてのエラー名には、 それぞれ異なる値が対応していなければならない。 但し、 .B EAGAIN と .B EWOULDBLOCK は例外で、これらは同じ値を持ってもよい。 .\" The following is now .\" POSIX.1 (2001 年版) でのエラー名シンボルのリストを以下に示す。 .\" これらのうち、 \fBEDOM\fP と \fBERANGE\fP は ISO C standard にある。 .\" さらに、ISO C Amendment 1 では、エラー番号 \fBEILSEQ\fP が .\" マルチバイト文字やワイド文字での符号化エラーを表すために .\" 定義されている。 .\" .TP 16 .B E2BIG 引き数リストが長過ぎる (POSIX.1) .TP .B EACCES 許可がない (POSIX.1) .TP .B EADDRINUSE アドレスがすでに使用されている (POSIX.1) .TP .B EADDRNOTAVAIL アドレスが使用できない (POSIX.1) .\" EADV は HURD においてだけのエラー(?) .TP .B EAFNOSUPPORT アドレス・ファミリーがサポートされていない (POSIX.1) .TP .B EAGAIN リソースが一時的に利用不可 .RB ( EWOULDBLOCK と同じ値でもよい) (POSIX.1) .TP .B EALREADY 接続が既に処理中である (POSIX.1) .TP .B EBADE 不正なやり取り (exchange) である .TP .B EBADF ファイルディスクリプタが不正である (POSIX.1) .TP .B EBADFD ファイルディスクリプタが不正な状態である .TP .B EBADMSG メッセージが不正である (POSIX.1) .TP .B EBADR 不正なリクエストディスクリプタ .TP .B EBADRQC 不正なリクエストコード .TP .B EBADSLT 不正なスロット .\" EBFONT is defined but appears not to be used by kernel or glibc. .TP .B EBUSY リソースが使用中である (POSIX.1) .TP .B ECANCELED 操作がキャンセルされた (POSIX.1) .TP .B ECHILD 子プロセスが無い (POSIX.1) .TP .B ECHRNG チャンネル番号が範囲外である .TP .B ECOMM 送信時に通信エラーが発生した .TP .B ECONNABORTED 接続が中止された (POSIX.1) .TP .B ECONNREFUSED 接続が拒否された (POSIX.1) .TP .B ECONNRESET 接続がリセットされた (POSIX.1) .TP .B EDEADLK リソースのデッドロックを回避した (POSIX.1) .TP .B EDEADLOCK .B EDEADLK の同義語 .TP .B EDESTADDRREQ 宛先アドレスが必要である (POSIX.1) .TP .B EDOM 数学関数で引き数が領域外である (out of domain) .\" EDOTDOT is defined but appears to be unused .TP .B EDQUOT .\" POSIX just says "Reserved" ディスク・クォータ (quota) を超過した (POSIX.1) .TP .B EEXIST ファイルが存在する (POSIX.1) .TP .B EFAULT アドレスが不正である (POSIX.1) .TP .B EFBIG ファイルが大き過ぎる (POSIX.1) .TP .B EHOSTDOWN ホストがダウンしている .TP .B EHOSTUNREACH ホストに到達不能である (POSIX.1) .TP .B EIDRM 識別子が削除された (POSIX.1) .TP .B EILSEQ 不正なバイト列 (POSIX.1, C99) .TP .B EINPROGRESS 操作が実行中である (POSIX.1) .TP .B EINTR 関数呼び出しが割り込まれた (POSIX.1); .BR signal (7) 参照。 .TP .B EINVAL 引数が無効である (POSIX.1) .TP .B EIO 入出力エラー (POSIX.1) .TP .B EISCONN ソケットが接続されている (POSIX.1) .TP .B EISDIR ディレクトリである (POSIX.1) .TP .B EISNAM 名前付きのファイルである .TP .B EKEYEXPIRED 鍵が期限切れとなった .TP .B EKEYREJECTED 鍵がサーバにより拒否された .TP .B EKEYREVOKED 鍵が無効となった .TP .B EL2HLT 停止 (レベル 2) .TP .B EL2NSYNC 同期できていない (レベル 2) .TP .B EL3HLT 停止 (レベル 3) .TP .B EL3RST リセット (レベル 3) .TP .B ELIBACC 必要な共有ライブラリにアクセスできなかった .TP .B ELIBBAD 壊れた共有ライブラリにアクセスしようとした .TP .B ELIBMAX リンクしようとした共有ライブラリが多過ぎる .TP .B ELIBSCN a.out のライブラリセクションが壊れている (corrupted) .TP .B ELIBEXEC 共有ライブラリを直接実行できなかった .TP .B ELOOP シンボリック・リンクの回数が多過ぎる (POSIX.1) .\" ELNRNG is defined but appears to be unused .TP .B EMEDIUMTYPE 間違ったメディア種別である .TP .B EMFILE オープンされているファイルが多過ぎる (POSIX.1) .TP .B EMLINK リンクが多過ぎる (POSIX.1) .TP .B EMSGSIZE メッセージが長過ぎる (POSIX.1) .TP .B EMULTIHOP .\" POSIX says "Reserved" マルチホップ (multihop) を試みた (POSIX.1) .TP .B ENAMETOOLONG ファイル名が長過ぎる (POSIX.1) .\" ENAVAIL is defined, but appears not to be used .TP .B ENETDOWN ネットワークが不通である (POSIX.1) .TP .B ENETRESET 接続がネットワーク側から中止された (POSIX.1) .TP .B ENETUNREACH ネットワークが到達不能である (POSIX.1) .TP .B ENFILE システム全体でオープンされているファイルが多過ぎる (POSIX.1) .\" ENOANO is defined but appears to be unused. .TP .B ENOBUFS 使用可能なバッファ空間がない (POSIX.1 (XSI STREAMS option)) .\" ENOCSI is defined but appears to be unused. .TP .B ENODATA ストリームの読み出しキューの先頭に読み出し可能なメッセージがない (POSIX.1) .TP .B ENODEV そのようなデバイスは無い (POSIX.1) .TP .B ENOENT そのようなファイルやディレクトリは無い (POSIX.1) .TP .B ENOEXEC 実行ファイル形式のエラー (POSIX.1) .TP .B ENOKEY 要求された鍵が利用できない .TP .B ENOLCK 利用できるロックが無い (POSIX.1) .TP .B ENOLINK .\" POSIX says "Reserved" リンクが切れている (POSIX.1) .TP .B ENOMEDIUM メディアが見つからない .TP .B ENOMEM 十分な空きメモリ領域が無い (POSIX.1) .TP .B ENOMSG 要求された型のメッセージが存在しない (POSIX.1) .TP .B ENONET マシンがネットワーク上にない .TP .B ENOPKG パッケージがインストールされていない .TP .B ENOPROTOOPT 指定されたプロトコルが利用できない (POSIX.1) .TP .B ENOSPC デバイスに空き領域が無い (POSIX.1) .TP .B ENOSR 指定されたストリーム・リソースが存在しない (POSIX.1 (XSI STREAMS option)) .TP .B ENOSTR ストリームではない (POSIX.1 (XSI STREAMS option)) .TP .B ENOSYS 関数が実装されていない (POSIX.1) .TP .B ENOTBLK ブロックデバイスが必要である .TP .B ENOTCONN ソケットが接続されていない (POSIX.1) .TP .B ENOTDIR ディレクトリではない (POSIX.1) .TP .B ENOTEMPTY ディレクトリが空ではない (POSIX.1) .\" ENOTNAM is defined but appears to be unused. .TP .B ENOTSOCK ソケットではない (POSIX.1) .TP .B ENOTSUP 操作がサポートされていない (POSIX.1) .TP .B ENOTTY I/O 制御操作が適切でない (POSIX.1) .TP .B ENOTUNIQ 名前がネットワークで一意ではない .TP .B ENXIO そのようなデバイスやアドレスはない (POSIX.1) .TP .B EOPNOTSUPP ソケットでサポートしていない操作である (POSIX.1) .sp (Linux では .B ENOTSUP と .B EOPNOTSUPP は同じ値を持つが、 POSIX.1 に従えば両者のエラー値は区別されるべきである。) .TP .B EOVERFLOW 指定されたデータ型に格納するには値が大き過ぎる (POSIX.1) .TP .B EPERM 操作が許可されていない (POSIX.1) .TP .B EPFNOSUPPORT サポートされていないプロトコルファミリーである .TP .B EPIPE パイプが壊れている (POSIX.1) .TP .B EPROTO プロトコル・エラー (POSIX.1) .TP .B EPROTONOSUPPORT プロトコルがサポートされていない (POSIX.1) .TP .B EPROTOTYPE ソケットに指定できないプロトコル・タイプである (POSIX.1) .TP .B ERANGE 結果が大き過ぎる (POSIX.1, C99) .TP .B EREMCHG リモートアドレスが変わった .TP .B EREMOTE オブジェクトがリモートにある .TP .B EREMOTEIO リモート I/O エラー .TP .B ERESTART システムコールが中断され再スタートが必要である .TP .B EROFS 読み出し専用のファイルシステムである (POSIX.1) .TP .B ESHUTDOWN 通信相手がシャットダウンされて送信できない .TP .B ESPIPE 無効なシーク (POSIX.1) .TP .B ESOCKTNOSUPPORT サポートされていないソケット種別である .TP .B ESRCH そのようなプロセスは無い (POSIX.1) .\" ESRMNT is defined but appears not to be used .TP .B ESTALE ファイルハンドルが古い状態になっている (POSIX.1) .sp NFS や他のファイルシステムで起こりうる。 .TP .B ESTRPIPE ストリーム・パイプ・エラー .TP .B ETIME 時間が経過した (POSIX.1 (XSI STREAMS option)) .sp (POSIX.1 では "STREAM .BR ioctl (2) timeout" と書かれている) .TP .B ETIMEDOUT 操作がタイムアウトした (POSIX.1) .\" ETOOMANYREFS is defined, but appears not to be used. .TP .B ETXTBSY テキストファイルが使用中である (POSIX.1) .TP .B EUCLEAN Structure needs cleaning .TP .B EUNATCH プロトコルのドライバが付与 (attach) されていない .TP .B EUSERS ユーザ数が多過ぎる .TP .B EWOULDBLOCK 操作がブロックされる見込みである .RB ( EAGAIN と同じ値でもよい) (POSIX.1) .TP .B EXDEV 不適切なリンク (POSIX.1) .TP .B EXFULL 変換テーブルが一杯である .SH 注意 以下はよくやる間違いである。 .in +4n .nf if (somecall() == \-1) { printf("somecall() failed\en"); if (errno == ...) { ... } } .fi .in このようにすると、参照している時点では .I errno はもはや .IR somecall () から返された値を保持しているとは限らない .RB ( printf (3) により変更されているかもしれない)。 ライブラリコールをまたいで .I errno の値を保存したい場合は、以下のように保存しなければならない: .in +4n .nf if (somecall() == \-1) { int errsv = errno; printf("somecall() failed\en"); if (errsv == ...) { ... } } .fi .in .PP 昔の C では、 .I をインクルードするのではなく .I errno を手動で .RI ( "extern int errno" のように) 定義するのが一般的であった。 .BR "このようなことはしないこと" "。" こうすると、最近のバージョンの C ライブラリでは正しく動作しないだろう。 しかし、(非常に) 古い UNIX システムでは、 .I がなく、宣言が必要なことがあるかもしれない。 .BR err (3), .BR error (3), .BR perror (3), .BR strerror (3)