Как вы определяете использование stat(), является ли файл символической ссылкой?

В основном я должен написать клон команды UNIX ls для класса, и у меня почти все работает. Одна вещь, которую я не могу понять, как это сделать, - проверить, является ли файл символической ссылкой или нет. На странице man для stat() я вижу, что существует значение mode_t, S_IFLNK.

Вот как я пытаюсь проверить, является ли файл символической ссылкой, без везения (примечание, stbuf - это буфер, который stat() возвращает данные inode):

switch(stbuf.st_mode & S_IFMT){
    case S_IFLNK:
        printf("this is a link\n");
        break;
    case S_IFREG:
        printf("this is not a link\n");
        break;
}

Мой код ВСЕГДА печатает this is not a link, даже если это так, и я знаю, что указанный файл является символической ссылкой, так как фактическая команда ls говорит так, плюс я создал sym-link...

Может ли кто-нибудь определить, что я могу делать неправильно? Спасибо за помощь!

Ответы

Ответ 1

Вы не можете.

Вам нужно использовать lstat(), чтобы скопировать ссылку, plain stat() будет следовать за ссылкой и, таким образом, никогда не "увидеть" эту ссылку.