在基于x64的Ubuntu 19.10主机上执行的基于arm32的容器中的C程序中在C程序中调用readdir函数后,该调用将为空目录(例如/mnt,/media)返回EOVERFLOW而不是返回0。
其他人有没有观察到这个问题?这是配置问题吗?如果是这样,如何解决?
版本:
复制步骤:
#define _POSIX_SOURCE
#include <dirent.h>
#include <errno.h>
#include <sys/types.h>
#undef _POSIX_SOURCE
#include <stdio.h>
main(int argc, char* argv[]) {
DIR *dir;
struct dirent *entry;
if ((dir = opendir(argv[1])) == NULL)
perror("opendir() error");
else {
puts("contents:");
while (1) {
errno = 0;
entry = readdir(dir);
if (entry == NULL) {
printf("Errno: %d EOVERFLOW: %d\n", errno, EOVERFLOW);
break;
}
printf(" %s\n", entry->d_name);
}
closedir(dir);
}
}
最佳答案
如果您使用的是glibc(大多数基于Linux的系统),则需要使用-D_FILE_OFFSET_BITS=64
进行编译。默认值仍然是32位off_t
,并带有32位ino_t
,并且在这种配置中,如果inode编号不适合32位,则readdir
,stat
等将因EOVERFLOW
而失败。许多现代文件系统始终具有不适合32位的inode编号。
关于c - 在基于arm32镜像的容器中,当目录为空时,readdir返回EOVERFLOW,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62077669/