>> копирование ... которого не будет в си
> А в С был бы возврат указателя на локальный буфер в функции, Смотрим man 3 realpath
char *realpath(const char *path, char *resolved_path);
...
Получившееся имя сохраняется в виде строки (с null на конце) не длиннее чем PATH_MAX байт в
буфере, указанном в resolved_path. Конечный путь не содержит символьных ссылок и компонентов /./
или /../.
Если значение resolved_path равно NULL, то realpath() выделяет буфер размером PATH_MAX байт с
помощью malloc(3) для хранения полного пути и возвращает указатель на этот буфер. Вызывающий
должен освободить буфер с помощью free(3).
Т.е. в Си убрали бы char buf[8192] и вернули указатель на кучу.
Что бы в Си++ не заниматься крохоборством с магическими числами вместо PATH_MAX, можно было конструировать std::string из аллоцированого ф-цией realpath() результата?