errno.h は、C プログラミング言語の標準ライブラリのヘッダー ファイルです。シンボル(「エラー番号」の略)を使用してエラー状態を報告および取得するためのマクロを定義します。 [1]errno
errnoerrno整数変数のように動作します。特定のライブラリ関数はエラーを検出すると、値(エラー番号)をに格納します。プログラムの起動時には、格納される値は 0 です。ライブラリ関数は 0 より大きい値のみを格納します。ライブラリ関数は、エラーを検出するかどうかに関係なく、戻る前に格納された値を変更できます。[2]ほとんどの関数は、特別な値を返すことでエラーを検出したことを示します。通常、ポインタを返す関数の場合はNULL 、整数を返す関数の場合は -1 です。いくつかの関数では、呼び出し側が0 に事前設定し、その後エラーが検出されたかどうかをテストする
必要があります。errno
マクロは、プラットフォームに応じてand/or型指定子が付いた型の左辺値errnoに展開されます。 [3]もともとこれは静的なメモリ位置でしたが、今日ではマクロはほとんどの場合、マルチスレッドを可能にするために使用され、各スレッドは独自のスレッドローカルエラー番号を参照します。
intexternvolatile
ヘッダーファイルには、エラーコードを表す整数定数に展開されるマクロも定義されています。C標準ライブラリでは、次の3つだけを定義する必要があります。[2]
エドム
- 関数のドメイン外のパラメータからの結果、例:
sqrt(-1)
エレンジ
- 関数の範囲外の結果、例えば32ビット幅のシステムでは
strtol("0xfffffffff", NULL, 0)long
EILSEQ (1994年C89規格の修正1以降必須)[4]
- 不正なバイトシーケンスの結果です (例: UTF-8 を使用するシステム) 。
mbstowcs(buf, "\xff", 1)
AIX、Linux、SolarisなどのPOSIX準拠のオペレーティングシステムには、ファイルを読み取り用に開けない場合のEACCESなど、上記のエラー値よりも頻繁に使用されるエラー値が多数含まれています。 [5] C++11では、POSIX仕様にあるのと同じ値の多くも定義されています。[6]
伝統的に、 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
GLIBC マクロ
GNU Cライブラリ(GLIBC)は、ヘッダーファイルに追加のPOSIXerrno.hエラー値マクロを提供します。[9]これらは、 POSIX標準に含まれていない41と58を除いた、strerror によって提供されるマクロの説明です。
エペルム(1)
- 操作は許可されていません
エノエント(2)
- そのようなファイル、又はディレクトリはありません
エシュルク(3)
- そのようなプロセスはありません
エイントル(4)
- 中断されたシステムコール
エイオー(5)
- 入出力エラー
エンクシオ(6)
- そのようなデバイスまたはアドレスはありません
イーツービッグ(7)
- 引数リストが長すぎます
エノエグゼック(8)
- 実行形式エラー
EBADF (9)
- ファイル記述子が不正です
エチャイルド(10)
- 子プロセスなし
イーガイン(11)
- リソースが一時的に利用できません
エノメム(12)
- メモリを割り当てられません
アクセス(13)
- 許可が拒否されました
エフォルト(14)
- 住所が間違っています
ENOTBLK (15)
- ブロックデバイスが必要です
エビジー(16)
- デバイスまたはリソースがビジー状態です
存在する(17)
- ファイルが存在します
エクスデブ(18)
- 無効なクロスデバイスリンク
エノデフ(19)
- そのようなデバイスはありません
エノティル(20)
- ディレクトリではありません
エイスディール(21)
- ディレクトリです
アインヴァル(22)
- 無効な引数
エンファイル(23)
- システムで開いているファイルが多すぎます
エムファイル(24)
- 開いているファイルが多すぎます
エノッティ(25)
- デバイスの ioctl が不適切です
ETXTBSY (26)
- テキストファイルがビジー状態です
エフビッグ(27)
- ファイルが大きすぎます
ENOSPC (28)
- デバイスに空き容量がありません
エスピープ(29)
- 不正なシーク
エロフス(30)
- 読み取り専用ファイルシステム
エムリンク(31)
- リンクが多すぎる
エピペ(32)
- 壊れたパイプ
エドム(33)
- 数値引数が範囲外です
エレンジ(34)
- 数値結果が範囲外です
エディアドルク(35)
- リソースのデッドロックを回避
エナメトゥーロン(36)
- ファイル名が長すぎます
エノルク(37)
- ロックは使用できません
エノシス(38)
- 機能が実装されていません
エノテンプティ(39)
- ディレクトリが空ではありません
エルループ(40)
- シンボリックリンクのレベルが多すぎる
ENOMSG (42)
- 希望するタイプのメッセージがありません
EIDRM(43)
- 識別子が削除されました
エクレン(44)
- チャンネル番号が範囲外です
エル2NSYNC (45)
- レベル2が同期されていません
EL3HLT (46)
- レベル3停止
エル3RST (47)
- レベル3リセット
エルンン(48)
- リンク番号が範囲外です
ユーナッチ(49)
- プロトコル ドライバーが接続されていません
エノシ(50)
- CSI構造は利用できません
EL2HLT (51)
- レベル2停止
エバデ(52)
- 無効な交換
エバドル(53)
- 無効なリクエスト記述子
エクスフル(54)
- 交換完了
エノアノ(55)
- 陽極なし
エバドリック(56)
- リクエストコードが無効です
エバドス(57)
- 無効なスロット
エブフォント(59)
- フォントファイル形式が正しくありません
エノスター(60)
- デバイスはストリームではありません
エノデータ(61)
- データがありません
エタイム(62)
- タイマーが切れました
エノス(63)
- ストリームリソース不足
エノネット(64)
- マシンがネットワークに接続されていません
ENOPKG (65)
- パッケージがインストールされていません
エレリモート(66)
- オブジェクトはリモートです
エノリンク(67)
- リンクが切断されました
EADS(68)
- 広告エラー
ESRMNT (69)
- マウントエラー
エココム(70)
- 送信時に通信エラーが発生しました
エプロト(71)
- プロトコルエラー
エマルティホップ(72)
- マルチホップを試行しました
エドドット(73)
- RFS固有のエラー
EBADMSG (74)
- 不正なメッセージ
オーバーフロー(75)
- 定義されたデータ型に対して値が大きすぎます
エノチュニック(76)
- 名前がネットワーク上で一意ではありません
EBADFD (77)
- ファイル記述子の状態が不良です
エレムク(78)
- リモートアドレスが変更されました
エリバック(79)
- 必要な共有ライブラリにアクセスできません
エリバッド(80)
- 破損した共有ライブラリへのアクセス
エリプスCN (81)
- a.out の .lib セクションが破損しています
エリマックス(82)
- 共有ライブラリをリンクしようとしすぎています
エリビエックス(83)
- 共有ライブラリを直接実行できません
アイルシーク(84)
- 無効または不完全なマルチバイト文字またはワイド文字
エレスタート(85)
- 中断されたシステムコールは再開する必要がある
エストパイプ(86)
- ストリームパイプエラー
ユーズユーザー(87)
- ユーザーが多すぎる
エノトソック(88)
- 非ソケットでのソケット操作
エデスタアドレス要求(89)
- 宛先住所が必要です
サイズ(90)
- メッセージが長すぎます
プロトタイプ(91)
- ソケットのプロトコルタイプが間違っています
エノプロトオプト(92)
- プロトコルが利用できません
エプロトノサポート(93)
- プロトコルがサポートされていません
ESOCKTNOSUPPORT (94)
- ソケットタイプはサポートされていません
エオプノツップ(95)
- 操作はサポートされていません
EPFNOサポート(96)
- プロトコル ファミリはサポートされていません
EAFNOサポート(97)
- アドレス ファミリはプロトコルでサポートされていません
エドリヌス(98)
- アドレスはすでに使用されています
EADDRNOTAVAIL (99)
- 要求されたアドレスを割り当てることができません
エネットダウン(100)
- ネットワークがダウンしています
エネトゥンリーチ(101)
- ネットワークにアクセスできません
エネットリセット(102)
- リセット時にネットワーク接続が切断されました
エコノバテッド(103)
- ソフトウェアにより接続が中断されました
エコノリセット(104)
- ピアによる接続のリセット
エノブフス(105)
- バッファスペースがありません
アイスコン(106)
- トランスポートエンドポイントはすでに接続されています
エノトコン(107)
- トランスポートエンドポイントが接続されていません
シャットダウン(108)
- トランスポートエンドポイントのシャットダウン後に送信できません
ETOOMANYREFS (109)
- 参照が多すぎるため、接続できません
タイムアウト(110)
- 接続がタイムアウトしました
経済難(111)
- 接続拒否
EHOSTDOWN (112)
- ホストがダウンしています
イーホストンリーチ(113)
- ホストへのルートがありません
すでに(114)
- 操作はすでに進行中です
アインプログレス(115)
- 操作は現在進行中です
エスタレ(116)
- 古いファイルハンドル
ユークリーン(117)
- 構造物の清掃が必要
エノトナム(118)
- XENIX の名前付きタイプファイルではありません
エナベイル(119)
- 利用可能な XENIX セマフォがありません
アイスナム(120)
- 名前付きタイプファイルです
エレモテイオ(121)
- リモートI/Oエラー
エドクォット(122)
- ディスククォータを超えました
エノメディウム(123)
- 媒体が見つかりません
エミディアムタイプ(124)
- 間違ったメディアタイプ
キャンセル(125)
- 操作はキャンセルされました
エノキー(126)
- 必要なキーが利用できません
EKEY期限切れ(127)
- キーの有効期限が切れました
EKEYが取り消されました(128)
- キーは取り消されました
EKEY拒否(129)
- キーはサービスによって拒否されました
オーナー死亡(130)
- 所有者が死亡
回復不能(131)
- 状態は回復できません
エルフキル(132)
- RFキルのため操作できません
毒物(133)
- メモリページにハードウェアエラーがあります
参照
参考文献
- ^ プログラミング言語 C の国際規格 (C11)、ISO/IEC 9899:2011、p. 205
- ^ ab プログラミング言語 C の国際規格 (C99)、ISO/IEC 9899:1999、p. 186
- ^ 「エラーのチェック」。GNU C ライブラリ (glibc)。GNU プロジェクト。2014 年 2 月 8 日。2014年 6 月 25 日閲覧。
- ^ 「規範的補遺1の簡単な説明」。2013年9月12日閲覧。
- ^ : システム エラー番号 – The Open Groupの『Base Definitions Reference, The Single UNIX Specificaion』バージョン 4
- ^ 「エラー番号 - cppreference.com」。2015年5月8日閲覧。
- ^ スティーブンス&ラゴ 2013、14ページ。
- ^ McCabe, Colin. 「strerror の問題」www.club.cc.cmu.edu。
- ^ 「エラーコード (GNU C ライブラリ)」www.gnu.org . 2023 年 10 月 21 日閲覧。
文献
- Stevens, W. Richard; Rago, Stephen A. ( 2013年 5 月 24 日)。UNIX 環境での高度なプログラミング (第 3 版)。Addison -Wesley Professional。ISBN 978-0321637734. 2015年2月27日閲覧。
