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

时间:2009-07-16 15:42:13

标签: c unix file-permissions

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

即使知道如何获得群组,整合所有这些信息似乎也需要做很多工作。有更简单的方法吗?

3 个答案:

答案 0 :(得分:8)

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

  

access()函数应根据amode中包含的位模式检查由path参数指向的路径名指定的文件,使用真实用户ID代替有效用户ID和实际组ID取代有效的群组ID。

例如:

access("/etc/passwd",W_OK)

检查您是否具有passwd文件的写入权限。使用R_OK,将检查读取权限。

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

答案 1 :(得分:2)

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()的完整描述。

答案 2 :(得分:1)

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