如何在Linux中以编程方式获取给定相对路径的绝对路径?

Jay*_*Jay 19 c linux relative-path absolute-path

如何在Linux中以编程方式获取给定相对路径的绝对路径?

我们有Windows的Windows _fullpath().换句话说,我的意思是_fullpathLinux中Windows的类似API是什么?

unw*_*ind 19

正如保罗所说,使用realpath().但请注意,由于Linux中的许多文件系统都支持硬链接,因此任何给定目录都可以有许多不同的绝对路径.

  • 目录的硬链接被认为是邪恶的,并且被大多数文件系统禁止. (4认同)

Mar*_*man 15

查看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; 
} 
Run Code Online (Sandbox Code Playgroud)

  • 如上所述,这段代码是不安全和错误的.不要**给这样一个小的缓冲区到`realpath`,它很可能写入超出缓冲区大小(因为**需要*一段PATH_MAX).即使程序没有崩溃,如果攻击者可以控制要解析的原始路径,此代码也可能导致安全漏洞,具体取决于变量布局.手册建议将NULL作为第二个参数传递,并让`realpath`分配内存以确保PATH_MAX定义没有问题,从POSIX 2008开始. (5认同)
  • 我认为永远记住 PATH_MAX 根本不是一个好主意:http://insanecoding.blogspot.com.br/2007/11/pathmax-simply-isnt.html (3认同)

Pau*_*l R 6

试试realpath:

$ man realpath
Run Code Online (Sandbox Code Playgroud)

这也适用于BSD,OS X等.