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

В Linux, если у вас есть путь к файлу, который, как вы знаете, является символической ссылкой, как вы программно определяете (в C или C++) путь к файлу, на который он указывает?

2 ответа

Решение

readlink функция. Сделать man 2 readlink, Эта функция является частью API Posix, поэтому она должна работать практически на любом Unix.

Если путь начинается с '/', тогда это абсолютная символическая ссылка, и у вас есть полный абсолютный путь к файлу, на который он ссылается (это может быть еще одна символическая ссылка, и вам придется повторить процесс снова).

Если путь не начинается с '/', то это относительная ссылка и интерпретируется относительно каталога, в котором находится символическая ссылка. Вы должны правильно комбинировать путь, чтобы выяснить настоящее имя файла.

Конечно, иногда символические ссылки используются для хранения информации, которая на самом деле не является путем. Иногда программы хранят PID или другую подобную информацию в целях блокировки. Вызовы для создания символической ссылки являются одной из наиболее надежных атомарных операций, которые можно выполнять в файловой системе, смонтированной в NFS.

Кроме того, в моей системе Fedora, если вы делаете man 7 symlink Вы получаете длинное обсуждение символических ссылок, их поведения в различных обстоятельствах и краткое описание функций, которые ими манипулируют или на которые они влияют.

В системе POSIX или BSD readlink()

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