【发布时间】:2020-03-22 17:35:50
【问题描述】:
调用 Unix 的 realpath() 函数的传统方式是 realpath(pathname, buf),其中 buf 是用户提供的缓冲区,有空间用于容纳 PATH_MAX 字节。这是有问题的,因为PATH_MAX 对于大多数文件名来说是不必要的大,但可能小于实际的操作系统路径名长度限制。
后来添加了传递NULL 指针代替buf 的功能。在这种情况下,realpath() 将使用malloc() 动态分配正确大小的缓冲区。这使得该功能易于安全使用。由于NULL 支持是后来添加的,它没有被普遍实现,因此可移植程序不能依赖它。
POSIX Issue 7, 2018 edition 现在保证NULL 支持。 POSIX 的认可似乎意味着可移植性问题几乎消失了。是否有任何 Unix 系统正在积极使用(例如从过去十年开始),其中 realpath() 不支持提供 NULL 缓冲区?
【问题讨论】:
标签: unix posix portability realpath