【问题标题】:Are realpath() portability concerns obsolete?realpath() 可移植性问题过时了吗?
【发布时间】: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


    【解决方案1】:

    realpath(path, NULL) 适用于至少以下系统的最新版本:

    • 达尔文
    • 蜻蜓BSD
    • FreeBSD
    • 俳句
    • Linux/glibc
    • Linux/musl
    • 迷你剧
    • NetBSD
    • OpenBSD
    • Solaris (OmniOS)

    【讨论】:

      【解决方案2】:

      根据Gnulib documentation,Gnulib 开发人员最后一次看到这个问题是在

      • Mac OS X 10.5(2011 年终止支持),
      • FreeBSD 6.4(2010 年终止支持),
      • OpenBSD 4.4(2009 年终止支持),
      • Solaris 10(支持结束2024 年)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-16
        相关资源
        最近更新 更多