Я в основном должен записать клон UNIX ls команда для класса, и у меня есть почти все работа. Одна вещь, которую я, может казаться, не выясняю, как сделать, проверить, является ли файл символьной ссылкой или нет. Из страницы справочника для stat()
, Я вижу, что существует a 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 говорит так, плюс я создал символьную ссылку...
Кто-либо может определить то, что я могу делать неправильно? Спасибо за справку!
Вы не можете.
Вам нужно использовать lstat ()
для определения самой ссылки, plain stat ()
будет следовать по ссылке и, таким образом, никогда не «увидит» саму ссылку.