basename_r / dirname_r в Linux - PullRequest
       20

basename_r / dirname_r в Linux

2 голосов
/ 09 сентября 2010

Некоторые функции POSIX не являются потокобезопасными.Примерами являются dirname и pathname.

Функция dirname () не обязательно должна быть реентерабельной.Функция, которая не требуется для повторного входа, не обязательно должна быть поточно-ориентированной.

На некоторых платформах существуют повторно используемые версии dirname и pathname: dirname_r и pathname_r.Насколько я выяснил, в Linux нет реентерабельной версии dirname и pathname.

  • Это правильно?
  • Какая альтернатива?

Ответы [ 2 ]

2 голосов
/ 09 сентября 2010

Это правильно?

Согласно справочной странице, да.

Какая альтернатива?

Сделайте это потокобезопасным самостоятельно, т.е. оберните вызовы в функцию, которая защищает basename / dirname и копирует результат в предоставленный буфер, удерживая мьютекс

1 голос
/ 09 сентября 2010

Мне не известны повторные версии dirname и basename в Linux.

Однако в разных нестандартных библиотеках существуют различные реентерабельные реализации обеих функций.

g_path_get_dirname и g_path_get_basename из glib, вероятно, обычно используются, и их реализация также не слишком зависит от остальной части библиотеки glib, так что это будет достаточно просто просто позаимствовать их реализацию, если вам не особенно хочется ссылаться на glib.

...