免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1377 | 回复: 0

FB_man(2): access(2) [复制链接]

论坛徽章:
0
发表于 2006-12-10 12:15 |显示全部楼层
        
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP