名称
access - 检查用户的权限的文件
内容简介
#include
int access(const char *pathname, intmode);
描述
access()检查该进程是否将被允许读,写或测试存在的文件(或其他文件系统对象),其名称是路径名。如果 pathname 的符号链接文件权限这个符号链接所提到的测试.
mode 是一种包括一个或多个掩码 R_OK, W_OK, X_OK 和 F_OK.
R_OK, W_OK 和 X_OK 检查文件是否存在并具有读,写和执行权限,分别要求。 F_OK 只是要求检查存在的文件。
测试依赖于权限的目录中出现的文件路径 pathname ,并在途中遇到的符号链接的目录和文件的权限。
检查进程的真实的UID和GID,而不是ID作为实际尝试操作时的有效完成。这是为了让设置用户ID程序可以轻松地确定调用用户的权限。
只有访问位被选中,而不是文件类型或内容。因此,如果一个目录被发现是“可写,”它可能意味着文件可以在目录中创建,而不是作为一个文件可以写入该目录。同样,一个DOS文件可能被发现是“可执行文件”,但仍然会失败调用execve(2)调用。
如果过程中有适当的权限,执行可能表明,即使没有任何执行文件的权限位被设置为X_OK成功。
返回值
成功(所有请求的权限),则返回0。错误(至少一个位模式要求被拒绝的权限,或发生其他一些错误),则返回-1,errno设置为合适。
错误
access() 可能会失败,如果:
标签
描述
EACCES
The requested access would be denied to the file or search permission is denied for one of the directories in the path prefix of pathname. (See also path_resolution(2).)
ELOOP
Too many symbolic links were encountered in resolvingpathname.
ENAMETOOLONG
pathname is too long.
ENOENT
A directory component in pathname would have been accessible but does not exist or was a dangling symbolic link.
ENOTDIR
A component used as a directory in pathname is not, in fact, a directory.
EROFS
Write permission was requested for a file on a read-only filesystem.
access() 可能会失败,如果:
标签
描述
EFAULT
pathname points outside your accessible address space.
EINVAL
mode was incorrectly specified.
EIO
An I/O error occurred.
ENOMEM
Insufficient kernel memory was available.
ETXTBSY
Write access was requested to an executable which is being executed.
限制
access() 返回一个错误,如果没有在所请求的调用失败的访问类型,即使其他类型可能会成功。
access() 可能无法正常工作与UID映射NFS文件系统上启用UID映射,因为在服务器上完成,并从客户端隐藏,检查权限。
使用 access() 来检查用户是否被授权,例如打开一个文件之前,其实这样使用 open(2)创建一个安全漏洞,因为用户可能会利用检查并打开文件操作的间隔时间短。
C遵循于
SVr4, POSIX.1-2001, 4.3BSD
请另参阅
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。