Unix realpath()可移植性问题是否过时?
调用UnixUnix 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支持是后来添加的,所以它没有得到普遍实现,因此可移植程序不能依赖它 现在
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)
- Mac OS X 10.5(2011年支持结束)
- FreeBSD 6.4(2010年支持结束)
- OpenBSD 4.4(2009年支持结束)
- Solaris 10(2024年支持结束)