我在这样的代码中为线程安全的 strerror_r 提供了一个 c++ 包装器:
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
在用空终止符填充它之后返回一个指针,无论大小如何......只是不确定如果这个简单的包装器有问题(可能有问题)