我可以使用stat()来确定所有者,组或其他人拥有的权限,并且我可以使用geteuid()和getpwuid()来获取进程的用户名。我不太确定如何在没有系统调用的情况下获取用户所属的组。
即使知道如何获得群组,整合所有这些信息似乎也需要做很多工作。有更简单的方法吗?
答案 0 :(得分:8)
access() POSIX function可以在不打开权限的情况下检查权限。但是,它需要一个系统调用。
access()函数应根据amode中包含的位模式检查由path参数指向的路径名指定的文件,使用真实用户ID代替有效用户ID和实际组ID取代有效的群组ID。
例如:
access("/etc/passwd",W_OK)
检查您是否具有passwd文件的写入权限。使用R_OK,将检查读取权限。
eaccess()
function(euidaccess
是同义词)使用有效的用户和组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检查文件是否存在