Если вы пишете многопоточное приложение, которое использует вызовы системы/библиотеки, которые используют errno для указания типа ошибки, существует ли безопасный способ использования errno? Если нет, есть ли другой способ указать тип ошибки, который произошел, а не только произошла ошибка?
Есть ли способ безопасно использовать errno в многопоточном приложении?
Ответ 1
Если ваша стандартная библиотека имеет многопоточность, то она, вероятно, имеет #define
, которая меняет errno
на вызов функции, который возвращает возвращаемое значение локальной ошибки. Однако, чтобы использовать это, вы обычно должны включать <errno.h>
, а не полагаться на объявление extern
.
Я нашел статью Thread-safety и POSIX.1, которая затрагивает этот самый вопрос.
Ответ 2
man errno
говорит:
errno определяется стандартом ISO C быть модифицируемым значением l типа int и не должно быть явно заявленному; errno может быть макросом. ERRNO является нито-локальным; установив его в один нить не влияет на ее значение в любой другой теме.