.\" Copyright (c) 1996 Andries Brouwer (aeb@cwi.nl)
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_FULL)
.\" 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, see
.\" .
.\" %%%LICENSE_END
.\"
.\" 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
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.\"
.\" 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 2020\-11\-01 "" "Linux Programmer's Manual"
.SH 名前
errno \- 直近に発生したエラーの番号
.SH 書式
.\".PP
.\".BI "extern int " errno ;
\fB#include \fP
.SH 説明
.\"
ヘッダーファイル \fI\fP で整数型の変数 \fIerrno\fP が定義されており、
システムコールやいくつかのライブラリ関数は、エラーが発生した際に この変数にその原因を示す値を設定する。
.SS errno
\fIerrno\fP の値は呼び出しの返り値がエラー (ほとんどのシステムコールでは \-1 で、ほとんどのライブラリ関数では \-1 か NULL)
を示したときにのみ意味を持つが、関数は成功した場合も \fIerrno\fP を変更することが「許されている」。どのシステムコールもライブラリ関数も
\fIerrno\fP の値を 0 に設定することはない。
.PP
いくつかのシステムコールやライブラリ関数 (例えば \fBgetpriority\fP(2)) では、成功した場合の有効な返り値として \-1
が返されることがある。 このような場合、成功なのかエラーなのかを区別するためには、 呼び出しの前に \fIerrno\fP を 0
に設定しておけばよい。呼び出しの返り値がエラー発生の可能性を 示すものだった場合には、 \fIerrno\fP が 0 以外の値かを見て確認すればよい。
.PP
.\"
\fIerrno\fP は、ISO C standard で \fIint\fP 型の変更可能な左辺値 として定義されており、明示的に宣言を行ってはならない;
\fIerrno\fP はマクロの場合もありえる。 \fIerrno\fP はスレッド毎に値を持つ。 つまりあるスレッドで \fIerrno\fP が設定されても、
他のスレッドの \fIerrno\fP には影響しない。
.SS エラー番号とエラー名
有効なエラー番号はすべて正の数字である。ヘッダーファイル \fI\fP で、 \fIerrno\fP
で使われる可能性のあるすべてのエラー番号に対してシンボル名が定義されている。
.PP
POSIX.1 で定義されているすべてのエラー名には、 それぞれ異なる値が対応していなければならない。 但し、 \fBEAGAIN\fP と
\fBEWOULDBLOCK\fP は例外で、これらは同じ値を持ってもよい。 Linux では、すべてのアーキテクチャーでこれら二つは同じ値である。
.PP
各シンボル名に対応するエラー番号は UNIX システムにより異なり、 Linux
ではアーキテクチャーによっても異なっている。したがって、数値は以下のエラー名の一覧には含まれていない。関数 \fBperror\fP(3) と
\fBstrerror\fP(3) を使うと、これらの名前を、対応するテキストのエラーメッセージに変換できる。
.PP
各 Linux システムでは、 \fBerrno\fP(1) コマンド (\fImoreutils\fP パッケージに含まれている)
を使って、すべてのエラーのシンボル名と対応するエラー番号の一覧を取得できる。
.PP
.in +4n
.EX
$ \fBerrno \-l\fP
EPERM 1 Operation not permitted
ENOENT 2 No such file or directory
ESRCH 3 No such process
EINTR 4 Interrupted system call
EIO 5 Input/output error
\&...
.EE
.in
.PP
\fBerrno\fP(1)
コマンドを使うと、個々のエラー番号やエラー名を調べたり、エラーの説明に対する文字列検索でエラーを検索したりできる。以下に例を示す。
.PP
.in +4n
.EX
$ \fBerrno 2\fP
ENOENT 2 No such file or directory
$ \fBerrno ESRCH\fP
ESRCH 3 No such process
$ \fBerrno \-s permission\fP
EACCES 13 Permission denied
.EE
.in
.\".PP
.\" POSIX.1 (2001 edition) lists the following symbolic error names. Of
.\" these, \fBEDOM\fP and \fBERANGE\fP are in the ISO C standard. ISO C
.\" Amendment 1 defines the additional error number \fBEILSEQ\fP for
.\" coding errors in multibyte or wide characters.
.\"
.SS エラー名の一覧
以下のエラーのシンボル名の一覧で、シンボル名に付いている注記は以下の通りである。
.IP * 3
\fIPOSIX.1\-2001\fP: 名前が POSIX.1\-2001 とそれ以降のバージョンの POSIX.1
で定義されている。但し書きがある場合を除く。
.IP *
\fIPOSIX.1\-2008\fP: 名前が POSIX.1\-2008 で定義されているが、それ以前の POSIX.1 標準には存在しない。
.IP *
\fIC99\fP: 名前が C99 で定義されている。
.PP
以下は Linux で定義されているエラーのシンボル名の一覧である。
.TP 16
\fBE2BIG\fP
引数リストが長過ぎる (POSIX.1\-2001)
.TP
\fBEACCES\fP
許可がない (POSIX.1\-2001)
.TP
\fBEADDRINUSE\fP
アドレスがすでに使用されている (POSIX.1\-2001)
.TP
\fBEADDRNOTAVAIL\fP
.\" EADV is only an error on HURD(?)
アドレスが使用できない (POSIX.1\-2001)
.TP
\fBEAFNOSUPPORT\fP
アドレスファミリーがサポートされていない (POSIX.1\-2001)
.TP
\fBEAGAIN\fP
リソースが一時的に利用不可 (\fBEWOULDBLOCK\fP と同じ値でもよい) (POSIX.1\-2001)
.TP
\fBEALREADY\fP
接続が既に処理中である (POSIX.1\-2001)
.TP
\fBEBADE\fP
不正なやり取り (exchange) である
.TP
\fBEBADF\fP
ファイルディスクリプターが不正である (POSIX.1\-2001)
.TP
\fBEBADFD\fP
ファイルディスクリプターが不正な状態である
.TP
\fBEBADMSG\fP
メッセージが不正である (POSIX.1\-2001)
.TP
\fBEBADR\fP
不正なリクエストディスクリプター
.TP
\fBEBADRQC\fP
不正なリクエストコード
.TP
\fBEBADSLT\fP
.\" EBFONT is defined but appears not to be used by kernel or glibc.
不正なスロット
.TP
\fBEBUSY\fP
リソースが使用中である (POSIX.1\-2001)
.TP
\fBECANCELED\fP
操作がキャンセルされた (POSIX.1\-2001)
.TP
\fBECHILD\fP
子プロセスがない (POSIX.1\-2001)
.TP
\fBECHRNG\fP
チャンネル番号が範囲外である
.TP
\fBECOMM\fP
送信時に通信エラーが発生した
.TP
\fBECONNABORTED\fP
接続が異常終了した (POSIX.1\-2001)
.TP
\fBECONNREFUSED\fP
接続が拒否された (POSIX.1\-2001)
.TP
\fBECONNRESET\fP
接続がリセットされた (POSIX.1\-2001)
.TP
\fBEDEADLK\fP
リソースのデッドロックを回避した (POSIX.1\-2001)
.TP
\fBEDEADLOCK\fP
ほとんどのアーキテクチャーでは、 \fBEDEADLK\fP の同義語である。いくつかのアーキテクチャー (Linux MIPS, PowerPC,
SPARC など) では、別のエラーコード "File locking deadlock error" である。
.TP
\fBEDESTADDRREQ\fP
宛先アドレスが必要である (POSIX.1\-2001)
.TP
\fBEDOM\fP
.\" EDOTDOT is defined but appears to be unused
数学関数で引数が領域外 (out of domain) である (POSIX.1, C99)
.TP
\fBEDQUOT\fP
.\" POSIX just says "Reserved"
ディスククォータ (quota) を超過した (POSIX.1\-2001)
.TP
\fBEEXIST\fP
ファイルが存在する (POSIX.1\-2001)
.TP
\fBEFAULT\fP
アドレスが不正である (POSIX.1\-2001)
.TP
\fBEFBIG\fP
ファイルが大き過ぎる (POSIX.1\-2001)
.TP
\fBEHOSTDOWN\fP
ホストがダウンしている
.TP
\fBEHOSTUNREACH\fP
ホストに到達不能である (POSIX.1\-2001)
.TP
\fBEHWPOISON\fP
メモリーページにハードウェアエラーがある
.TP
\fBEIDRM\fP
識別子が削除された (POSIX.1\-2001)
.TP
\fBEILSEQ\fP
無効もしくは不完全なマルチバイト文字、ワイド文字である (POSIX.1, C99).
.IP
ここに表示しているテキストは glibc のエラーの説明である。 POSIX.1\-2001
では、このエラーの説明は「不正なバイトシーケンス」("Illegal byte sequence") となっている。
.TP
\fBEINPROGRESS\fP
操作が実行中である (POSIX.1\-2001)
.TP
\fBEINTR\fP
関数呼び出しが割り込まれた (POSIX.1\-2001); \fBsignal\fP(7) 参照。
.TP
\fBEINVAL\fP
引数が無効である (POSIX.1\-2001)
.TP
\fBEIO\fP
入出力エラー (POSIX.1\-2001)
.TP
\fBEISCONN\fP
ソケットが接続されている (POSIX.1\-2001)
.TP
\fBEISDIR\fP
ディレクトリである (POSIX.1\-2001)
.TP
\fBEISNAM\fP
名前付きのファイルである
.TP
\fBEKEYEXPIRED\fP
鍵が期限切れとなった
.TP
\fBEKEYREJECTED\fP
鍵がサーバにより拒否された
.TP
\fBEKEYREVOKED\fP
鍵が無効となった
.TP
\fBEL2HLT\fP
停止 (レベル 2)
.TP
\fBEL2NSYNC\fP
同期できていない (レベル 2)
.TP
\fBEL3HLT\fP
停止 (レベル 3)
.TP
\fBEL3RST\fP
停止 (レベル 3)
.TP
\fBELIBACC\fP
必要な共有ライブラリにアクセスできなかった
.TP
\fBELIBBAD\fP
壊れた共有ライブラリにアクセスしようとした
.TP
\fBELIBMAX\fP
リンクしようとした共有ライブラリが多過ぎる
.TP
\fBELIBSCN\fP
a.out の \&.lib セクションが壊れている (corrupted)
.TP
\fBELIBEXEC\fP
共有ライブラリを直接実行できなかった
.TP
\fBELNRANGE\fP
.\" ELNRNG appears to be used by a few drivers
リンク番号が範囲外である
.TP
\fBELOOP\fP
シンボリックリンクの回数が多過ぎる (POSIX.1\-2001)
.TP
\fBEMEDIUMTYPE\fP
間違ったメディア種別である
.TP
\fBEMFILE\fP
オープンしているファイルが多過ぎる (POSIX.1\-2001)。 通常は \fBgetrlimit\fP(2) に説明があるリソース上限
\fBRLIMIT_NOFILE\fP を超過した場合に発生する。 \fI/proc/sys/fs/nr_open\fP
で指定された上限を超過した場合にも発生する。
.TP
\fBEMLINK\fP
リンクが多過ぎる (POSIX.1\-2001)
.TP
\fBEMSGSIZE\fP
メッセージが長過ぎる (POSIX.1\-2001)
.TP
\fBEMULTIHOP\fP
.\" POSIX says "Reserved"
マルチホップ (multihop) を試みた (POSIX.1\-2001)
.TP
\fBENAMETOOLONG\fP
.\" ENAVAIL is defined, but appears not to be used
ファイル名が長過ぎる (POSIX.1\-2001)
.TP
\fBENETDOWN\fP
ネットワークが不通である (POSIX.1\-2001)
.TP
\fBENETRESET\fP
接続がネットワーク側から中止された (POSIX.1\-2001)
.TP
\fBENETUNREACH\fP
ネットワークが到達不能である (POSIX.1\-2001)
.TP
\fBENFILE\fP
システムでオープンされたファイルが多すぎる (POSIX.1\-2001)。 Linux では、たいてい \fI/proc/sys/fs/file\-max\fP
上限に達した結果である (\fBproc\fP(5) を参照)。
.TP
\fBENOANO\fP
.\" ENOANO appears to be used by a few drivers
anode がない
.TP
\fBENOBUFS\fP
.\" ENOCSI is defined but appears to be unused.
使用可能なバッファー空間がない (POSIX.1 (XSI STREAMS オプション))
.TP
\fBENODATA\fP
ストリームの読み出しキューの先頭に読み出し可能なメッセージがない (POSIX.1\-2001)
.TP
\fBENODEV\fP
そのようなデバイスはない (POSIX.1\-2001)
.TP
\fBENOENT\fP
そのようなファイルやディレクトリはない (POSIX.1\-2001)
.IP
通常は、このエラーは、指定されたパス名が存在しないか、パス名のディレクトリプレフィックスの構成要素のいずれかが存在しないか、指定されたパス名が壊れた
(dangling) シンボリックリンク、の場合に発生する。
.TP
\fBENOEXEC\fP
実行ファイル形式のエラー (POSIX.1\-2001)
.TP
\fBENOKEY\fP
要求された鍵が利用できない
.TP
\fBENOLCK\fP
利用できるロックがない (POSIX.1\-2001)
.TP
\fBENOLINK\fP
.\" POSIX says "Reserved"
リンクが切れている (POSIX.1\-2001)
.TP
\fBENOMEDIUM\fP
メディアが見つからない
.TP
\fBENOMEM\fP
十分な空きメモリー領域がない/メモリを割り当てることができない (POSIX.1\-2001)
.TP
\fBENOMSG\fP
要求された型のメッセージが存在しない (POSIX.1\-2001)
.TP
\fBENONET\fP
マシンがネットワーク上にない
.TP
\fBENOPKG\fP
パッケージがインストールされていない
.TP
\fBENOPROTOOPT\fP
指定されたプロトコルが利用できない (POSIX.1\-2001)
.TP
\fBENOSPC\fP
デバイスに空き領域がない (POSIX.1\-2001)
.TP
\fBENOSR\fP
指定されたストリームリソースが存在しない (POSIX.1 (XSI STREAMS オプション))
.TP
\fBENOSTR\fP
ストリームではない (POSIX.1 (XSI STREAMS オプション))
.TP
\fBENOSYS\fP
関数が実装されていない (POSIX.1\-2001)
.TP
\fBENOTBLK\fP
ブロックデバイスが必要である
.TP
\fBENOTCONN\fP
ソケットが接続されていない (POSIX.1\-2001)
.TP
\fBENOTDIR\fP
ディレクトリではない (POSIX.1\-2001)
.TP
\fBENOTEMPTY\fP
.\" ENOTNAM is defined but appears to be unused.
ディレクトリが空ではない (POSIX.1\-2001)
.TP
\fBENOTRECOVERABLE\fP
状態が復元不可能である (POSIX.1\-2008)
.TP
\fBENOTSOCK\fP
ソケットではない (POSIX.1\-2001)
.TP
\fBENOTSUP\fP
操作がサポートされていない (POSIX.1\-2001)
.TP
\fBENOTTY\fP
I/O 制御操作が適切でない (POSIX.1\-2001)
.TP
\fBENOTUNIQ\fP
名前がネットワークで一意ではない
.TP
\fBENXIO\fP
そのようなデバイスやアドレスはない (POSIX.1\-2001)
.TP
\fBEOPNOTSUPP\fP
ソケットでサポートしていない操作である (POSIX.1\-2001)
.IP
(Linux では \fBENOTSUP\fP と \fBEOPNOTSUPP\fP は同じ値を持つが、 POSIX.1
に従えば両者のエラー値は区別されるべきである。)
.TP
\fBEOVERFLOW\fP
指定されたデータ型に格納するには値が大き過ぎる (POSIX.1\-2001)
.TP
\fBEOWNERDEAD\fP
.\" Used at least by the user-space side of rubost mutexes
所有者が死んでいる (POSIX.1\-2008)
.TP
\fBEPERM\fP
操作が許可されていない (POSIX.1\-2001)
.TP
\fBEPFNOSUPPORT\fP
サポートされていないプロトコルファミリーである
.TP
\fBEPIPE\fP
パイプが壊れている (POSIX.1\-2001)
.TP
\fBEPROTO\fP
プロトコルエラー (POSIX.1\-2001)
.TP
\fBEPROTONOSUPPORT\fP
プロトコルがサポートされていない (POSIX.1\-2001)
.TP
\fBEPROTOTYPE\fP
ソケットに指定できないプロトコルタイプである (POSIX.1\-2001)
.TP
\fBERANGE\fP
結果が大き過ぎる (POSIX.1, C99)
.TP
\fBEREMCHG\fP
リモートアドレスが変わった
.TP
\fBEREMOTE\fP
オブジェクトがリモートにある
.TP
\fBEREMOTEIO\fP
リモート I/O エラー
.TP
\fBERESTART\fP
システムコールが中断され再スタートが必要である
.TP
\fBERFKILL\fP
.\" ERFKILL appears to be used by various drivers
RF\-kill のため操作不可能
.TP
\fBEROFS\fP
読み出し専用のファイルシステムである (POSIX.1\-2001)
.TP
\fBESHUTDOWN\fP
通信相手がシャットダウンされて送信できない
.TP
\fBESPIPE\fP
無効なシーク (POSIX.1\-2001)
.TP
\fBESOCKTNOSUPPORT\fP
サポートされていないソケット種別である
.TP
\fBESRCH\fP
.\" ESRMNT is defined but appears not to be used
そのようなプロセスはない (POSIX.1\-2001)
.TP
\fBESTALE\fP
ファイルハンドルが古い状態になっている (POSIX.1\-2001)
.IP
NFS や他のファイルシステムで起こりうる。
.TP
\fBESTRPIPE\fP
ストリームパイプエラー
.TP
\fBETIME\fP
時間が経過した (POSIX.1 (XSI STREAMS option))
.IP
(POSIX.1 では "STREAM \fBioctl\fP(2) timeout" と書かれている)
.TP
\fBETIMEDOUT\fP
操作がタイムアウトした (POSIX.1\-2001)
.TP
\fBETOOMANYREFS\fP
.\" ETOOMANYREFS seems to be used in net/unix/af_unix.c
参照が多すぎる: 接合できない
.TP
\fBETXTBSY\fP
テキストファイルが使用中である (POSIX.1\-2001)
.TP
\fBEUCLEAN\fP
データ構造をきれいにする必要がある
.TP
\fBEUNATCH\fP
プロトコルのドライバが付与 (attach) されていない
.TP
\fBEUSERS\fP
ユーザー数が多過ぎる
.TP
\fBEWOULDBLOCK\fP
操作がブロックされる見込みである (\fBEAGAIN\fP と同じ値でもよい) (POSIX.1\-2001)
.TP
\fBEXDEV\fP
不適切なリンク (POSIX.1\-2001)
.TP
\fBEXFULL\fP
変換テーブルが一杯である
.SH 注意
以下はよくやる間違いである。
.PP
.in +4n
.EX
if (somecall() == \-1) {
printf("somecall() failed\en");
if (errno == ...) { ... }
}
.EE
.in
.PP
このようにすると、参照している時点では \fIerrno\fP はもはや \fIsomecall\fP() から返された値を保持しているとは限らない
(\fBprintf\fP(3) により変更されているかもしれない)。 ライブラリコールをまたいで \fIerrno\fP
の値を保存したい場合は、以下のように保存しなければならない:
.PP
.in +4n
.EX
if (somecall() == \-1) {
int errsv = errno;
printf("somecall() failed\en");
if (errsv == ...) { ... }
}
.EE
.in
.PP
POSIX スレッド API は、エラーの場合に \fIerrno\fP
を設定「しない」点に注意すること。代わりに、エラーの場合、関数の結果としてエラー番号が返される。これらのエラー番号は、他の API で \fIerrno\fP
で返されるエラー番号と同じ意味を持つ。
.PP
いくつかの古いシステムでは、 \fI\fP は存在しなかったり、 \fIerrno\fP を定義していなかった。そのため、
\fIerrno\fP を手動で (\fIextern int errno\fP のように)
定義する必要があった。\fBこのようなことはしないこと\fP。ずっと以前にこのようにする必要はなくなっており、最近のバージョンの C
ライブラリでは問題になるからである。
.SH 関連項目
.\" In the moreutils package
\fBerrno\fP(1), \fBerr\fP(3), \fBerror\fP(3), \fBperror\fP(3), \fBstrerror\fP(3)
.SH この文書について
この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
\%https://www.kernel.org/doc/man\-pages/ に書かれている。