strerror
マルチスレッドに使用される (スレッドセーフではない) Linux コードを修正しています。私はそれを見つけ、strerror_r
両方strerror_l
ともスレッドセーフです。の定義が異なるためstrerror_r
(定義_GNU_SOURCE
が異なる場合)、新しい関数を使用したいのですが、現在のロケールのオブジェクトstrerror_l
を取得するにはどうすればよいですか? locale_t
私はiconv
何も使用しておらず、単純なlibcだけであり、「デフォルトロケール」オブジェクトを取得する方法がわかりません(エラーがどの言語で出力されたかは気にしません。人間が読める文字列が欲しいだけです. )
質問する
1192 次
2 に答える
3
"" をロケール パラメータに渡すと、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);
}
于 2015-01-15T15:29:42.263 に答える