DUPLOCALE

Section: Linux Programmer's Manual (3)
Updated: 2020-11-01
Index JM Home Page
 

名前

duplocale - ロケールオブジェクトを複製する  

書式

#include <locale.h>

locale_t duplocale(locale_t locobj);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

duplocale():

glibc 2.10 以降:
_XOPEN_SOURCE >= 700
glibc 2.10 より前:
_GNU_SOURCE
 

説明

duplocale() 関数は locobj が参照するロケールオブジェクトの複製を作成する。

locobj が LC_GLOBAL_LOCALE の場合、 duplocale() は setlocale(3) により判定されたグローバルロケールのコピーを含むロケールオブジェクトを作成する。  

返り値

成功すると、 duplocale() は新しいロケールオブジェクトのハンドルを返す。 エラーの場合、 (locale_t) 0 を返し、 errno にエラーの原因を示す値を設定する。  

エラー

ENOMEM
ロケールオブジェクトの複製を作成するのに十分なメモリーがない。
 

バージョン

duplocale() 関数は GNU C ライブラリのバージョン 2.3 で初めて登場した。  

準拠

POSIX.1-2008.  

注意

ロケールの複製は以下のことを行う際に役立つ。
*
ロケールオブジェクトのコピーを作成し、 (newlocale(3) を使って) いくつかのカテゴリーだけを変更する。
*
現在のロケールに対するハンドルを取得する。 このハンドルはロケールハンドルを受け取る他の関数 (toupper_l(3) など) で使用できる。 これを行うには、 以下の呼び出しが返した値を duplocale() に渡せばよい。

    loc = uselocale((locale_t) 0);
上記の uselocale(3) の呼び出しは値 LC_GLOBAL_LOCALE を返すことがあり、 この値を toupper_l(3) などの関数に渡した場合の動作は不定なので、 この方法は必要である。 duplocale() を呼び出すことで、確実に LC_GLOBAL_LOCALE が使用可能なロケールオブジェクトに変換することができる。 下記の「例」を参照。

duplocale() で作成された各ロケールオブジェクトは freelocale(3) を使って解放すべきである。  

例

以下のプログラムでは、 toupper_l(3) に渡す現在のロケールのハンドルを取得するのに uselocale(3) と duplocale() を使用する。 このプログラムはコマンドライン引数として文字列を一つ取る。この文字列は、大文字に変換され、標準出力に表示される。 以下は使用例である。

$ ./a.out abc ABC  

プログラムのソース

#define _XOPEN_SOURCE 700 #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <locale.h>

#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \
                        } while (0)

int main(int argc, char *argv[]) {
    locale_t loc, nloc;


    if (argc != 2) {
        fprintf(stderr, "Usage: %s string\n", argv[0]);
        exit(EXIT_FAILURE);
    }


    /* この一連の処理は必要である。 uselocale() は toupper_l() の
       引数として渡すことができない値 LC_GLOBAL_LOCALE を返す
       可能性があるからである。 */


    loc = uselocale((locale_t) 0);
    if (loc == (locale_t) 0)
        errExit("uselocale");


    nloc = duplocale(loc);
    if (nloc == (locale_t) 0)
        errExit("duplocale");


    for (char *p = argv[1]; *p; p++)
        putchar(toupper_l(*p, nloc));


    printf("\n");


    freelocale(nloc);


    exit(EXIT_SUCCESS); }  

関連項目

freelocale(3), newlocale(3), setlocale(3), uselocale(3), locale(5), locale(7)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。

関連キーワード

ロケール   locale   ハンドル   nloc   duplocale   複製   uselocale   errExit   exit   argv   コピー   define   argc   toupper   検査   マクロ   要件   macros   判定   成功   原因   メモリー   ライブラリ   登場   カテゴリー

Linux マニュアル 一覧

関連するコマンド・関数

uselocale.3   setlocale.3   tolower.3   tolower_l.3   toupper.3   toupper_l.3
 

Index

名前
書式
説明
返り値
エラー
バージョン
準拠
注意
例
プログラムのソース
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:08 GMT, October 11, 2026