我可以使用 stat() 来确定所有者、组或其他人拥有哪些权限,并且可以使用 geteuid() 和 getpwuid() 来获取进程的用户名。我不太确定如何在没有系统调用的情况下获取用户所属的组。
即使知道如何获取这些组,整合所有这些信息似乎也需要做很多工作。有没有更简单的方法?
我可以使用 stat() 来确定所有者、组或其他人拥有哪些权限,并且可以使用 geteuid() 和 getpwuid() 来获取进程的用户名。我不太确定如何在没有系统调用的情况下获取用户所属的组。
即使知道如何获取这些组,整合所有这些信息似乎也需要做很多工作。有没有更简单的方法?
access() POSIX 函数可以在不打开的情况下检查权限。但是,它需要一个系统调用。
access() 函数应根据 amode 中包含的位模式检查由 path 参数指向的路径名命名的文件的可访问性,使用真实用户 ID 代替有效用户 ID,使用真实组 ID 代替有效组 ID。
例如:
access("/etc/passwd",W_OK)
检查您是否具有对 passwd 文件的写入权限。使用 R_OK,检查读取权限。
eaccess()
函数(euidaccess
是同义词) 使用有效的用户和组 ID 。虽然 eaccess 似乎得到了广泛的支持,但据我所知,它不是 POSIX 标准的一部分。
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() 的完整描述。
accaccess() 检查路径参数指向的文件名。这里的缺点是每个文件权限都必须使用下面的标志单独检查。R_OK 测试读取权限。W_OK 测试写权限。X_OK 测试执行或搜索权限。F_OK 检查文件是否存在