Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all
名前
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; char *p; 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 (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 プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。