После вызова функции readdir в программе C в контейнере на основе arm32, выполняющемся на хосте Ubuntu 19.10 на базе x64, вызов возвращает EOVERFLOW для пустых каталогов (например, / mnt, / media) вместо возврата 0.
Наблюдали ли другие за этой проблемой? Это проблема конфигурации? Если да, то как это можно исправить?
Версии:
- Гость: debian: buster- backports@sha256: 8f27850df2144df1598b5c76b213616ecaab08e804a6d84ddace1455d8cbd9f010
- Версия Qemu: 1: 4.0 + dfsg-0ubuntu9.6
Шаги воспроизведения:
- Создайте образ с именем crystal-for-buster-armhf: v1 на основе Debian Buster для arm32 с помощью Dockerfile и сборки. sh сценарий доступен здесь .
- Запустить контейнер на основе этого изображения.
- Скомпилируйте и соберите приведенную ниже программу.
- Выполните полученный исполняемый файл с именем каталога в качестве аргумента командной строки.
#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);
}
}