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

#c #c #linux #symlink #symlink-traversal

#c #c #linux #символическая ссылка #обход символьной ссылки

Вопрос:

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

Ответ №1:

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

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

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

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

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

Ответ №2:

В системе POSIX или BSD используется readlink()