Традиционный способ вызова функции Unix realpath()
- realpath(pathname, buf)
, где buf
- предоставленный пользователем буфер с местом для PATH_MAX
байтов. Это проблематично c, поскольку PATH_MAX
неоправданно велико для большинства имен файлов и все же может быть меньше, чем фактический предел длины имени пути ОС.
Возможность передавать указатель NULL
вместо buf
позже был добавлен. В этом случае realpath()
будет динамически выделять буфер нужного размера, используя malloc()
. Это облегчает безопасное использование функции. Поскольку поддержка NULL
была более поздним дополнением, она не была реализована повсеместно, и поэтому переносимые программы не могли полагаться на нее.
POSIX, выпуск 7, выпуск 2018 года теперь гарантирует поддержку NULL
. Одобрение POSIX может показаться, что проблемы с переносимостью практически исчезли. Существуют ли какие-либо Unix системы в активном использовании (например, с прошлого десятилетия), где realpath()
не поддерживает предоставление буфера NULL
?