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

Dan*_*ook 1 c unix file-permissions

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

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

dme*_*ter 8

访问()POSIX函数可以检查的权限,而无需打开它.但是,它需要一个系统调用.

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

例如:

access("/etc/passwd",W_OK)
Run Code Online (Sandbox Code Playgroud)

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

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