2013-08-10 8 views
4

Предположим, что я хочу получить реальный путь символической ссылки. Я знаю, что и системные вызовы readlink и stat могут разыменовать ссылку и дать мне реальный путь. Они работают одинаково (только в отношении разыменования, я знаю, что stat делает намного больше)? Должен ли я отдать предпочтение одному другому?Получить реальный путь символической ссылки

+0

Если вы просто хотите сделать ссылку на ссылку, 'stat' кажется немного переборщиком. – DrYap

ответ

8

Используйте stat(), чтобы рассказать вам о файле в конце любой цепочки символических ссылок; это не приведет вас к пути каким-либо образом. Используйте lstat() , чтобы получить информацию о символической ссылке, если таковая имеется. он действует как stat(), когда указанное имя не является символической ссылкой. Используйте readlink(), чтобы получить имя пути, хранящееся в символической ссылке, названной в качестве ее аргумента (остерегайтесь - она ​​не имеет значения null, прекращает строку).

Если вы хотите получить полный путь к файлу в конце символической ссылки, вы можете использовать realpath(). Это дает вам абсолютное имя пути, которое не пересекает любые символические ссылки для доступа к файлу.

+0

'realpath()' выглядит так же, как и то, что я действительно искал. – Guy

+0

При использовании qt в любом случае QDir :: canonicalPath() была реальной помощью для меня (работает и с файлами). – JepZ

1

Да, вы должны использовать readlink() для этого. Однако обратите внимание, что для этого требуется, чтобы вы выделили буфер для хранения разыменованного пути. lstat() может помочь, если вы хотите выделить буфер нужного размера, который требуется, как показано в примере внизу базы данных readlink()man page.

Смежные вопросы