Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix realpath()可移植性问题是否过时?_Unix_Posix_Portability_Realpath - Fatal编程技术网

Unix realpath()可移植性问题是否过时?

Unix realpath()可移植性问题是否过时?,unix,posix,portability,realpath,Unix,Posix,Portability,Realpath,调用Unixrealpath()函数的传统方法是realpath(pathname,buf)其中buf是一个用户提供的缓冲区,可以容纳PATH\u MAX字节。这是有问题的,因为对于大多数文件名来说,PATH_MAX不必要地大,但可能小于实际的OS路径名长度限制 后来添加了传递NULL指针代替buf的功能。在这种情况下,realpath()将使用malloc()动态分配适当大小的缓冲区。这使得该功能易于安全使用。由于NULL支持是后来添加的,所以它没有得到普遍实现,因此可移植程序不能依赖它 现在

调用Unix
realpath()
函数的传统方法是
realpath(pathname,buf)
其中
buf
是一个用户提供的缓冲区,可以容纳
PATH\u MAX
字节。这是有问题的,因为对于大多数文件名来说,
PATH_MAX
不必要地大,但可能小于实际的OS路径名长度限制

后来添加了传递
NULL
指针代替
buf
的功能。在这种情况下,
realpath()
将使用
malloc()
动态分配适当大小的缓冲区。这使得该功能易于安全使用。由于
NULL
支持是后来添加的,所以它没有得到普遍实现,因此可移植程序不能依赖它

现在保证
NULL
支持。POSIX的认可似乎意味着可移植性问题几乎消失了。是否有任何正在使用的Unix系统(例如,从过去十年开始),其中
realpath()
不支持提供
NULL
缓冲区?

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

  • 达尔文
  • 蜻蜓BSD
  • FreeBSD
  • 俳句
  • Linux/glibc
  • Linux/musl
  • 米尼克斯
  • NetBSD
  • OpenBSD
  • Solaris(OmniOS)
根据报告,Gnulib开发人员最后一次看到这个问题是在

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