C语言 如何将strerror_l与当前区域设置一起使用



我正在修复一些使用strerror(非线程安全)进行多线程处理的 Linux 代码。我发现strerror_rstrerror_l都是线程安全的。由于strerror_r的定义不同(取决于_GNU_SOURCE定义不同),我想使用较新的strerror_l函数,但是我应该如何获取当前语言环境的locale_t对象?我没有使用 iconv 或任何东西,只是普通的 libc,而且我不明白如何获取"默认语言环境"对象(我不在乎错误以什么语言打印,我只想要一个人类可读的字符串。

如果将 " 传递给 locale 参数 newlocale 会将一个语言环境对象集分配给当前的本机语言环境[1]

[1]http://pubs.opengroup.org/onlinepubs/9699919799/functions/newlocale.html

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);
}
您可以使用

POSIX uselocale

strerror_l(errno, uselocale((locate_t)0));

最新更新