単にファイルを開こうとするよりも良い方法はありますか?
int exists(const char *fname)
{
FILE *file;
if ((file = fopen(fname, "r")))
{
fclose(file);
return 1;
}
return 0;
}
fopen()
/ fclose()
メソッドの1つの誤りは、ファイルが存在していても、ファイルを開いて読み取ることができない場合があることです。たとえば、/dev/kmem
存在しますが、ほとんどのプロセスは読み取りのためにもそれを開くことができません。 /etc/shadow
別のそのようなファイルです。もちろん、両方stat()
とaccess()
ファイルを含むディレクトリにアクセスできることに依存しています。それができない場合は、すべての賭けが無効になります(ファイルを含むディレクトリに対する実行権限がないため)。
if (file = fopen(fname, "r"))
警告が表示されます。ifステートメント内のステートメントを括弧if ((file = fopen(fname, "r")))