Как программно получить абсолютный путь для заданного относительного пути в Linux?
В случае Windows у нас есть _fullpath()
API. Другими словами, я имею в виду, что является аналогом API _fullpath
Windows в Linux?
Как программно получить абсолютный путь для заданного относительного пути в Linux?
В случае Windows у нас есть _fullpath()
API. Другими словами, я имею в виду, что является аналогом API _fullpath
Windows в Linux?
Как упомянул Пол, используйте realpath()
. Обратите внимание, что, поскольку многие файловые системы в Linux поддерживают жесткие ссылки, любой заданный каталог может иметь количество различных абсолютных путей.
realpath
разрешает имя так, как вы ожидаете — путем (рекурсивного) выравнивания компонентов /../
и /./
и разрешения символических ссылок. Проблема с несколькими путями просто означает, что имя, которое вы получаете в конце, не обязательно уникально для данного файла (поскольку файл не обязательно имеет единственное истинное имя).
- person caf; 27.02.2010
Ознакомьтесь с функцией realpath.
#include <stdlib.h>
#include <stdio.h>
#include <linux/limits.h>
int main()
{
char resolved_path[PATH_MAX];
realpath("../../", resolved_path);
printf("\n%s\n",resolved_path);
return 0;
}
realpath
такой маленький буфер, который, скорее всего, будет записывать больше размера буфера (поскольку для этого требуется длина PATH_MAX). Даже если программа не дает сбоев, этот код может привести к уязвимостям безопасности в зависимости от расположения переменных, если злоумышленник может контролировать исходный путь, который необходимо разрешить. Руководство рекомендует передавать NULL в качестве второго параметра и позволить realpath
выделять память, чтобы гарантировать отсутствие проблем с определениями PATH_MAX, начиная с POSIX 2008.
- person Steve Dodier-Lazaro; 09.08.2015
Попробуйте realpath:
$ man realpath
Это также доступно в BSD, OS X и др.
Существует realpath
от stdlib.h
realpath
находится в stdlib.h
. Конечно, не может быть правдой, учитывая, что realpath
не является частью библиотеки C. Вот и правда, это правда. Я ошеломлен. Что должна делать хорошо сформированная программа, которая определяет свою собственную функцию с именем realpath
? Эти ребята из POSIX взбесились! Неистовство Я говорю!
- person Dan Moulding; 27.02.2010
_XOPEN_SOURCE
), все должно быть в порядке.
- person caf; 27.02.2010
Работая на RedHat 5.3, realpath не существует, но установлен readlink. Вы можете использовать его для относительных путей и символических ссылок, плюс он будет рекурсивно разрешать символические ссылки для вас. Таким образом, на мой взгляд, это лучший вариант, чем realpath
readlink -f .
Это также еще один полезный способ, например "readlink -m $filename"
Во-первых, он работает без необходимости существования целевого файла. Во-вторых, он будет обрабатывать символические ссылки и получать действительно реальный путь.
c
, это, вероятно, дубликат stackoverflow.com/questions/229012/ - person bfontaine   schedule 01.10.2013