如何检查用户是否具有执行权限?

时间:2012-07-07 14:17:46

标签: c linux unix permissions solaris

我想知道如何检查“用户”(除了运行此程序的人) 对文件有执行权限? [C api]

我查看了“访问”,它提供了与来电者有关的信息。

我正在寻找类似的东西: -

"<cmd> <user_name> <file_name>"

这里我想知道<user_name>是否具有<file_name>的执行权限?

我正在寻找C api?

可能的解决方案: - 我使用以下算法获取此信息

boolean_t
is_user_has_execute_permissions(char *run_as_user)
{
        /* Check world execute permission */
        if ((cmd_stat.st_mode & S_IXOTH) == S_IXOTH) {
                return (TRUE);
        }

        /* group id for run_as_user */
        getpwnam_r(run_as_user, &pw, buf, passwd_len);

        /* Check group execute permission */
        if ((cmd_stat.st_mode & S_IXGRP) == S_IXGRP) {
                if (pw->pw_gid == cmd_stat.st_gid)
                        return (TRUE);
        }

        return (FALSE);
}

有没有人在这个中看到任何错误?

2 个答案:

答案 0 :(得分:2)

您需要调用stat(2),它返回文件所有者,所有者组和其他人的权限位。您必须找出您感兴趣的用户的ID并且需要其组:请参阅getpwent(3)和getgrouplist(3)。匹配的第一个将给出结果权限。

答案 1 :(得分:-1)

从命令行,您可以轻松地使用Awk程序。像

这样的东西
ls -l filename | awk -F '{ if (substring($1,3,1) == "x" exit(0); exit(1)}'

如果找到则将返回代码设置为0,如果不是则将其设置为1。

从C程序中,您想使用fstat。基本上你打开文件

int fd = fopen("filename", "r");

然后使用fstat

获取文件stat块
fstat(fd, &bufr)

并查看bufr.st_mode

以下是fstat的说明。

<强>更新

我会注意到,当OP最初发布时,不清楚C API是否是所期望的。