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

Я в основном должен написать клон команды UNIX ls для classа, и у меня почти все работает. Одна вещь, которую я не могу понять, как это сделать, – проверить, является ли файл символической ссылкой или нет. На странице 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 …

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

    Вы не можете.

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