Как вы определяете путь к файлу, на который указывает символическая ссылка? - PullRequest
5 голосов
/ 17 мая 2011

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

Ответы [ 2 ]

8 голосов
/ 17 мая 2011

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

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

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

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

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

5 голосов
/ 17 мая 2011

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

...