• 目录与链接


    创建和移除(硬)链接

    #include<unistd.h>
    int link(const char *oldpath,const char *newpath)//如果oldpath是符号链接,该函数不会对其解引用
    int unlink(const char *pathname)//也不会解引用
    
    //更改文件名
    int rename(const char *oldpath,const char *newpath) //既可以重命名文件,也能移动文件
    int symlink(const char *flilepath,const char *linkpath)     使用符号链接
    size_t readlink(const char *pathname,char *buffer,size_t bufsize)       将符号链接字符串的一份副本置于buffer指向的字符串中
    
    //创建和移除目录
    #include<sys/stat.h>
    int mkdir(const char *pathname,mode_t mode) 如果需要递归建立文件需要加选项-p
    int rmdir(const char *pathname)     要删除的目录须为空,也不会解引用
    int remove(const char *pathname)        删除一个文件(调用unlink)或者空目录(调用rmdir)
    

    读目录

    #include<dirent.h>
    DIR *opendir(const char *dirpath)
    DIR *fdopendir(int fd)
    
    stuct dirent *readdir(DIR *dirp)    从一个目录流中读取连续的条目,结果未经排序
    struct dirent{
    ino_t d_ino;    文件节点
    char d_name[];      文件名称
    };
    
    void rewinddir(DIR *dirp)   将目录流移到起点
    int closedir(DIR *dirp)     关闭处于打开状态的目录流关闭,同时释放流所用资源
    int dirfd(DIR *dirp)    返回dirp目录流相关联的文件描述符,传到fchdir()即可改变当前工作目录
    int fchdir(int fd);
    
    int readdir_r(DIR *dirp,struct dirent *entry,struct dirent **result)    使用目录流,可重入
    

    文件树遍历

    #include<ftw.h>
    int nftw(const char *dirpath,int(*func)(const char *pathname,const struct stat *statbuf,int typeflag,struct FTW *ftwbuf),int nopenfd,int flags) 
    为目录数树中的每个文件调用一次由程序员定义func函数
    nopenfd指定文件描述符数量的最大值,如果目录树深度超过这个值,那么nftw在做好记录的前提下,关闭并重新打开描述符
    flags参数可以为下列的值
    每次调用fcunc都必须返回一个整型值,由nftw()加以解释,如果返回0,nftw()会继续对书进行遍历,nftw返回非0时停止遍历,并且nftw()也会返回相同的非0值
    FTW_CHDIR   处理目录内容之前先调用chdir()进入每个目录
    FTW_DEPTH   对目录树执行后序遍历,这意味着,nftw()会在对目录本身执行func之前先对目录中的所有文件爱你及其子目录执行func调用
    FTW_MOUNT   不会越界进入另一文件系统,如果树中某一子目录是挂载点,那么不会对其进行遍历
    FTW_PHYS    默认情况下,nftw()对符号链接进行解引用,设置该标志之后,就不会进行解引用
    typeflags的值可为下列值
    FTW_D       这是一个目录
    FTW_DNR     这是一个不能读取的目录,nftw()不能遍历其后代
    FTW_DP      对一个目录进行后序遍历
    FTW_F       该文件类型是出目录和符号链接外的任何类型
    FTW_NS      对该文件调用stat()失败
    FTW_SL      这是一个符号链接,仅当使用FTW_PHYS标志嗲用nftw()函数是才返回该值
    FTW_SLN     悬空的符号链接,只有没有指定FTW_PHYS标志时才会返回该值
    其中
    struct FTW{
    int base;   //最后一个/字符之后的部分的整型偏移量
    int level;  //该条目相对与便利起点(level为0)的深度
    };
    FTW_CONTINUE        与传统func()函数返回0一样,继续处理目录树中的条目
    FTW_SKIP_SIBLINGS   不再进一步处理当前目录中的条目,恢复对父目录的处理
    FTW_SKIP_SUBTREE    如果pathname是目录即typeflag是FTW_D,那么不对该目录下的条目嗲用func(),回复对该目录的下一个同级目录的处理
    FTW_STOP        与传统func函数返回非0值一样,不再进一步处理目录树下的任何条目,nftw将返回FTW_STOP给调用者
    //获取当前工作目录
    char *getcwd(char *cwdbuf,size_t size)  将内含当前工作目录绝对路径的字符串置于cwdbuf中,其空间至少为size
    //改变当前工作目录
    int chdir(const char *pathname)
    int fchdir(int fd)
    
    //改变进程的根目录
    #include<unistd.h>
    int chroot(const char *pathname)    所有绝对路径名的解释都将以该文件系统的pathname位置作为起点,这会将应用程序限定与文件系统的特定区域,成为设立一个chroot监禁区,尽管如此,chroot系统调用也并非完全安全

    这里写图片描述

    //解析路径名,将所有符号链接意义解除引用,变成绝对路径
    #include<stdlib.h.
    char *realpath(const char *pathname,char *resolved_path)
    
    //解析路径名字符串
    #include<libgen.h>
    char *dirname(char *pathname);  //目录
    char *basename(char *pathname); //文件名
  • 相关阅读:
    ConcurrentHashMap使用示例
    vss的ss.ini丢失或损坏导致的vss无法登录错误
    Arcgis中用滚轮做放大缩小为什么和一般软件反向
    MapControl控件
    string截取字符串
    C# CheckedListBox控件用法总结(怎样得到多选的值)
    通信串口中报ObjectDisposedException错误时怎么解决
    C#串口SerialPort常用属性方法
    SerialPort.DataReceived 事件
    C#的串口编程
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730615.html
Copyright © 2020-2023  润新知