-
打开一个目录
函数原型 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