멀티 쓰레딩을 위해 strerror
(thread-safe가 아님)을 사용하는 일부 Linux 코드가 수정되었습니다. 나는 strerror_r
과 strerror_l
이 모두 스레드로부터 안전함을 발견했습니다. strerror_r
에 대한 다른 정의로 인해 (_GNU_SOURCE
에 따라 다르게 정의 됨) 새로운 strerror_l
함수를 사용하고 싶습니다. 그러나 현재 로케일에 대해 locale_t
객체를 얻으려면 어떻게해야합니까? 난 iconv
또는 아무것도, 그냥 일반 libc, 사용하지 않는 및 "기본 로캘"개체를 얻을 수있는 방법을 볼 수 없습니다 (어떤 언어 오류가 인쇄되지 상관 없어, 난 그냥 인간이 읽을 문자열을 원한다. .)현재 로케일에서 strerror_l을 사용하는 방법은 무엇입니까?
5
A
답변
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);
}