【问题标题】:How can I determine if a file is read-only for my process on *nix? [duplicate]如何确定文件是否对 *nix 上的进程是只读的? [复制]
【发布时间】:2012-09-23 21:29:18
【问题描述】:

使用 stat 函数,我可以获得以下的读/写权限:

  • 所有者
  • 用户
  • 其他

...但这不是我想要的。我想知道我的进程(即我正在编写的应用程序)的文件的读/写权限。只有当我知道我的进程是否作为文件的所有者/用户/其他人运行时,所有者/用户/其他人才有帮助......所以也许这就是解决方案,但我不确定到达那里的步骤。

【问题讨论】:

    标签: c++ linux file-io


    【解决方案1】:

    您不想为此使用stat()。你想从<unistd.h>使用access()

    char const* name = "file";
    if (access(name, R_OK)) {
        std::cout << "'" << name << "' is readable\n";
    }
    if (access(name, W_OK)) {
        std::cout << "'" << name << "' is writable\n";
    }
    

    【讨论】:

    • access() 的问题在于,当结果被解释时,它可能已经过时了(因为另一个进程更改了权限)。如果需要读取或写入文件,检查权限的最佳方法是打开它进行读取或写入,看看它是否有效。
    • 我同意状态可能会在您查看的那一刻发生变化。最初的问题没有说明它的用途。例如,它的目标是创建一个可以在文件选择对话框中打开的文件列表,打开所有文件可能不切实际,因为可以打开的文件数量往往是有限的。
    【解决方案2】:

    使用getuid()/geteuid() 确定进程的用户ID,同样使用getgid()/getegid() 确定组ID。然后您可以比较文件的所有者/组(您从statlstat 获得)并交叉引用权限位。

    【讨论】:

      【解决方案3】:

      类似这样的:

      if ( access( filename, W_OK )) { /* writable */ }
      

      access(2)

      【讨论】:

        猜你喜欢
        • 2019-09-26
        • 2011-08-26
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-10
        相关资源
        最近更新 更多