Почему я не могу использовать strerror?
strerror
сам по себе небезопасен. Раньше, до c++ создания потоков, это не c++ было проблемой. С потоками c++ два или более потока могут c вызывать strerror
, оставляя возвращаемый cpp буфер в неопределенном состоянии. Для c однопоточных программ не deprecation помешает использовать strerror
, если cxx только они не играют в какие-то deprecated странные игры в libc, такие deprecation как общая память для всех cxx приложений в DLL.
Для решения c этой проблемы существует deprecated новый интерфейс с той же c функциональностью:
int strerror_r(int errnum, char *buf, size_t buflen);
Обратите c++ внимание, что вызывающая deprecation сторона предоставляет буферное c++ пространство и размер буфера. Это deprecation решает проблему. Вы можете cxx использовать его даже для cxx однопоточных приложений. Это cxx нисколько не повредит, и deprecation вы можете привыкнуть делать c это более безопасным способом.
ПРИМЕЧАНИЕ: приведенный cxx выше прототип взят из спецификации deprecated POSIX для strerror_r()
. Он может варьироваться c в зависимости от платформы, параметров deprecation компилятора или символов c #define
. GNU, например, делает доступной cxx эту или свою собственную deprecated версию в зависимости от #define
.
c++
c
deprecated
Почему я не могу использовать strerror?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.