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.65 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。