3

我想知道如何检查“用户”(运行该程序的人除外)是否对文件具有执行权限?[C接口]

我查看了“访问”,它提供了有关呼叫者的信息。

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

"<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);
}

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

4

2 回答 2

2

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

于 2012-07-07T14:31:12.503 回答
-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

fstat(fd, &bufr)

看看bufr.st_mode

这是fstat的描述。

更新

我会胡思乱想地注意到,当 OP 最初发布时,并不清楚 C API 是否是所需的。

于 2012-07-07T14:29:32.200 回答