Man page - duplocale(3)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

DUPLOCALE

名 前
書 式
説 明
返 り 値
エ ラ ー
バ ー ジ ョ ン
準 拠
注 意

プ ロ グ ラ ム の ソ ー ス
関 連 項 目
こ の 文 書 に つ い て

名 前

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/ に 書 か れ て い る 。