【问题标题】:does access function check the existence of file?访问功能是否检查文件的存在?
【发布时间】:2012-11-22 08:42:32
【问题描述】:

access 函数检查文件是否可以通过 how 参数指定的方式被访问。 how 参数可以是标志 R_OK、W_OK、X_OK 或存在性测试 F_OK 的按位或。

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

如果文件不存在,访问是否也返回-1?

我想开发一个检查文件是否存在的功能。如果下面的访问函数做到了,我必须按照标准输入什么样的参数?

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

顺便说一句:我要检查access() 函数是否存在的文件是由同一应用程序创建的。所以它是由同一个用户创建的

【问题讨论】:

  • 我想知道......不是更容易尝试(阅读手册页)而不是在 SO 上写一个完整的问题吗?
  • 我知道测试可以给我一些结果,但我不确定测试是否反映了正确的行为。最好看看标准中规定的正确方式使用事物的标准,而不是测试中看到的方式

标签: c file


【解决方案1】:

这些标志将检查文件是否可执行,进程是否可写和可读,很多文件不会。您要查找的标志是 F_OK。 F_OK 测试文件是否存在,没有别的。

我建议阅读手册页以进行访问。应该在那里记录。

【讨论】:

    【解决方案2】:

    是的,将errno 设置为ENOENT

    【讨论】:

      【解决方案3】:

      根据manual page,返回的错误之一是:

       ENOENT A component of pathname does not exist or is a dangling symbolic link.
      

      另外,在第二段中明确指出:

       F_OK tests for the existence of the file.
      

      【讨论】:

        【解决方案4】:

        你可以使用它。

        if (access("file_example", F_OK) != -1)
        
        int access(const char *path, int amode);
        

        amode 的值是要检查的访问权限(R_OK、W_OK、X_OK)或存在性测试(F_OK)的按位或。

        【讨论】:

          猜你喜欢
          • 2017-11-10
          • 1970-01-01
          • 2022-08-19
          • 2011-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多