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