如何在Linux实现自定义的errno
问题引入
上个月我在知乎问了一个问题
如何用C实现一个简单的线程安全的errno?
然而因为项目的问题,最后不了了之了
回顾
再次回过头研究了这个问题,我还是对多线程了解的太少了。
原来在posix pthread中还有pthread_once
,pthread_create_key
这样神奇的函数
实现:
static pthread_key_t sdk_errno_map;
static pthread_once_t sdk_errno_once = PTHREAD_ONCE_INIT;
const char *sdk_errlist[] = {
"error_1", "error_2", "error_3", "error_4", "error_5"};
void sdk_init_errno()
{
pthread_key_create(&sdk_errno_map, NULL);
}
void sdk_set_errno(int error_number)
{
pthread_once(&sdk_errno_once, sdk_init_errno);
int *errno = pthread_getspecific(sdk_errno_map);
if (NULL == errno) {
errno = calloc(1, sizeof(int));
pthread_setspecific(sdk_errno_map, errno);
}
*er