通过direct来查找答案:man -k direct
。
过滤出包含read的主题: man -k direct | grep read
查看一下readdir的man手册:
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
// 返回一个dirent结构体,表示dirp当中的下一个目录项
glibc当中的目录项定义:
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_name
在glibc当中定义为256长度,而POSIX中定义为char d_name[]
,通过NAME_MAX来定义,因此在应用时,不应该依赖长度,而获取其长度的方式最好是strlen(d_name)
,而不是sizeof(d_name)。目录相关API:
#include <sys/types.h>
#include <dirent.h>
// 打开name对应的目录流,返回一个流对象DIR
DIR *opendir(const char *name);
DIR *fdopendir(int fd);
// 从dirp的流当中读取一个目录项,失败返回NULL
struct dirent *readdir (DIR *__dirp)
// 关闭流,失败返回0,成功返回-1
int closedir (DIR *__dirp)