LINUX.ORG.RU

Как проверить, что два пути указывают на один и тот же файл?


0

0

Т.е. например, у меня есть пути
/home/myself/my_file,
/home/../home/myself/./my_file
они указывают на один и тот же файл.
Причем, возможна ли такая проверка библиотечными средствами, если такого файла нет? И если есть?

anonymous

По моему stat() подойдет. Этот системный вызов выдает информацию о файле. В случае ссылок он по ним все равно доходит до файла (не видя явно самих ссылок, а видя по ним файл, на который они указывают) и берет информацию о файле назначения. Информация именно о символьных ссылках - lstat(). Удачи.

anonymous
()
Ответ на: комментарий от anonymous

>anonymous (*) (2003-09-23 11:55:34.351064).
Еще наличие файла можно проверить операцией открытия файла open или fopen (смотря какой стиль используешь). При отсутствии файла - ошибка (и проверка - чему равна глобальная переменная errno). В случае отстутствия файла errno = что-то типа:
no search file or directory.
Man open.
Man fopen.

anonymous
()

А какие поля возвращенных структур stat достаточно проверить на совпадение? Только inode (st_ino)? Или еще что-нибудь?

anonymous
()

> Или еще что-нибудь? Еще надо убедиться, что это не на разных дисках.

ansky ★★★★★
()

В смеысле - st_dev, девайс?

anonymous
()

вообще говоря, st_dev+st_ino, но, к сожалению, это не будет работать на современных Linux, которые поддерживают интерфейс iget4 (в частности, если не ошибаюсь, на reiserfs).

Murr ★★
()

Да, а вызов realpath не проканает?

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