「No such file or directory」のエラーは開発をしているとかなり頻繁に目にするエラーです。
特にファイル関連の処理を行っている場合にエラーチェックをしている箇所では必ず考慮するべきエラーです。
簡単に言うとそのまま「ファイルまたはディレクトリがありません」なのですが、ソケットを利用するときに接続先が無い場合などに出ることもあります。
とりあえずサンプルソース。
#include <stdio.h> #include <string.h> #include <limits.h> int main(int argc, char *argv[]) { char path[PATH_MAX]; FILE *fp; bzero(path, sizeof(path)); strcpy(path, "/tmp/xxxxxxxxxx"); fp = fopen(path, "r"); if(fp == NULL){ printf("error! [%m]\n"); return -1; } fclose(fp); return 0; }
コンパイルして実行してください。
一応CentOS上でgccでコンパイルして動作は確認しています。
WindowsのVisualStudioでコンパイルする場合にはPATH_MAXをMAX_PATH、bzeroをZeroMemoryに変更すれば大丈夫だと思います。ちなみにWindowsでは動作確認していません。
スポンサーリンク
実行すると「No such file or directory」のエラーが表示されます。
もちろん「/tmp/xxxxxxxxxx」は存在しないファイルを指定してください。
printf("%m");
は
printf("%s", strerror(errno));
と同じ意味です。
ちなみに
printf("%d\n", errno);
とすると「2」が表示されます。