- 论坛徽章:
- 0
|
ACCESS(2)
FreeBSD System Calls Manual
ACCESS(2)
名称:
access, eaccess -- 检查文件是否可访问库:
Standard C Library (libc, -lc)概要:
#include
[color="red"]int [color="blue"]access([color="red"]const char * [color="green"]path, [color="red"]int [color="green"]mode);
[color="red"]int [color="blue"]eaccess([color="red"]const char * [color="green"]path, [color="red"]int [color="green"]mode);详述:
[color="blue"]access()和[color="blue"]eaccess()系统调用将检查是否有权限按[color="green"]mode方式访问[color="green"]path文件。
[color="green"]mode可以为 F_OK(检查文件/目录是否存在)或为一般性检查,可以按或组合下列值:
R_OK 是否可读
W_OK 是否可写
X_OK 是否可执行(文件)/可搜索(目录)
更多的信息请参阅
intro(2)
的[color="green"]文件访问权限一节。
[color="blue"]eaccess()系统调用使用有效用户ID和组列表进行申请访问权限,[color="blue"]access()
系统调用使用实际用户ID(而不是有效用户ID)和实际组ID(而不是有效组ID)
及组列表中的其它组ID。
当进程的实际用户ID或有效用户ID具有某些特权时,即使文件没有设置X_OK/W_OK/R_OK,
系统调用仍然成功返回。返回值:
成功时返回[color="blue"]0,否则返回[color="blue"]-1并且设置全局变量[color="green"]errno
为对应的错误代码。错误:
[color="blue"]access()失败时将设置errno为下列错误常量:
[ENOTDIR] [color="green"]path中的某目录组分不是目录
[ENAMETOOLONG] [color="green"]path中的某目录组分超过[color="blue"]255字节或[color="green"]path超过[color="blue"]1023字节
[ENOENT] 文件不存在
[ELOOP] 转换路径时遇到了太多的符号链接
[EROFS] 试图在只读文件系统上请求写操作
[ETXTBSY] 试图对执行中的文件请求写操作
[EACCES] 对文件按[color="green"]mode方式的请求被拒绝,或者[color="green"]path中某目录组分不允许搜索。
[EFAULT] [color="green"]path参数指向的地址超出了进程的存取空间
[EIO] 读/写文件系统时遇到了I/O错误安全:
[color="blue"]access()系统调用由于[color="red"]存在安全漏洞(竞态条件),不应该再使用它。
设置用户ID和设置组ID的程序应当在设置后恢复其有效用户/组ID,
且应该直接访问文件,而不是通过[color="blue"]access()模拟检查实际用户ID/组ID。
若使用不当,[color="blue"]eaccess()系统调用同样会被拒绝参与竞态。参见:
chmod(2)
,
intro(2)
,
stat(2)
标准:
[color="blue"]access()系统调用应当遵循ISO/IEC [color="blue"]9945-1:[color="blue"]1990(``POSIX.[color="blue"]1'')标准。历史:
[color="blue"]access()系统调用在AT&T UNIX版本[color="blue"]7里首次出现。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/1210/showart_212887.html |
|