在Unix上的C语言中,进程如何在不打开文件的情况下判断它对文件拥有哪些权限?

在Unix上的C语言中,进程如何在不打开文件的情况下判断它对文件拥有哪些权限?,c,unix,file-permissions,C,Unix,File Permissions,我可以使用stat()计算所有者、组或其他人拥有哪些权限,还可以使用geteuid()和getpwuid()获取进程的用户名。不过,我不太确定如何在没有系统调用的情况下获取用户所属的组 即使知道如何获得群组,整合所有这些信息似乎也是一项艰巨的工作。有更简单的方法吗?用户无需打开即可检查权限。但是,它需要一个系统调用 access()函数应根据amode中包含的位模式,使用真实用户ID代替有效用户ID,使用真实组ID代替有效组ID,检查路径参数指向的路径名命名的文件的可访问性 例如: access

我可以使用stat()计算所有者、组或其他人拥有哪些权限,还可以使用geteuid()和getpwuid()获取进程的用户名。不过,我不太确定如何在没有系统调用的情况下获取用户所属的组

即使知道如何获得群组,整合所有这些信息似乎也是一项艰巨的工作。有更简单的方法吗?

用户无需打开即可检查权限。但是,它需要一个系统调用

access()函数应根据amode中包含的位模式,使用真实用户ID代替有效用户ID,使用真实组ID代替有效组ID,检查路径参数指向的路径名命名的文件的可访问性

例如:

access("/etc/passwd",W_OK)
检查您是否具有对passwd文件的写入权限。在R_确定的情况下,将检查读取权限

euidaccess
是同义词)使用有效的用户和组id。虽然eaccess似乎受到广泛支持,但据我所知,它不是POSIX标准的一部分。

可以在不打开它的情况下检查权限。但是,它需要一个系统调用

access()函数应根据amode中包含的位模式,使用真实用户ID代替有效用户ID,使用真实组ID代替有效组ID,检查路径参数指向的路径名命名的文件的可访问性

例如:

access("/etc/passwd",W_OK)
检查您是否具有对passwd文件的写入权限。在R_确定的情况下,将检查读取权限


euidaccess
是同义词)使用有效的用户和组id。虽然每个访问似乎都得到广泛支持,但据我所知,它不是POSIX标准的一部分。

unistd.h定义了一个访问()函数

int access(const char *path, int amode);
其中path是您的文件名,amode是按位包含或包含要检查的访问权限

R_OK、W_OK和X_OK分别保存用于检查读取、写入和搜索/执行权限的模式值

int readable, readwritable;

//checking for read access
readable = access("/usr/bin/file", R_OK);

//checking for read and write access
readwritable = access("/usr/bin/file", R_OK|W_OK);

您可以在unix手册页中找到access()的完整描述。

unistd.h定义了一个access()函数

int access(const char *path, int amode);
其中path是您的文件名,amode是按位包含或包含要检查的访问权限

R_OK、W_OK和X_OK分别保存用于检查读取、写入和搜索/执行权限的模式值

int readable, readwritable;

//checking for read access
readable = access("/usr/bin/file", R_OK);

//checking for read and write access
readwritable = access("/usr/bin/file", R_OK|W_OK);
您可以在unix手册页中找到access()的完整描述。

access()检查path参数所指向的文件名。这里的缺点是必须使用下面的标志分别检查每个文件权限。 读取权限的R_OK测试。 写入权限的W_OK测试。 执行或搜索权限的X_OK测试。 F_OK Check of file

access()检查path参数所指向的文件名。这里的缺点是必须使用下面的标志分别检查每个文件权限。 读取权限的R_OK测试。 写入权限的W_OK测试。 执行或搜索权限的X_OK测试。
F_OK Check是否存在文件

eaccess是非标准的,但是POSIX.1-2008添加了faccessat,它可以与_eaccess的标志一起使用,以使用有效的ID执行访问检查。然而,这一点尚未得到广泛支持。eaccess是非标准的,但是POSIX.1-2008添加了faccessat,它可以与_eaccess的标志一起使用,以使用有效的ID执行访问检查。然而,这一点尚未得到广泛支持。