获取文件的绝对path

在Unix上,如何将相对path转换为绝对path? 有没有一个方便的系统function呢?

在Windows上有一个GetFullPathName函数来完成这个工作,但是在Unix上我没有find类似的东西。

使用realpath() 。

realpath()函数将从file_name指向的路径名中派生一个绝对路径file_name ,该绝对路径名命名同一个文件,其分辨率不涉及' . ',' .. '或符号链接。 生成的路径名应存储为由resolved_name指向的缓冲区中以空字符结尾的字符串,最大值为{PATH_MAX}个字节。

如果resolved_name是空指针,则realpath()的行为是实现定义的。


以下示例为由symlinkpath参数标识的文件生成绝对路径名。 生成的路径名存储在实际路径数组中。

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

另外尝试“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 

测试环境:

 setivolkylany@localhost$/ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 8.6 (jessie) Release: 8.6 Codename: jessie setivolkylany@localhost$/ uname -a Linux localhost 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux setivolkylany@localhost$/ 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.