在读取模式下使用fopen检查文件的存在不会给出错误.或/ filename

Zee*_*ood 3 c linux fopen file

我正在尝试使用fopenapi 检查文件的存在.我希望if fopen返回NULL然后意味着文件不存在.我提供file_name输入命令行参数.

我的代码看起来像这样:

FILE *file = NULL;
file = fopen(file_name, "rb");
if(file == NULL)
{
    /* file is not found */
}
else
{
    /* file is found */
}
Run Code Online (Sandbox Code Playgroud)

如果我提供.或/ file_name然后它接受它作为有效的文件名并假装它检测到文件.fopenLinux上不应该在这种情况下返回NULL ?

我在Windows上尝试了同样的事情,它正如我期望的那样工作(fopen返回NULL).

背景:

用户将提供路径和文件名(xml文件)作为应用程序的输入选项,然后通过检查指定路径上是否存在(xml)文件来验证此选项.

用户可以将任何字符串作为路径,因此fopen除非用户输入,否则足以检测它.或者/ - 这些当然不是必需的(xml)文件 - 因此我希望fopen将其检测为错误,我们将向用户报告"找不到文件".但是,fopen接受它们作为有效文件,当我们尝试处理它时,还有其他一系列错误.

Ign*_*ams 5

在POSIX兼容系统上,如果权限允许,在读取模式下打开非硬链接文件(包括目录)不一定是错误.