C: Проверка типа файла. Использование lstat() и макросов не работает

Я использую opendir() для открытия каталога, а затем readdir() и lstat() для получения статистики каждого файла в этом каталоге. Следуя этой manpage я написал код, который работает не так, как предполагалось. Он действительно перечисляет все файлы в текущем каталоге, но не выводит, является ли файл обычным файлом, симлинком или каталогом.

#include 
#include 
#include 
#include 

void main(){

    char* folder=".";                                     //folder to open

    DIR* dir_p;
    struct dirent* dir_element;
    struct stat file_info;

    // open directory
    dir_p=opendir(folder);

    // show some info for each file in given directory
    while(dir_element = readdir(dir_p)){

        lstat(dir_element->d_name, &file_info);          //getting a file stats

        puts(dir_element->d_name);                       // show current filename
        printf("file mode: %d\n", file_info.st_mode);

        // print what kind of file we are dealing with
        if (file_info.st_mode == S_IFDIR) puts("|| directory");
        if (file_info.st_mode == S_IFREG) puts("|| regular file");
        if (file_info.st_mode == S_IFLNK) puts("|| symbolic link");
    }

}

5
задан Pithikos 6 October 2011 в 12:33
поделиться