【发布时间】:2009-07-23 13:43:58
【问题描述】:
我知道可以使用 realpath() 函数获取文件的绝对路径。但是,根据手册页的 BUGS 部分,它的实现存在一些问题。详情如下:
错误
避免使用此功能。它被设计破坏了,因为(除非使用非标准的resolved_path == NULL 功能)无法确定输出缓冲区resolved_path 的合适大小。根据 POSIX,大小 PATH_MAX 的缓冲区就足够了,但 PATH_MAX 不必是已定义的常量,可能必须使用 pathconf(3) 获得。并且询问 pathconf(3) 并没有真正帮助,因为一方面 POSIX 警告 pathconf(3) 的结果可能很大并且不适合分配内存。另一方面,pathconf(3) 可能返回 -1 表示 PATH_MAX 不受限制。
libc4 和 libc5 实现包含缓冲区溢出(在 libc-5.4.13 中修复)。因此,像 mount(8) 这样的 set-user-ID 程序需要一个私有版本。
那么,问题是获取文件的绝对路径的最佳做法是什么?
【问题讨论】:
-
没有。它们不是同一件事。我想知道如何获取普通文件的绝对路径而不是可执行文件的路径。