

高岡智則
年齢:33歳 性別:男性 職業:Webディレクター(兼ライティング・SNS運用担当) 居住地:東京都杉並区・永福町の1LDKマンション 出身地:神奈川県川崎市 身長:176cm 体系:細身〜普通(最近ちょっとお腹が気になる) 血液型:A型 誕生日:1992年11月20日 最終学歴:明治大学・情報コミュニケーション学部卒 通勤:京王井の頭線で渋谷まで(通勤20分) 家族構成:一人暮らし、実家には両親と2歳下の妹 恋愛事情:独身。彼女は2年いない(本人は「忙しいだけ」と言い張る)
errnoとは?
errno は、プログラムが遭遇した「エラーの番号」を格納する仕組みです。主に C 言語や Unix 系の環境で使われ、システムコールやライブラリ関数がエラーを返した場合に、その原因を数値として知らせます。読み取り方を覚えると、エラーの原因を特定しやすくなります。
この変数は errno.h というヘッダファイルで定義されており、関数の直後に errno の値を確認します。重要な点は、 errno は「エラーが起きたときだけ」設定される値で、成功したときには必ずしも 0 になるとは限らないことです。複数の操作を連続で行う場合は、各操作ごとに errno の値をチェックするか、前のエラーをクリアしてから次の操作を行うべきです。
実際の使い方は、まず関数の戻り値を確認し、失敗した場合に errno の値を調べます。 errno を人間に分かる文字列に変換するには strerror() を使います。別の方法として perror() を使えば、エラーの説明を標準出力に簡単に出力してくれます。例えばファイルを開くときに失敗した場合、open(2) の呼び出しが -1 を返した直後に strerror(errno) で理由を得ることができます。
エラーコードには多くの種類があり、意味を覚えるとデバッグが楽になります。以下の表は代表的な errno の例と意味、よくある状況の例を示しています。
よく使う errno の例と意味
| errno 値 | 意味 | よくある状況の例 |
|---|---|---|
| ENOENT | No such file or directory | 開こうとしたファイルが見つからない |
| EACCES | Permission denied | ファイルへアクセス権がない |
| EEXIST | File exists | すでに存在するファイル名を新しく作成しようとする |
| ENOMEM | Out of memory | メモリ不足 |
| EINVAL | Invalid argument | 不正な引数を渡した |
| ENOSPC | No space left on device | ディスクの空き容量が不足 |
なお、errno の値は現代の多くの環境でスレッドごとに分離されています。つまり、別のスレッドで起きたエラーが別の errno 値として見えることもあります。こうした挙動は、複数の処理を同時に実行するプログラムで特に重要です。
実務では、エラー処理を丁寧に設計しておくことが大切です。エラーをただ表示するだけでなく、適切な対処(リトライ、別ファイルの試行、代替手段の提供など)を考えることが必要です。エラー処理の設計を最初の段階から考えておくと、後のデバッグが格段に楽になります。
errno の実用的な使い方のポイント
1) 戻り値を必ず確認する。戻り値が -1 の場合のみ errno を見る。2) errno は直後の関数呼び出し後にしか信頼できない。3) strerror(errno) で読みやすい文字列に変換して表示する。4) 複数の操作を連続して行う場合は、前のエラーをクリアしてから次の操作へ進む。5) ログには errno の値と説明を残すと、後から原因追跡がしやすくなる。
他の言語にもエラーの扱い方は似た考え方があります。例えば Python では例外を使ってエラーを扱い、errno は例外の一部として扱われることが多いです。C++ では std::system_error などが errno を利用して例外を作る場面があります。こうした知識を知っておくと、異なる言語間でのエラー処理の設計にも役立ちます。
まとめ
errno は「エラーの番号」を伝える仲介役です。正しく使えば、エラーの原因を特定し、ユーザーに適切なメッセージを伝え、さらには適切な対処を取ることが可能になります。初心者のうちは、まず errno の基本的な使い方とよく出てくるコードを覚え、次第に自分の開発スタイルに合わせてエラー処理を整えていきましょう。
errnoの関連サジェスト解説
- errno_t とは
- この記事では 'errno t とは' という質問に答えます。実はよく見る表現の一部は 'errno_t' のことを指す誤表現です。errno_t は C 言語の標準的なエラーコードの型で、特にセーフな関数群(安全なバージョンの文字列操作など)で使われます。対して errno はグローバルな変数で、標準ライブラリの多くの関数がエラーを返すときに値を設定します。違いをざっくり言うと、errno は「その場のエラー情報を世界共通の箱に格納する仕組み」、errno_t は「エラーを返すときに使う箱(戻り値の型)」です。使い方のイメージとしては、 unsafe な処理を行う代わりに safe な関数を使い、返り値として 0 が成功、0 以外がエラーコードというパターンが多いです。例えば文字列を別のバッファへコピーする安全な関数があれば、dest の空き容量を超えたら ERANGE のようなエラーコードを返し、成功なら 0 を返します。こうした設計は、プログラムの堅牢性を高め、エラーを後で追いやすくします。ただし Annex K はオプション機能であり、すべてのコンパイラがサポートしているわけではない点に注意してください。errno と errno_t の使い分けを覚えておくと、他の人と協力してコードを書くときに混乱を防げます。
errnoの同意語
- errno
- C/POSIX系のプログラミングで、直前の関数呼び出しのエラーコードを格納するグローバル変数。
- エラー番号
- エラーを表す番号。問題の原因を特定する識別子として使われる数字。
- エラーコード
- エラーを識別するコード。多くは一つの番号として表現され、関数の戻り値やerrnoとセットで解釈されることが多い。
- エラー値
- エラーを表す値のこと。errnoに格納されている数値そのものを指すことも多い。
- エラー識別子
- エラーを識別するためのIDの表現。ドキュメントやコード内で参照されることが多い。
- エラーナンバー
- エラー番号の別表現。カタカナ表記で用いられることがある表現。
- グローバルエラー変数
- errnoはプログラム全体で共有されるエラー情報を保持するグローバル変数。
errnoの対義語・反対語
- エラーなし
- errno が示すエラー番号が0で、エラーが発生していない状態を示す。
- 正常終了
- 処理がエラーなく適切に完了して、次の処理へ進める状態を指す。
- 成功
- 操作や処理が目的を達成し、エラーがない結果を意味する。
- OK
- 処理が問題なく進んだことを示す、短くて使い勝手の良い表現。
- 問題なし
- 特に問題がなく、エラーが発生していない状態を意味する口語表現。
- 無事
- 計画通りに完了し、エラーがない状態をやさしく表す表現。
- ゼロエラー
- エラーがゼロ、つまり全くエラーがない状態を指す造語的表現。
- エラーフリー
- エラーが発生していない状態を、英語っぽい表現で示す言い換え。
- 0
- errno が0を意味し、エラーが未発生であることを表す数値表現。
errnoの共起語
- errno
- エラー番号を格納するための変数/マクロ。ファイル操作やシステム呼び出しの結果として返される値です。
- errno.h
- errno の定義と関連するエラーコードのマクロを含むヘッダファイル。
- strerror
- errno の値を人間が読める文字列に変換して返す関数。
- perror
- errno の値に対応するエラーメッセージを標準エラー出力へ表示する関数。
- EACCES
- 権限不足を示すエラーコード。ファイルやリソースにアクセスできないときに返ります。
- ENOENT
- 指定したファイルやディレクトリが見つからない場合に返るエラーコード。
- EBADF
- 不正なファイルディスクリプタを参照した時に返るエラーコード。
- ENOMEM
- メモリが不足して新しい領域を確保できない場合のエラーコード。
- EINVAL
- 不正な引数やパラメータを渡したときに返るエラーコード。
- EEXIST
- 既に存在するファイルやエントリを作成しようとしたときに返るエラーコード。
- ENOSPC
- ディスクやファイルシステムの空き容量が不足している場合のエラーコード。
- ENOTDIR
- 期待されたディレクトリがディレクトリでない場合に返るエラーコード。
- EISDIR
- ファイルとして扱われるべきでないディレクトリを操作したときに返るエラーコード。
- EPIPE
- パイプが壊れて通信できない場合に返るエラーコード。
- EAGAIN
- リソースが現在利用できない場合や再試行を促す場合に返るエラーコード。
- EWOULDBLOCK
- EAGAIN の別名でブロックされているときに返ることがあるエラーコード。
- EMFILE
- プロセスが開くことのできるファイルディスクリプタの上限に達した場合のエラーコード。
- ENFILE
- システム全体で開くことのできるファイルの上限に達した場合のエラーコード。
- EPERM
- 操作が権限的に許可されていない場合に返るエラーコード。
- ETIMEDOUT
- 待機時間が超えたまたはタイムアウトになった場合のエラーコード。
- ECONNREFUSED
- ネットワーク接続先が拒否された場合に返るエラーコード。
- ECONNRESET
- ネットワーク接続がリセットされた場合のエラーコード。
- ECONNABORTED
- ネットワーク接続が途中で中断された場合のエラーコード。
- EADDRINUSE
- アドレスがすでに使用中のため使用できない場合のエラーコード。
- EADDRNOTAVAIL
- 指定したアドレスが利用できない場合のエラーコード。
- ENOTSOCK
- ソケットでないファイルをソケットとして扱った場合に返るエラーコード。
- EROFS
- 書き込み不可のファイルシステムで操作した場合に返るエラーコード。
- ENOTEMPTY
- ディレクトリが空でない状態で削除などを試みた場合のエラーコード。
- EFBIG
- ファイルが大きすぎる場合に返るエラーコード。
- EDOM
- 数学的定義域外の入力を受け取った場合に返るエラーコード。
- ERANGE
- 値が許容範囲を超えた場合に返るエラーコード。
- EBADMSG
- メッセージの形式が不正な場合に返るエラーコード。
- EOVERFLOW
- データが格納領域を超えた場合に返るエラーコード。
- ENODATA
- 要求に対してデータが利用できない場合に返るエラーコード。
- EILSEQ
- 不正な文字シーケンスを検出した場合に返るエラーコード。
- strerror_r
- strerror のスレッドセーフ版。errno の値を安全に文字列化する関数。
- strerror_s
- MSVC などの実装で使われる安全な strerror の派生関数。
- POSIX
- エラーコードを含む POSIX 標準。UNIX系の共通仕様の一部。
- errnoモジュール(Python)
- Python の errno 定数を参照するためのモジュール。
errnoの関連用語
- errno
- エラー番号を格納する変数。システムコールやライブラリ関数がエラーを返したときに設定され、0 が成功を意味します。
- errno.h
- C/C++で errno を使うためのヘッダファイル。errno の宣言や関連マクロを提供します。
- strerror
- errno が示すエラー番号を人間が読める文字列に変換する関数です。
- perror
- 標準エラー出力に errno のエラーメッセージを表示する関数です。
- strerror_r
- スレッドセーフな strerror。複数のスレッドが同時に呼び出しても安全です。
- strerror_s
- MSVC などで提供される strerror の安全版。
- EINVAL
- 不正な引数や引数の組み合わせを示すエラーコード。
- ENOENT
- 指定したファイルやディレクトリが見つからない場合に返されるエラーコード。
- EACCES
- 権限が不足している、アクセスが拒否されている場合のエラーコード。
- EPERM
- 操作が許可されていない場合のエラーコード。
- EEXIST
- 同じ名前のファイルやディレクトリがすでに存在する場合のエラーコード。
- ENOTDIR
- 期待している場所がディレクトリではない場合のエラーコード。
- ENOTEMPTY
- ディレクトリが空でない場合のエラーコード。
- ENOMEM
- メモリが不足している場合のエラーコード。
- ENOSPC
- ディスク容量が不足している場合のエラーコード。
- EFAULT
- 無効なメモリアドレスを参照した場合のエラーコード。
- EMFILE
- 同時に開けるファイル数の上限を超えた場合のエラーコード。
- ENFILE
- システム全体で開けるファイル数の上限を超えた場合のエラーコード。
- ENODEV
- 指定されたデバイスが存在しない場合のエラーコード。
- EBADF
- 無効なファイルディスクリプタを使用した場合のエラーコード。
- EPIPE
- パイプが途中で切断された場合のエラーコード。
- EINTR
- システムコールが割り込みで中断された場合のエラーコード。
- EAGAIN
- リソースが一時的に利用できない場合のエラーコード(再試行を促します)。
- EWOULDBLOCK
- 非ブロック I/O で待機が必要な場合のエラーコード(EAGAIN の別名)。
- ETIMEDOUT
- 操作がタイムアウトした場合のエラーコード。
- EILSEQ
- 不正な文字列シーケンス(文字コードエラー)の場合のエラーコード。
- ENOLCK
- ロックを獲得できない場合のエラーコード。
- EDEADLK
- デッドロックの可能性がある場合のエラーコード。
- ENOTSUP
- この機能がサポートされていない場合のエラーコード。
- ENOATTR
- ファイル属性が未対応の場合のエラーコード(環境依存)。
- ENAMETO
- ファイル名が長すぎる場合のエラーコード。
- ENODATA
- 要求されたデータが無い場合のエラーコード。
- EPROTO
- プロトコルエラー。
- ECANCELED
- 操作がキャンセルされた場合のエラーコード。
- EOPNOTSUPP
- オペレーションがサポートされていない場合のエラーコード。
- ECONNREFUSED
- 接続が拒否された場合のエラーコード(ネットワーク関連)。
- ECONNRESET
- 接続がリセットされた場合のエラーコード(ネットワーク関連)。
- GetLastError
- Windows の直近のエラーコードを取得する API。
- FormatMessage
- Windows の GetLastError のエラーメッセージを人間が読める形に変換する API。
- WSAGetLastError
- Windows のソケット関連のエラーコードを取得する API(Winsock)。



















