2015-01-09 1 views
5

멀티 쓰레딩을 위해 strerror (thread-safe가 아님)을 사용하는 일부 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); 
    } 
관련 문제