Я предоставляю оболочку С++ для потокобезопасного strerror_r в следующем коде:
struct MyErrno {};
std::ostream& operator<<(std::stream& os, const MyErrno& err)
{
const int len = 128
char buf [len];
os << strerror_r(errno, buf, len);
return os;
}
Это просто простая оболочка, поэтому в коде C++ я могу сказать что-то вроде
<< MyErrno() << ..
и используйте потокобезопасную печать файла errno. Также кажется, что можно использовать 128, потому что на странице руководства говорится, что strerror_r
либо вернет указатель на неизменяемую статическую строку (предположительно с нулевым завершением), либо указатель на buf
после заполнения его нулевым терминатором независимо от размера... просто не уверен, что с этой простой оболочкой что-то не так (потенциально глючит)