Как с помощью stat () определить, является ли файл символической ссылкой? - PullRequest
15 голосов
/ 14 апреля 2010

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

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

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-ссылку ...

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

1 Ответ

24 голосов
/ 14 апреля 2010

Вы не можете.

Вам нужно использовать <a href="http://linux.die.net/man/2/stat" rel="noreferrer">lstat()</a> для определения самой ссылки, обычный stat() будет следовать по ссылке, и, таким образом, никогда не будет "видеть" саму ссылку.

...