Некоторые функции POSIX не являются потокобезопасными.Примерами являются dirname и pathname.
Функция dirname () не обязательно должна быть реентерабельной.Функция, которая не требуется для повторного входа, не обязательно должна быть поточно-ориентированной.
На некоторых платформах существуют повторно используемые версии dirname и pathname: dirname_r и pathname_r.Насколько я выяснил, в Linux нет реентерабельной версии dirname и pathname.
Это правильно?
Согласно справочной странице, да.
Какая альтернатива?
Сделайте это потокобезопасным самостоятельно, т.е. оберните вызовы в функцию, которая защищает basename / dirname и копирует результат в предоставленный буфер, удерживая мьютекс
Мне не известны повторные версии dirname и basename в Linux.
dirname
basename
Однако в разных нестандартных библиотеках существуют различные реентерабельные реализации обеих функций.
g_path_get_dirname и g_path_get_basename из glib, вероятно, обычно используются, и их реализация также не слишком зависит от остальной части библиотеки glib, так что это будет достаточно просто просто позаимствовать их реализацию, если вам не особенно хочется ссылаться на glib.