10

strerrorマルチスレッドに使用される (スレッドセーフではない) Linux コードを修正しています。私はそれを見つけ、strerror_r両方strerror_lともスレッドセーフです。の定義が異なるためstrerror_r(定義_GNU_SOURCEが異なる場合)、新しい関数を使用したいのですが、現在のロケールのオブジェクトstrerror_lを取得するにはどうすればよいですか? locale_t私はiconv何も使用しておらず、単純なlibcだけであり、「デフォルトロケール」オブジェクトを取得する方法がわかりません(エラーがどの言語で出力されたかは気にしません。人間が読める文字列が欲しいだけです. )

4

2 に答える 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 に答える