在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.