DUPLOCALE(3) | Linux Programmer's Manual | DUPLOCALE(3) |
duplocale - ロケールオブジェクトを複製する
#include <locale.h>
locale_t duplocale(locale_t locobj);
duplocale():
duplocale() 関数は locobj が参照するロケールオブジェクトの複製を作成する。
locobj が LC_GLOBAL_LOCALE の場合、 duplocale() は setlocale(3) により判定されたグローバルロケールのコピーを含むロケールオブジェクトを作成する。
成功すると、 duplocale() は新しいロケールオブジェクトのハンドルを返す。 エラーの場合、 (locale_t) 0 を返し、 errno にエラーの原因を示す値を設定する。
duplocale() 関数は GNU C ライブラリのバージョン 2.3 で初めて登場した。
POSIX.1-2008.
ロケールの複製は以下のことを行う際に役立つ。
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/ に書かれている。
2020-11-01 | Linux |