我正在修复一些Linux代码,它使用strerror (不是线程安全)进行多线程处理。我发现strerror_r和strerror_l都是线程安全的。由于strerror_r的定义不同(取决于_GNU_SOURCE,定义不同),我想使用较新的strerror_l函数,但是如何获得当前区域设置的locale_t对象呢?我不使用iconv或任何东西,只是普通的libc,我不知道如何获得“默认的locale”对象(我不关心错误是用什么语言打印的,我只是想要一个人类可读的字符串)。
发布于 2015-01-15 15:29:42
如果将"“传递给locale参数,newlocale将将区域设置对象分配给当前的本机locale1。
1
static  locale_t locale;
bool MyStrerrorInit(void)
{
    locale = newlocale(LC_CTYPE_MASK|LC_NUMERIC_MASK|LC_TIME_MASK|LC_COLLATE_MASK|
                       LC_MONETARY_MASK|LC_MESSAGES_MASK,"",(locale_t)0);
    if (locale == (locale_t)0) {
       return false;
    }
    return true;
}
char * MyStrerror(int error)
{
    return strerror_l(error, locale);
}发布于 2021-09-18 13:47:36
你可以用uselocale
strerror_l(errno, uselocale((locate_t)0));https://stackoverflow.com/questions/27858505
复制相似问题