在Unix上的C上,一个进程怎么能告诉它对文件有什么权限而不打开呢?

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

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

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

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

例如:

access("/etc/passwd",W_OK) 

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

eaccess()函数 ( euidaccess是一个同义词)使用有效的用户和组ID。 虽然eaccess似乎被广泛支持,据我所知这不是POSIX标准的一部分。

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

 int access(const char *path, int amode); 

其中路径是您的文件名, 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()描述。

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