【问题标题】:In a C program in Linux OS, how to check if a user has read permission on a file?在 Linux 操作系统的 C 程序中,如何检查用户是否对文件具有读取权限?
【发布时间】:2015-02-17 03:44:23
【问题描述】:

函数应该是这样的。

int GetFilePermission(char* pcUsername, char* pcFilePath)
{
    /*return TRUE if 'pcUsername' has read permission on file 'pcFilePath'.*/
}

我不想使用 stat()。因为它会有点长。我必须检查文件的权限,它的所有者并以不同的组合比较它们。有什么简单的方法/技巧吗?

请帮忙。提前致谢。

【问题讨论】:

标签: c linux file-permissions


【解决方案1】:

使用访问功能,我们可以获得具有权限的用户。请参阅访问手册页。

int access(const char *pathname, int mode);

如果您使用 stat 函数,您将获得有关该文件的所有信息。在访问中,我们只有这四个。 R_OK, W_OK, X_OK and F_OK. 使用这个我们可以轻松搞定。如果成功则返回值为零。

R_OK = read permission
W_OK = Write permission
X_OK = Execute permission
F_OK = file is existing.

【讨论】:

  • 我的程序以 root 身份运行。但我想检查用户(例如 david)是否对该文件具有读取权限。 access() 返回权限 w.r.t.到调用进程。
  • @JatiA 如果根是文件的所有者,则检查该文件的其他和​​组权限。可以通过stat函数来完成。
  • 如果您的程序以 root 身份运行,很容易冒充相关用户并在捕获异常时尝试打开文件(这种 EAFP 方法非常便携)。
【解决方案2】:

您可以使用stat

统计原型

#include <sys/stat.h>
int stat(const char *restrict path, struct stat *restrict buf);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 2015-05-28
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 2016-04-23
    • 2012-08-16
    相关资源
    最近更新 更多