zoukankan      html  css  js  c++  java
  • linux C access

    【1】作用

      确定文件的访问权限

    【2】头文件

      #include <unistd.h>

    【3】函数定义

      int access(const char * pathname,  int mode);

    【4】参数说明

      pathname: 需要检测的文件路径名

      mode: 参数为0时,表示检查文件的存在性,如果文件存在,返回0,不存在,返回-1。 这个函数还可以检查其它文件属性:

      06 检查读写权限

      04 检查读权限

      02 检查写权限

      01 检查执行权限

      00 检查文件的存在性

    【5】返回值

      若所有欲查核的权限都通过了检查则返回0值,表示成功;只要有一权限被禁止则返回-1,表示失败。

    【6】函数说明

      access()会检查是否可以读/写某一已存在的文件。

      参数mode有几种情况组合, R_OK,W_OK,X_OK 和F_OK。

      R_OK,W_OK与X_OK分别用来检查文件是否具有读取、写入和执行的权限。F_OK则是用来判断该文件是否存在。

      由于access()只作权限的核查,并不理会文件形态或文件内容,因此,如果一目录表示为“可写入”,表示可以在该目录中建立新文件等操作,而非意味此目录可以被当做文件处理。

      例如,你会发现DOS的文件都具有“可执行”权限,但用execve()执行时则会失败。

    【7】错误代码

      EACCESS  参数pathname 所指定的文件不符合所要求测试的权限。

      EROFS   欲测试写入权限的文件存在于只读文件系统内。

      EFAULT  参数pathname指针超出可存取内存空间。

      EINVAL  参数mode 不正确。

      ENAMETOOLONG  参数pathname太长。

      ENOTDIR  参数pathname为一目录。

      ENOMEM  核心内存不足    

      ELOOP   参数pathname有过多符号连接问题。

      EIO I/O  存取错误。

    【8】附加说明

        使用access()作用户认证方面的判断要特别小心,例如在access()后再做open()的空文件可能会造成系统安全上的问题。

    【9】范例

     1 // 范例1
     2 #include <unistd.h>
     3 int main()
     4 {
     5     if (access("/etc/passwd", R_OK) == 0)
     6         printf("/etc/passwd can be read
    ");
     7     return 0;
     8 }
     9 
    10 // 范例2
    11 #include <stdio.h>
    12 #include <unistd.h>
    13 
    14 int file_exists(char *filename);
    15 
    16 int main(void)
    17 {
    18     printf("Does NOTEXIST.FIL exist: %s
    ",
    19     file_exists("NOTEXISTS.FIL") ? "YES" : "NO");
    20     return 0;
    21 }
    22 
    23 int file_exists(char *filename)
    24 {
    25     return (access(filename, 0) == 0);
    26 }

    【10】相关函数

        stat,open,chmod,chown,setuid,setgid

    Good Good Study, Day Day Up.

    顺序 选择 循环 总结

  • 相关阅读:
    html5 鼠标跟随运动
    2018新年计划
    background-attachment:fixed不兼容性
    Javascript中常用方法简介
    FQ教程真实好用
    解决IE6 IE7绝对定位弹层被后面的元素遮住
    页面出现滚动条时,body里面的内容不能自动居中?
    怎么查看手机源码
    ES6入门教程---数值扩展和数组扩展
    ES6入门教程---解构赋值和字符串扩展
  • 原文地址:https://www.cnblogs.com/Braveliu/p/10232234.html
Copyright © 2011-2022 走看看