美文网首页
Linux:目录函数

Linux:目录函数

作者: fck_13 | 来源:发表于2020-05-21 20:39 被阅读0次
  • 打开一个目录

    函数原型 DIR *opendir(const char *name)
    DIR *fopendir(int fd)
    头文件 #include <sys/types.h>
    #include <dirent.h>
    参数 name:目录名称
    fd:要打开目录的文件描述符
    返回值 成功:返回一个指向目录流的指针
    失败:返回空指针NULL
  • 关闭一个目录

    函数原型 int closedir(DIR *dirp)
    头文件 #include <sys/types.h>
    #include <dirnet.h>
    参数 dirp:要关闭的目录的目录流结构体
    返回值 成功:返回0
    失败:返回-1
  • 获取一个目录流的文件描述符

    函数原型 int dirfd(DIR *dirp)
    头文件 #include <sys/types.h>
    #include <dirnet.h>
    参数 dirp:要获取文件描述符的目录流
    返回值 成功:返回一个非负的文件描述符
    失败:返回-1
  • 读取一个目录

    函数原型 struct dirent *readdir(DIR *dirp);
    头文件 #include <dirent.h>
    参数 dirp:要读取的目录的目录流
    返回值 成功:返回一个dirnet结构体的指针或者NULL, NULL意味着到了流的结束
    失败:返回NULL,并且设置想用的errno

    结构体dirent的内容如下:

    struct dirent {
        ino_t          d_ino;       /* Inode number */
        off_t          d_off;       /* Not an offset; see below */
        unsigned short d_reclen;    /* Length of this record */
        unsigned char  d_type;      /* Type of file; not supported
                                                by all filesystem types */
        char           d_name[256]; /* Null-terminated filename */
    };
    
    • d_ino:文件(目录)的inode数。

    • d_off:该数据的值跟telldir返回的值相同,其含义为在目录流的当前位置。尽管它是一个off_t 类型,我们应该认为这个值对我们是不透明的,不要做任何的假设。

    • d_reclen:当前记录的大小(以字节为单位)。它可能不匹配上面结构体定义的大小。

    • d_type:表示文件类型。使用此字段可以省去调用lstat来获取文件的类型。

      • DT_BLK :块设备
      • DT_CHR :字符设备
      • DT_DIR :目录
      • DT_FIFO : 管道
      • DT_LNK : 符号链接
      • DT_REG : 常规文件
      • DT_SOCK : socket文件
      • DT_UNKNOWN : 文件类型无法确认
    • d_name:文件名称,以NULL结尾。

  • 重置目录流
    函数原型 voi rewinddir(DIR *dirp)
    头文件 #include <sys/types.h>
    #include <dirnet.h>
    参数 dirp:目录流
    返回值
  • 扫描一个目录来匹配

    函数原型 int scandir(const char *dirp, struct dirent ***namelist, int (*filter)(const struct dirent *), int (*compar)(const struct dirent **, const struct dirent **));
    头文件 #include <dirent.h>
    参数 dirp:目录名
    namelist:扫描目录的结果
    filter:过滤函数,对扫描结果进行过滤
    compar:用于排序的比较函数
    返回值 成功:返回选择的文件的数量
    失败:-1
  • 设置下一次readdir()调用的位置

    函数原型 void seekdir(DIR *dirp, long loc);
    头文件 #include <dirent.h>
    参数 dirp:要操作的目录结构体的指针
    loc:要设置的位置
    返回值 void
  • 返回当前readdir()读到的位置

    函数原型 long telldir(DIR *dirp);
    头文件 #include <dirent.h>
    参数 dirp:要操作的目录
    返回值 成功:目录流的当前位置
    失败:-1

相关文章

网友评论

      本文标题:Linux:目录函数

      本文链接:https://www.haomeiwen.com/subject/ilvoohtx.html