errnoとは?初心者向け解説と使い方ガイド共起語・同意語・対義語も併せて解説!

  • このエントリーをはてなブックマークに追加
errnoとは?初心者向け解説と使い方ガイド共起語・同意語・対義語も併せて解説!
この記事を書いた人

高岡智則

年齢: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)。

インターネット・コンピュータの人気記事

awstatsとは?初心者でもわかる使い方と基本解説共起語・同意語・対義語も併せて解説!
14202viws
bing・とは?初心者のための基本ガイド:検索エンジンの仕組みと使い方共起語・同意語・対義語も併せて解説!
2111viws
着信転送とは?初心者向けガイドで分かる使い方と設定のコツ共起語・同意語・対義語も併せて解説!
1034viws
リマインドメールとは?初心者にもわかる基本ガイドと使い方のコツ共起語・同意語・対義語も併せて解説!
728viws
充電アダプターとは何かを徹底解説|初心者でも分かる基本と選び方のコツ共起語・同意語・対義語も併せて解説!
672viws
com端子・とは?初心者にも分かる基礎ガイド|シリアルポートの使い方と歴史を解説共起語・同意語・対義語も併せて解説!
654viws
pinロックとは?初心者が知っておくべき基本と使い方ガイド共起語・同意語・対義語も併せて解説!
567viws
16進数カラーコード・とは?初心者でもつまずかない基礎と使い方ガイド共起語・同意語・対義語も併せて解説!
512viws
asp・とは?初心者向けに徹底解説する基本と使い方ガイド共起語・同意語・対義語も併せて解説!
493viws
7zファイル・とは?初心者でもわかる使い方と特徴を解説共起語・同意語・対義語も併せて解説!
486viws
ローカルポート・とは?初心者にも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
459viws
差し込み印刷・とは?初心者でもすぐわかる使い方と仕組みガイド共起語・同意語・対義語も併せて解説!
441viws
全角文字とは?初心者向け解説|全角と半角の違いをやさしく学ぶ共起語・同意語・対義語も併せて解説!
420viws
none とは?初心者にもやさしく解説する意味と使い方ガイド共起語・同意語・対義語も併せて解説!
374viws
ワンタイムコード・とは?初心者でも分かる基本と使い方ガイド共起語・同意語・対義語も併せて解説!
369viws
select句・とは?初心者でも分かるSQLの基本と使い方共起語・同意語・対義語も併せて解説!
367viws
csvダウンロードとは?初心者が今すぐ使える基本ガイド共起語・同意語・対義語も併せて解説!
346viws
ダイレクトチャットとは?初心者向けガイドで使い方と注意点を徹底解説共起語・同意語・対義語も併せて解説!
328viws
解像度スケールとは?初心者でも分かる解像度スケールの基礎と使い方共起語・同意語・対義語も併せて解説!
279viws
sha256とは?初心者が知るべき暗号ハッシュの基礎と使い道共起語・同意語・対義語も併せて解説!
279viws

新着記事

インターネット・コンピュータの関連記事