У меня проблемы с S_ISXXX(m)
макросами из sys/stat.h
В частности, почти все записывается в каталог.Только обычные файлы корректно отображаются как обычные файлы, ссылки, устройства, fifos, все, похоже, отображаются как каталоги.
Я что-то упустил, или это вообще ошибка?
Вот код, должно быть довольно простым (извините за чешский текст, но вы должны понять, даже не понимая этого:)
int listdir(const char *path)
{
struct dirent *polozka;
DIR *dir;
dir = opendir(path);
if (dir == NULL)
{
perror("nepovedlo se otevrit adresar");
return -1;
}
while((polozka = readdir(dir)))
{
struct stat info;
lstat(polozka->d_name,&info);
puts(polozka->d_name);
if (S_ISREG(info.st_mode))
puts("\tObycejny soubor");
if (S_ISDIR(info.st_mode))
puts("\tAdresar");
if (S_ISCHR(info.st_mode))
puts("\tZnakove zarizeni");
if (S_ISBLK(info.st_mode))
puts("\tBlokove zarizeni");
if (S_ISFIFO(info.st_mode))
puts("\tPojemenovana roura");
if (S_ISLNK(info.st_mode))
puts("\tSymbolicky link");
if (S_ISSOCK(info.st_mode))
puts("\tSocket");
}
closedir(dir);
return 0;
}