zoukankan      html  css  js  c++  java
  • UNIX C 文件权限 Part2_day01

    1.文件访问测试

      测试调用进程对指定文件是否拥有足够的访问权限

    #include <unistd.h>
    
    int access(const char* pathname,int mode);
            成功返回0,失败返回 -1
        
        -pathname:文件路径
        -mode:访问权限,可取以下值
            R_OK - 可读否
           W_OK - 可写否
            X_OK - 可执行否
            F_OK  - 存在否

    2.权限掩码: 

       设置调用进程的权限掩码: 

    #include <sys/stat.h>
    
    mode_t umask(mode_t cmask);
        函数永远成功,返回原来的权限掩码
    
        - cmask :新权限掩码
                        默认掩码(0022);

    3.修改文件权限

        修改指定文件的权限:

    #include <sys/stat.h>
    
    int chmod(const char* path,mode_t mode);
    int  fchmod(int fd,mode_t mode);
            成功返回0,失败返回-1
    
    -path :文件路径
    -mode:文件权限
    -fd:文件描述符

    4.修改文件大小

      指定文件的大小:

        

    #include <unistd.h>
    
    int truncate(const char* path,off_t length);
    int ftruncate(int fd,off_t length);
            成功返回0,失败返回-1
    
    -path:文件路径
    -length:文件大小
    -fd:文件描述符

    5.内存映射文件

      建立虚拟内存到物理内存或文件的映射

      

    #include <sys/mman.h>
    
    void* mmap(void* start,size_t length,int prot,
            int  flags,int fd,off_t offset);
        成功返回映射区内存起始地址,失败返回MAP_FAILED(-1)
    
    -start:映射区内存起始地址,NULL系统自动选定后返回
    -length:映射区字节长度,自动按页(4K)园整
    -prot:映射区访问权限,可以取以下值
            PROT_READ  - 映射区可读
            PROT_WRITE -映射区可写
            PROT_EXEC  -映射区可执行
            PROT_NONE  -映射区不可访问
    -flags:映射标志,可取下值
        MAP_ANONYMOUS - 匿名映射,将虚拟内存映射到物理内存而非文件,忽略fd和offset参数
        MAP_PRIVATE -对映射区的写操作只反映到缓冲区中,并不会真正写入文件
        MAP_SHARED -对映射区的写操作直接反映到文件中
        MAP_DENYWRITE -拒绝其他对文件的写操作
        MAP_FIXED -若在start上无法创建映射,则失败(无此标志系统会自动调整)
        MAP_LOCKED -锁定映射区,保证其不被换出
    -offset:文件偏移量

    6.解除虚拟内存到物理内存或文件的映射

    #include <sys/mman.h>
    
    int munmap(void* start,size_t length);
        成功返回0,失败-1
    
    -start: 映射区内存起始地址,必须是页的首地址
    -length:映射区字节长度,自动按页(4K)园整

    7.文件硬链接

       创建一个已有硬链接创建一个新的硬链接

    #include <unistd.h>
    
    int link(const char* oldpath,const char* newpath);
    -oldpath:原始路径
    -newpath:新建路径

       删除目录文件里的一个硬链接条目

    #include <unistd.h>
    
    int unlink(const char* pathname);
    int remove(const char* pathname); 成功返回0,失败
    -1

       修改文件的名字:

    #include <stdio.h>
    
    int rename(const char* oldpath,const char* newpath);
    成功返回0,失败-1

    8.符号链接

      

    #include <unistd.h>
    
    int symlink(const char* oldpath,const char* newpath);
        成功 0,失败-1
    
    ssize_t readlink(const char* path,char* buf,size_t size);
    
        成功返回拷入buf的符号链接文件的内容的字节数,失败返回-1

    9.目录的创建

      创建空目录

    #include <sys/stat.h>
    
    int mkdir(const char* pathname,mode_t mode);
        成功返回0,失败-1
    --pathname:目录路径
    --mode:访问权限,目录的执行权限(x)表示可进入

      删除一个空目录

    #include <unistd.h>
    
    int rmdir(const char* pathname);
    成功0,失败-1
    
    -pathname:目录路径

    10.当前工作目录

      获取当前工作目录  

    #include <unistd.h>
    
    char* getcwd(char* buf,size_t size);
    
    成功返回当前工作目录路径字符串指针,失败返回NULL
    
    -buf:缓冲区
    -size:缓冲区大小(字节)

      切换当前工作目录

    #include <unistd.h>
    
    int chdir(const char* pathname);
    int fchdir(int fd);
    
    -path:工作目录路径
    -fd:目录工作目录文件描述符(由open函数返回)

    11.获取目录内容

      打开目录

    #include <dirent.h>
    
    DIR* opendir(const char* name);
    DIR* fdopedir(int fd);
        成功返回目录流指针,失败返回NULL
    -name:目录路径
    -fd:目录文件描述符(由open函数返回)

      关闭目录

    #include <dirent.h>
    
    int closedir(DIR* dirp);
        成功返回0,失败-1
    -dirp:目录流指针

      读取目录

    #include <dirent.h>
    
    struct dirent* readdir(DIR* dirp);
    成功返回目录条目指针,读完(不置errno)或失败返回NULL
    
    目录条目结构:
    
    struct dirent{
        ino_t   d_ino; //i节点号
        off_t    d_off;//下一条目位置
        unsingned short   d_reclen;//记录长度
        unsingned  char  d_type;//文件类型
        char     d_name[256];//文件名
    };
    
    --每个目录中还有两个特殊的条目,其d_name成员的值为“.”,“..”,分别表示该目录本身和其父目录,更目录无父目录
    
    其中表示文件类型的d_type成员,可取以下值
    DT_REG    -普通文件
    DT_DIR    -目录
    DT_SOCK   -本地套节字
    DT_CHR    -字符设备
    DT_BLK    -块设备
    DT_LNK    符号链接
    DT_FIFO   有名管道
    DT_UNKNOWN    未知
  • 相关阅读:
    (八)CXF之用spring添加拦截器
    (七)CXF之与spring整合发布web服务
    (六)CXF之自定义拦截器
    借鉴mini2440的usb-wifi工具集在Beagleboard上移植无线网卡
    ubuntu设置网络
    mysql优化学习
    java日期转化
    Navicat使用
    (转载)windows下mysql忘记密码
    java读取文件乱码
  • 原文地址:https://www.cnblogs.com/Kernel001/p/7802080.html
Copyright © 2011-2022 走看看