DIR *dir_ptr;
struct dirent *dir_entery;
dir_ptr = opendir("/tmp");
while (dir_ptr&&(dir_entery = readdir(dir_ptr))) {
printf("%s \n", dir_entery->d_name);
}
printf("%s \n", strerror(errno));
给出了这个输出:
file_name
dir_name
errno = Remote I/O error
在/tmp
中的我在执行opendir(dir)
之后获得readdir时有一个目录和两个文件它退出while并输出此错误:
errno = Remote I/O error
为什么它无法在/tmp
目录中的目录后读取文件?
答案 0 :(得分:0)
readdir()
未记录为返回REREMOTEIO
,因此很可能sterror()
会提供误导性信息。
在进入errno
循环之前,将0
设置为while()
。
来自man readdir
:
如果到达目录流的末尾,则返回NULL并且errno 不 改变。如果发生错误,则返回NULL并正确设置errno。如果发生错误, 返回NULL并正确设置errno。
要在readdir()
返回NULL
时测试这两种情况,您可以修改代码,如下所示:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <errno.h>
...
DIR * dir_ptr = opendir("/tmp");
if (!dir_ptr)
{
perror("opendir() failed");
}
else
{
struct dirent * dir_entery = NULL;
errno = 0,
while (dir_entery = readdir(dir_ptr))
{
printf("%s\n", dir_entery->d_name);
}
if (errno)
{
perror("readdir() failed");
}
else
{
printf("No more entries.\n");
}
}
...