Как получить дескриптор файла символической ссылки? - PullRequest
0 голосов
/ 14 сентября 2018

Я знаю, что могу прочитать символическую ссылку с помощью readlink и работать с ней с помощью llistxattr и т. Д., Но я хочу получить дескриптор файла, чтобы я мог использовать ее с flistxattr и т. Д. .

Я также проверил руководство по open и знаю, что O_NO_FOLLOW не откроет символическую ссылку (но не удастся, так что некоторые приложения могут быть безопаснее).

Так есть ли способ получить файловый дескриптор символической ссылки?

1 Ответ

0 голосов
/ 15 сентября 2018

есть ли способ получить файловый дескриптор символической ссылки?

со страницы руководства symlink(7):

Получение дескриптора файла, который ссылается на символическую ссылку

Использование комбинации флагов O_PATH и O_NOFOLLOW для открытия (2) дает файловый дескриптор, который можно передать в качестве аргумента dirfdв системных вызовах, таких как fstatat (2), fchownat (2), fchmodat (2), linkat (2) и readlinkat (2), для работы с самой символьной ссылкой (а не с файлом, на который она ссылается).

По умолчанию (т. Е. Если флаг AT_SYMLINK_FOLLOW не указан), если name_to_handle_at (2) применяется к символической ссылке, он дает дескриптор для символической ссылки (а не файла, к которому он относится).Затем можно получить дескриптор файла для символической ссылки (а не файла, на который она ссылается), указав флаг O_PATH при последующем обращении к open_by_handle_at (2).Опять же, этот файловый дескриптор может использоваться в вышеупомянутых системных вызовах для работы с самой символьной ссылкой.

...