LINUX.ORG.RU

stat()


0

0

Помогите советом.
Необходимо узнать - является ли файл символьной ссылкой или обычным файлом.
У меня slackware 9.0, файловая система reiserfs, ядро 2.4.22.
В каталоге создаю файл textfile.txt и делаю на него символьную ссылку proba.txt.
Пишу программу:
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int main()
{
struct stat buf;
stat("./proba.txt", &buf);

printf("st_mode - %#o\n", buf.st_mode);
}

Компилирую эту программу и запускаю: выдает
st_mode - 0100644.

Меняю "./proba.txt" на "textfile.txt", компилирую, запускаю:
st_mode - 0100644.

Судя по 'man stat' 644 - это permissions, а 0100 - это обычный файл(а 0120 - symbolic link).
Получается что программа симв. ссылку все равно видит как файл? Это что - особенность файловой системы или я что-то не так понимаю?
Заранее спасибо.

anonymous

stat следует линкам, поэтому ты выскребаешь информацию не о линке, а о файле, на которую линк показывает.

Замени stat на lstat, и все заработает.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

Все заработало. Большое спасибо за помощь.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.