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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.