访问函数会检查文件是否存在吗?

5

访问函数检查文件是否可以按照how参数指定的方式访问。how参数可以是标志R_OK、W_OK、X_OK的按位OR运算,或者是存在性测试F_OK。

如果允许访问,则返回值为0,否则返回-1。

如果文件不存在,access函数是否也返回-1?

我想开发一个函数来检查文件的存在性。如果以下access函数可以实现此功能,根据标准,我需要输入什么样的参数?

if (access("file_example", R_OK | W_OK | X_OK) != -1)

顺便说一下:我想通过access()函数检查的文件是由同一应用程序创建的,因此它是由同一用户创建的。


5
我想知道...尝试阅读man手册不比在Stack Overflow上发一篇完整的问题更容易吗? - Adriano Repetti
我知道测试可以给我一些结果,但我不确定测试是否反映了正确的行为。按照标准规范使用事物,而不是按照测试中所见,这样做更好。 - MOHAMED
4个回答

10

这些标志将检查文件是否可执行、可写和可读,但许多文件不会具备这些属性。你需要查找的标志是 F_OK。F_OK 仅测试文件是否存在,不做其他检测。

我建议阅读 access 命令的 man 手册,里面应该有详细的文档说明。


3

你可以使用它。

if (access("file_example", F_OK) != -1)

int access(const char *path, int amode);

amode的值是access权限进行按位或运算的结果(R_OK,W_OK,X_OK)或存在性测试(F_OK)。


2
根据手册页面,其中一个返回的错误是:
 ENOENT A component of pathname does not exist or is a dangling symbolic link.

此外,在第二段中明确指出:
 F_OK tests for the existence of the file.

2

是的,当 errno 设置为 ENOENT 时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接