CATOPEN(3)

НАЗВАНИЕ
catopen, catclose - открывает/закрывает каталог сообщений

СИНТАКСИС
#include <nl_types.h>

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

ОПИСАНИЕ
Функция catopen() открывает каталог сообщений и возвращает дескриптор каталога. Дескриптор считается действительным до вызова catclose() или exec(). Если для реализации дескрипторов каталогов используется файловый дескриптор, то для него будет установлен флаг FD_CLOSEXEC.

Аргумент name указывает на имя каталога сообщений, который необходимо открыть. Если name указывает на абсолютный (т.е., содержащий символ '/') путь, то name определяет адрес каталога сообщений. Иначе переменная окружения NLSPATH используется вместе с name и заменяется на %N (см. locale(7)). Не определено, будет ли использоваться NLSPATH, если процесс имеет права root. Если NLSPATH не содержится в окружении или если каталог сообщений не может быть открыт ни в одном из путей, указанных в этой переменной, то используется путь, зависящий от реализации. Он может зависеть от категории LC_MESSAGES локали в случае, когда аргумент flag имеет значение NL_CAT_LOCALE или от переменной окружения LANG в случае, когда аргумент flag равен 0. Изменение категории локали LC_MESSAGES может привести к признанию дескрипторов открытых каталогов недействительными.

Аргумент flag функции catopen используется для определения источника для используемого языка. Если он установлен в NL_CAT_LOCALE, то будет использована текущая категория LC_MESSAGES локали. В противном случае будет использована переменная окружения LANG.

Функция catclose() закрывает каталог сообщений, указанный в catalog. Все последующие обращения к каталогу, определяемому catalog, считаются неверными.

ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
Функция catopen() возвращает дескриптор каталога сообщений типа nl_catd. В случае ошибки она возвращает (nl_catd) -1 и устанавливает значение errno для сообщения об ошибке. Возможные коды ошибок те же, что и для функции open().

Функция catclose() возвращает 0 или -1 в случае ошибки.

ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ

LC_MESSAGES
    Может задавать категорию LC_MESSAGES локали и, таким образом, определять используемый язык в случае, когда flag установлен в NL_CAT_LOCALE.

LANG
    Язык, используемый в случае, когда flag равен 0.

ЗАМЕЧАНИЯ
Выше приведено описание в соответствие с POSIX 1003.1-2001. В glibc значение NL_CAT_LOCALE равно 1. (Сравните с MCLoadAll ниже.) Путь, используемый по умолчанию, варьируется, но обычно представляет собой различные подкаталоги /usr/share/locale.

ЗАМЕЧАНИЯ К LIBC4 И LIBC5
Эти функции появились в Linux начиная с libc 4.4.4c. В случае linux libc4 и libc5 дескриптор каталога nl_catd является файлом, отображаемым в память с помощью функции mmap(), а не дескриптором файла. Аргумент flag функции catopen() должен быть либо MCLoadBySet (=0) или MCLoadAll (=1). Первое значение указывает, что части каталога будут подгружаться по необходимости. Второе значение приводит к загрузке всего каталога в память при вызове catopen(). Путь поиска, используемый по умолчанию, варьируется, но обычно представляет собой различные подкаталоги /etc/locale и /usr/lib/locale.

СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX 1003.1-2001. В XPG 1987, Vol. 3 сказано: Аргумент flag функции catopen зарезервирован для будущего использования и должен быть равен 0. Источник констант MCLoadBySet и MCLoadAll неясен.

СМ. ТАКЖЕ
catgets(3), setlocale(3)