Как получить абсолютный путь для данного относительного пути программно в Linux? - PullRequest
17 голосов
/ 26 февраля 2010

Как программно получить абсолютный путь для данного относительного пути в Linux?

В случае Windows у нас есть _fullpath() API. Другими словами, я имею в виду, что является аналогом API для _fullpath Windows в Linux?

Ответы [ 7 ]

19 голосов
/ 26 февраля 2010

Как упоминал Павел, используйте <a href="http://man7.org/linux/man-pages/man3/realpath.3.html" rel="noreferrer">realpath()</a>. Обратите внимание, что, поскольку многие файловые системы в Linux поддерживают жесткие ссылки , любой заданный каталог может иметь несколько различных абсолютных путей.

15 голосов
/ 26 февраля 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; 
} 
6 голосов
/ 26 февраля 2010

Попробуйте realpath :

$ man realpath

Это также доступно в BSD, OS X и др.

3 голосов
/ 26 февраля 2010

Есть realpath от stdlib.h

1 голос
/ 10 октября 2012

Работает на RedHat 5.3, realpath не существует, но readlink установлен. Вы можете использовать его для относительных путей и символических ссылок, плюс он будет рекурсивно разрешать символические ссылки. Таким образом, на мой взгляд, это лучший вариант, который realpath

readlink -f .
0 голосов
/ 04 января 2017
// For C++ with Gnome Gtkmm3 libraries
#include <glibmm.h>
#include <giomm.h>

  string PathRel2Abs(string relpath) {
  Glib::RefPtr<Gio::File> file = Gio::File::create_for_path(relpath);
  return file->get_path();
}
0 голосов
/ 11 марта 2010

Это также другой полезный способ, например, "readlink -m $ filename"

Прежде всего, это работает без необходимости существования целевого файла. Во-вторых, он будет обрабатывать символические ссылки и получать реальный путь.

...