Реализуя faccessat () в Mac OS X, как мне создать новый путь из заданного дескриптора файла каталога и имени пути? - PullRequest
2 голосов
/ 03 марта 2012

Я хочу реализовать функцию POSIX 2008

int faccessat(int dirfd, const char *pathname, int mode, int flags)

в Mac OS X. Согласно справочной странице Linux для этой функции:

   If the pathname given in pathname is relative, then it is interpreted relative
   to the directory referred to by the file descriptor dirfd (rather than
   relative to the current working directory of the calling process, as is done
   by access(2) for a relative pathname).

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

1 Ответ

2 голосов
/ 03 марта 2012

В Mac OS X вы можете получить путь к каталогу, если он доступен, используя fcntl(dirfd, F_GETPATH, dirpath); dirpath должен иметь размер MAXPATHLEN или больше. Если предоставленный путь является относительным, вы можете добавить "/" и указанный путь к пути каталога. Тем не менее, это может привести к строке, которая длиннее MAXPATHLEN.

Другой способ сделать это - использовать fchdir(), чтобы изменить свой рабочий каталог на этот каталог, а затем напрямую использовать относительный путь. Конечно, это изменит текущий каталог вашего процесса. При необходимости вы можете сначала сохранить его, открыв исходный текущий каталог ".", а затем снова использовать fchdir() с этим дескриптором сохраненного файла после восстановления исходного текущего каталога. Однако это все еще может быть проблемой, если ваша программа многопоточная, а другие потоки зависят от текущего каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...