エラー

errno.h は C 言語の標準ライブラリのヘッダーファイルです。

ここではエラーレポートのためのマクロが、定義されていて errno という名前でそれを取得することができるようになっています。

errno はプログラムのスタートアップ時に 0 がセットされて、ライブラリ関数はその値をいつでも変える可能性があります。 極端な話、エラーが起きようが起きまいが、いつでも変更することがあります。

たいていの場合、エラーが起きた場合は戻り値を NULL としますが、 いくつかの関数では errno をゼロにしたりします。

関数を使うときは、呼び出し側はどういう条件でエラーを捕まえるか、ちゃんと確認しないといけないわけです。

さて、ではさっそく、動作確認をしてみましょう。

次の例では、fopen 関数で存在しないファイル a.html を開こうとします。 そのタイミングで errno がどのようになるかみてみましょう。

#include <stdio.h>
#include <errno.h>

int main() {
  FILE *fp = fopen("a.html", "r");

  printf("errno = %d\n", errno);

  if (fp) {
    fclose(fp);
  }

  return 0;
}

この実行結果は次のようになりました。

errno = 2

errno.h 内で 2 と定義されているのは ENOENT です。

errno.h

ENOENT の意味は "No such file or directory." という意味です。実際にここで試した例でも、指定した名前のファイルがないから、ファイルがないという意味のエラーコードになっているということで合ってますね。

ちなみに、エラーの意味は Open Group などの情報を参照してください。