CATOPEN(3)

名前
catopen, catclose - メッセージカタログのオープン/クローズ

書式
#include <nl_types.h>

nl_catd catopen(const char *name, int flag); int catclose(nl_catd catalog);

説明
関数 catopen() はメッセージカタログをオープンし、カタログディスクリプタを返す。 このディスクリプタは catclose() または execve(2) が呼び出されるまで有効である。 カタログディスクリプタを実装するために ファイルディスクリプタを使用すると、 FD_CLOEXEC フラグが設定される。

引き数 name はオープンするメッセージカタログの名前を指定する。 name が絶対パスで指定されている場合 (すなわち '/' を含んでいる場合)、 name はメッセージカタログへのパス名である。 それ以外の場合、環境変数 NLSPATH が name とともに使用され %N を置き換える (locale(7) 参照)。 プロセスが root 権限を持っているときに NLSPATH が使われるかどうかは指定されていない。 NLSPATH 環境変数が存在しないか、 NLSPATH で指定されたパスの中の どのパスにおいてもメッセージカタログをオープンできない場合、 実装で定義されているパスが使われる。 後者のデフォルトパスは、 flag 引き数が NL_CAT_LOCALE の場合には LC_MESSAGES のロケール設定に依存し、 flag 引き数が 0 の場合には LANG 環境変数に依存する。 ロケールの LC_MESSAGES を変更すると、 オープンされているカタログディスクリプタが無効になるかもしれない。

catopen() の flag 引き数は、使用される言語のソースを示すために使われる。 NL_CAT_LOCALE に設定されると、 LC_MESSAGES の現在のロケール設定が使われる。 それ以外の場合は LANG 環境変数が使われる。

関数 catclose() は catalog で指定されたメッセージカタログをクローズする。 これは、以降の catalog で指定されるメッセージカタログへの全ての参照を無効にする。

返り値
関数 catopen() が成功すると、 nl_catd 型のメッセージカタログディスクリプタを返す。 失敗した場合は (nl_catdv) -1 を返し、 errno を設定してエラーを示す。 ここで起こり得るエラーの値には、 open(2) の呼び出しの際に起こり得る全てのエラーの値が含まれる。

関数 catclose() は、成功した場合 0 を、失敗した場合 -1 を返す。

環境変数

LC_MESSAGES
    LC_MESSAGES ロケール設定のソースになることも可能なので、 flag が NL_CAT_LOCALE に設定されている場合は、使用する言語を決定するのに使われる。

LANG
    flag が 0 の場合、使用する言語を決定する。

準拠
POSIX.1-2001. 定数 MCLoadBySet と MCLoadAll に対応するソースが何であるのかがはっきりしていない (下記参照)。

注意
以上は POSIX.1-2001 における説明である。 glibc では NL_CAT_LOCALE の値は 1 である (以下の MCLoadAll と比較のこと)。 デフォルトのパスは場合によって様々であるが、通常は /usr/share/locale 以下のファイルが調べられる。

  Linux における注意
これらの関数は libc.so.4.4.4c 以降で使用可能である。 linux の libc4 と libc5 においては、カタログディスクリプタ nl_catd は mmap(2) されたメモリの領域であってファイルディスクリプタではない。 catopen() の flag は、 MCLoadBySet (=0) か MCLoadAll (=1) のどちらかである。 前者の場合、カタログのセットは必要時にロードされる。 後者の場合、最初の catopen() の呼び出しのときに全てのカタログがメモリ内にロードされる。 デフォルトのパスは場合によって様々であるが、通常は /etc/locale と /usr/share/locale 以下のファイルが調べられる。

関連項目
catgets(3), setlocale(3)

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