<errno.h>は、 C プログラミング言語の標準ライブラリのヘッダー ファイルです。この、シンボル(「エラー番号」の略)を使用してエラー状態を報告および取得するためのマクロが定義されています。 [ 1 ]errno
errnoerrno整数変数のように動作します。特定のライブラリ関数がエラーを検出すると、値(エラー番号)が格納されます。プログラムの起動時には、格納されている値はゼロです。ライブラリ関数は、ゼロより大きい値のみを格納します。どのライブラリ関数も、エラーを検出したかどうかに関わらず、戻る前に格納されている値を変更できます。[ 2 ]ほとんどの関数は、特別な値を返すことでエラーを検出したことを示します。ポインタを返す関数の場合は通常NULL、整数を返す関数の場合は-1 です。一部の関数では、呼び出し元がゼロにプリセットし、後でテストしてエラーが検出されたかどうかを確認する必要があります。errno
マクロは、プラットフォームによっては、型指定子や型指定子が付加される場合もある、型を持つ左辺値errnoに展開されます。 [ 3 ]元々は静的メモリ位置でしたが、現在ではマルチスレッドを可能にするためにマクロがほぼ常に使用され、各スレッドが独自のスレッドローカルエラー番号を参照できるようになっています。intexternvolatile
ヘッダーファイルには、エラーコードを表す整数定数に展開されるマクロも定義されています。C標準ライブラリでは、定義する必要があるのは3つだけです。[ 2 ]
AIX、Linux、SolarisなどのPOSIX準拠のオペレーティングシステムには、他にも多くのエラー値が含まれており、その多くは上記のものよりもはるかに頻繁に使用されます。たとえば、読み取り用にファイルを開くことができない場合などです。[ 5 ] C++11では、POSIX仕様にあるのと同じ値の多くも定義されています。[ 6 ]EACCES
従来、 Unix システム マニュアルの最初のページである intro(2) には、すべての errno.h マクロがリストされていますが、 Linuxではそうではなく、これらのマクロは errno(3) にリストされています。[ 7 ]
は、strerror ( <string.h>で定義) または BSD 拡張機能であるerrnoを使用して説明的な文字列に変換できます。変換結果は、 perror ( <stdio.h>で定義)を使用して標準エラー出力に直接出力できます。多くの Unix ライクなシステムと同様に、 はスレッドセーフではないため、スレッドセーフなバージョンが使用されますが、POSIX と GNU の定義が矛盾しているため、テーブルよりも移植性が低くなっています。[ 8 ]sys_errliststrerrorstrerror_rsys_errlist
GNU Cライブラリ(GLIBC)は、ヘッダーファイル<errno.h>にPOSIXエラー値マクロを追加で提供しています。[ 9 ]これらはstrerrorによって提供されるマクロの説明です。[ 10 ]
エラーコードのマクロ名と意味はPOSIX標準定義で定義されていますが、数値は定義されていません。ただし、慣例として、Unixの異なるバージョン間で値は同じように見えます。プログラムは特定の数値に依存すべきではなく、関連する関数のマニュアルページのERRORSセクションで指定されているマクロ名を使用してコードをテストする必要があります。ソースコードの可読性と移植性のために、コード内で標準マクロ名を使用することを強くお勧めします。[ 12 ] [ 13 ]