2015-01-09 69 views
5

我正在修复一些使用strerror(非线程安全)的多线程的Linux代码。我发现strerror_rstrerror_l都是线程安全的。由于strerror_r的不同定义(取决于_GNU_SOURCE它有不同的定义)我想使用新的strerror_l函数,但是我应该如何获取当前语言环境的locale_t对象?我没有使用iconv或任何东西,只是简单的libc,我不明白我如何获得“默认区域设置”对象(我不在乎打印错误的语言,我只想要一个人类可读的字符串。)如何在当前语言环境中使用strerror_l?

回答

0

如果传递 “” 到区域设置参数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); 
    } 
相关问题