Я хочу перечислить обычные файлы в каталоге. Тем не менее, stat
не удается для каждого файла.
DIR* dp = NULL;
struct dirent* entry = NULL;
dp = opendir(directory);
if (!dp) { log_err("Could not open directory"); return -1; }
while (entry = readdir(dp))
{
struct stat s;
char path[1024]; path[0] = 0;
strcat(path, directory);
strcat(path, entry->d_name);
int status = 0;
if (status = stat(path, &s))
{
if (S_ISREG(s.st_mode))
{
printf("%s\n", entry->d_name);
}
}
else
{
fprintf(stderr, "Can't stat: %s\n", strerror(errno));
}
}
closedir(dp);
Выход
Невозможно стат: Ресурс временно
недоступен
Невозможно стат: Ресурс временно
недоступен * * +1010
Невозможно стат: Ресурс временно
недоступен
(... много раз)
errno
установлено на E_AGAIN
(11).
Теперь, если я напечатаю получившиеся path
, они действительно будут действительными именами файлов и каталогов. Каталог доступен для чтения, у пользователя, с которым я работаю, есть права на это (это каталог, в котором я пишу программу).
В чем причина этой проблемы и как я могу сделать это правильно?