Существует ли системный вызов POSIX для разрешения путей к файловой системе? - PullRequest
2 голосов
/ 27 апреля 2010

Существует ли системный вызов POSIX для разрешения путей файловой системы? У меня есть CWD для пути, а также путь к файлу из этого CWD. Я не могу использовать chdir для переключения на каталог, потому что мне нужно разрешать пути из нескольких потоков одновременно. Я подумывал добавить / между CWD и траекторией, но по какой-то причине мне кажется, что это хакерство. Это правильный способ разрешения относительных путей?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2010

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

1 голос
/ 28 апреля 2010

В зависимости от того, что вы хотите сделать с файлом, и если для вас приемлемы относительно недавние добавления в POSIX.1-2008, openat и друзья могут представлять интерес:

int dirfd = open(desired_cwd_path, O_RDONLY);
int fd = openat(dirfd, file_relpath, O_RDONLY);
close(dirfd);
// ...use fd

(Эти системные вызовы существовали, например, в Solaris и Linux уже довольно давно.)

...