Получение абсолютного пути к файлам в C

Мне нужен метод, чтобы получить абсолютный путь к файлу на языке программирования C для реализации команды 'cp' UNIX. Цель состоит в том, чтобы показать ошибку, когда исходный путь и целевой путь совпадают.

Есть несколько возможностей, например:

cp file .    // show error
cp ../file .
cp file file // show error

Я не нашел хорошего способа решить эту проблему.

1 ответ

Преобразование комментариев в ответ.

Уважать realpath() чтобы получить "настоящее имя" пути, но это действительно не обязательно. Ты можешь использовать stat() чтобы увидеть, совпадают ли номер устройства и индекс для двух имен.

Также обратите внимание, что если у вас есть два связанных файла (например, /home/user1/name1 а также /home/user2/name2), имена могут отличаться, но все же относятся к одному и тому же файлу (и ссылки могут быть "жесткими" или символическими). Вы можете обнаружить их эквивалентность с stat() но не с realpath() - по крайней мере, не с realpath() если ссылка жесткая.

Другие вопросы по тегам