Открыть конфигурационный файл
#include <cfgopen.h>int cfgopen( const char *path,unsigned flags,const char *historical,char *namebuf,int nblen );
NULL
для игнорирования опции.NULL
для игнорирования опции.0
для игнорирования опции.libc
Функция cfgopen() открывает конфигурационный файл, определяемый в path. Данная функция является оберткой open() и имеет возможность выполнять поиск в нескольких системных локациях на основе заданных характеристик.
Значение flags соответствует стандартным флагам open() и имеет те же ограничения. Значение flags создается путем побитового ИЛИ из значений из списка, определенного в заголовочном файле <cfgopen.h>
. Приложения должны устанавливать только один режим доступа к файлу для значения flag:
В значение flag можно включить любые комбинации следующих битов:
0644
, идентификатор пользователя устанавливается в эффективный идентификатор пользователя процесса, идентификатор группы устанавливается в эффективный идентификатор группы процесса или идентификатор группы родительской директории файла (смотрите chmod()). CFGFILE_EXCL
и CFGFILE_CREAT
установлены, и файл существует, cfgopen() завершается с ошибкой. Проверка существования и создания файла, если он не существует, является атомарной операцией по отношению к другим процессам, пытающимся выполнить те же операции с тем же именем файла. Установка CFGFILE_EXCL
без CFGFILE_CREAT
не имеет никакого эффекта. CFGFILE_WRONLY
или CFGFILE_RDWR
, длина файла усекается до нуля, а режим и владелец остаются неизменными. CFGFILE_TRUNC не имеет эффекта для FIFO или блочных или специальных символьных файлов или директорий. Использование CFGFILE_TRUNC
с CFGFILE_RDONLY
не имеет эффекта. Флаги условий поиска
Чтобы указать функции, где искать или создавать (в случае of CFGFILE_CREAT
) path, есть следующие биты, которые можно установить с помощью ИЛИ в значении flags. Если биты установлены, они задают следующий порядок поиска:
$HOME/.cfg/node_name/path
$HOME/.cfg/path
/etc/host_cfg/node_name/path
где node_name - значение, получаемое с помощью вызова confstr() для CS_HOSTNAME
.
Если директория /etc/host_cfg не существует в системе, следующие flags автоматически изменяются:
|
При создании или открытии файла для записи можно установить только один из описанных выше флагов расположения. Установите CFGFILE_NOFD
, если необходим только путь к файлу, а файловый дескриптор не нужен. Если директория пути не существует при создании файла, cfgopen() попытается создать путь.
Корректный файловый дескриптор, если CFGFILE_NOFD
не установлен, неотрицательное значение, если CFGFILE_NOFD
установлен, -1
в случае возникновения ошибки.
ЗОСРВ «Нейтрино»
Предыдущий раздел: Описание API системной библиотеки