Ответ 1
Как сказал Павел, используйте realpath()
. Обратите внимание, что, поскольку многие файловые системы в Linux поддерживают жесткие ссылки, любой данный каталог может иметь несколько разных абсолютных путей.
Как получить абсолютный путь для данного относительного пути программно в Linux?
В случае Windows у нас есть API _fullpath(). Другими словами, я имею в виду, что аналогично API для _fullpath Windows в Linux?
Как сказал Павел, используйте realpath()
. Обратите внимание, что, поскольку многие файловые системы в Linux поддерживают жесткие ссылки, любой данный каталог может иметь несколько разных абсолютных путей.
Проверьте 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:
$ man realpath
Это также доступно в BSD, OS X и др.
Существует realpath
от stdlib.h
Запуск на RedHat 5.3, realpath не существует, но readlink установлен. Вы можете использовать его на относительных путях и символических ссылках, а также рекурсивно разрешать символические ссылки для вас. Это, таким образом, лучший вариант, что realpath по-моему
readlink -f .
Еще один полезный способ, например "readlink -m $filename"
Прежде всего, он работает без требования для существования целевого файла. Во-вторых, он будет обрабатывать символические ссылки и получать действительно реальный путь.
// 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();
}