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 */
};
如果读取失败则返回空指针NULL(0)
再看Windows下的方法
int _findnext(
intptr_t handle,
struct _finddata_t *fileinfo
);
由于Windows下还要对dir_name附上一段字符串所以直接用std::string了,用char数组然后strcpy太麻烦。
对比可以发现,Windows是把文件结构的指针作为输入参数,而Linux则是作为返回参数,Linux下的这种做法更为自然,而且即使用的是C风格,代码也非常简单易懂。
-----------------------------------------------------------下面是之前的错误看法--------------------------------------------------------------
但是要注意,Linux这种做法实际上是动态申请了空间,需要手动free(direntp)来释放内存,虽然APUE上面的示例代码并没有这一步。
-----------------------------------------------------------上面是之前的错误看法--------------------------------------------------------------
readdir是不可重入的函数,按照man的说明,readdir()的返回值会被接下来的调用给重写
The data returned by readdir() may be overwritten by subsequent calls
to readdir() for the same directory stream.
也就是说readdir的实现其实是类似这种