linux 下access函数,access()函数 Unix/Linux

名称

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 个群。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值