catopen 子例程
用途
打开指定的消息目录。
库
标准 C 库 (libc.a)
语法
#include <nl_types.h>
描述
catopen 子例程打开指定的消息目录并返回用于从目录检索消息的目录描述符。 当 catgets 子例程访问消息目录时,目录描述符的内容是完整的。 nl_catd 数据类型用于目录描述符,并在 nl_types.h 文件中定义。
如果 CatalogName 参数引用的目录文件名包含前导/(斜杠) ,那么假定它是绝对路径名。 如果目录文件名不是绝对路径名,那么用户环境将确定要搜索的目录路径。 NLSPATH 环境变量定义目录搜索路径。 当使用此变量时,必须在 catopen 子例程之前调用 setlocale 子例程。
消息目录描述符在进程中保持有效,直到该进程或成功调用其中一个 exec 函数将其关闭为止。
可以在 NLSPATH 环境变量中使用两个特殊变量 %N 和 %L。 %N 变量将替换为打开消息目录的调用所引用的目录名称。 %L 变量将替换为 LC_MESSAGES 类别的值。
可以通过指定 LANG, LC_ALL或 LC_MESSAGES 环境变量的值来设置 LC_MESSAGES 类别的值。 LC_MESSAGES 类别的值指示要搜索消息目录的特定于语言环境的目录。 例如,如果 catopen 子例程指定具有名称的目录mycmd,环境变量设置如下:
NLSPATH=../%N:./%N:/system/nls/%L/%N:/system/nls/%N LANG=fr_FR然后应用程序按以下顺序搜索目录:
../mycmd
./mycmd
/system/nls/fr_FR/mycmd
/system/nls/mycmd如果在 NLSPATH 环境变量中的目录规范中省略 %N 变量,那么应用程序将假定它定义了目录名称并以此方式打开该目录名称,并且不会遍历搜索路径的其余部分。
如果未定义 NLSPATH 环境变量,那么 catopen 子例程将使用缺省路径。 请参阅 /etc/environment 文件以获取 NLSPATH 缺省路径。 如果 LC_MESSAGES 类别设置为缺省值 C ,并且 LC__FASTMSG 环境变量设置为true然后,对 catgets 子例程的后续调用将生成指向程序提供的缺省文本的指针。
catopen 子例程将它找到的第一个文件视为消息文件。 如果在 NLSPATH中指定非消息文件,例如 /usr/bin/ls,那么 catopen 会将 /usr/bin/ls 视为消息目录。 因此,找不到任何消息,并且将返回缺省消息。 如果在 NLSPATH中指定 /tmp ,那么将打开tmp 并搜索消息和显示缺省消息。
参数
| 项 | 描述 |
|---|---|
| CatalogName | 指定要打开的目录文件。 |
| PARAMETER | 确定要用于查找消息目录的环境变量。 如果 Parameter 参数的值为 0 ,请使用 LANG 环境变量而不考虑 LC_MESSAGES 类别来查找目录。 如果 Parameter 参数的值是 NL_CAT_LOCALE 宏,请使用 LC_MESSAGES 类别来查找目录。 |
返回值
catopen 子例程返回目录描述符。 如果 LC_MESSAGES 类别设置为缺省值 C ,并且 LC__FASTMSG 环境变量设置为true则catopen子程序返回值为-1。
如果LC_MESSAGES类别没有设置为默认值 C,但catopen子程序返回值为-1,则说明在创建nl_catd数据类型结构时发生了错误,或者CatalogName参数指向的目录名不存在。