Подтвердить что ты не робот

Получение абсолютного пути файла

Как преобразовать относительный путь в абсолютный путь в C на Unix? Есть ли для этого удобная системная функция?

В Windows есть функция GetFullPathName, которая выполняет задание, но я не нашел что-то подобное в Unix...

4b9b3361

Ответ 1

Используйте realpath().

Функция realpath() должна выводиться, от имени пути, на которое указывает file_name, абсолютный путь, который называет тот же файл, разрешение которого не включает '.', '..' или символические ссылки. Сгенерированное имя пути хранится как завершающий нуль строка, максимум {PATH_MAX}байтов в буфере, на который указывает resolved_name.

Если resolved_name - нулевой указатель, поведение realpath()от реализации.


В следующем примере создается абсолютный путь к файлу идентифицированный символьным путем аргумент. Сгенерированный путь хранится в массиве actualpath.

#include <stdlib.h>
...
char *symlinkpath = "/tmp/symlink/file";
char actualpath [PATH_MAX+1];
char *ptr;


ptr = realpath(symlinkpath, actualpath);

Ответ 2

Также попробуйте "getcwd"

#include <unistd.h>

char cwd[100000];
getcwd(cwd, sizeof(cwd));
std::cout << "Absolute path: "<< cwd << "/" << __FILE__ << std::endl;

Результат:

Absolute path: /media/setivolkylany/WorkDisk/Programming/Sources/MichailFlenov/main.cpp

Условия тестирования:

[email protected]$/ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.6 (jessie)
Release:    8.6
Codename:   jessie
[email protected]$/ uname -a
Linux localhost 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux
[email protected]$/ g++ --version
g++ (Debian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.