《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
读取目录文件,
DIR *opendir(const char *name);
struct dirent *readdir(DIR *dirp);
opendir打开一个目录后得到一个DIR类型的指针给readdir使用,
readdir函数调用一次就会返回一个struct dirent类型的指针,
这个指针指向一个结构体变量,
这个结构体变量里面记录了目录项,
readdir调用一次读出一个目录项,
读到NULL的时候,代表读取完了,
On Linux, the dirent structure is defined as follows:
struct dirent {
ino_t d_ino; /* inode number */
off_t d_off; /* not an offset; see NOTES */
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]; /* filename */
};
可重入函数介绍,
简单说,就是多次调用之间是否有关联,
struct dirent *readdir(DIR *dirp);
多次调用readdir其实readir内部并不会重复申请内存而是使用第一次调用readdir时分配的那个内存,这也是readdir不可重入的关键,
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
不可重入在多线程中不安全,所以后来,又提供了可重入版本的C库封装,