confstr()

Получить строковую переменную, зависящую от конфигурации

Прототип:

#include <unistd.h>
size_t confstr( int name,
char *buf,
size_t len );

Аргументы:

name
Запрашиваемая системная переменная.
buf
Указатель на буфер, в котором функция сможет разместить значение системной переменной.
len
Длина буфера в байтах.

Библиотека:

libc

Описание:

Функция confstr() дает возможность приложению получать или устанавливать конфигурационно определяемые строковые значения. Поведение функции похоже на функцию sysconf(), но можно получить значение в виде строки, а не числового значения. По умолчанию функция запрашивает и возвращает значения в системе.

Аргумент name представляет запрашиваемую системную переменную. Значения определены в <confname.h>; допустимы как минимум следующие значения name:

_CS_ARCHITECTURE
Архитектура набора инструкция для CPU узла.
_CS_DOMAIN
Доменное имя.
_CS_HOSTNAME
Имя узла в сети.

Note: Имя узла может содержать только буквы, цифры и дефисы, при этом оно не должно начинаться или заканчиваться дефисом. Для дополнительной информации смотрите RFC 952.

_CS_HW_PROVIDER
Название производителя оборудования.
_CS_HW_SERIAL
Серийный номер, связанный с оборудованием.
_CS_LIBPATH
Значение, аналогичное переменной среды LD_LIBRARY_PATH, которое содержит пути к стандартным библиотекам.
_CS_LOCALE
Имя текущей локализации.
_CS_MACHINE
Тип оборудования данного узла.
_CS_PATH
Значение, аналогичное переменной окружения PATH, которое содержит пути к стандартным утилитам.
_CS_RELEASE
Текущий уровень выпуска операционной системы.
_CS_RESOLVE
Содержимое файла resolv.conf, исключая доменное имя.
_CS_SRPC_DOMAIN
Защищенный домен RPC.
_CS_SYSNAME
Имя операционной системы.
_CS_TIMEZONE
Значение временной зоны (стиль TZ)
_CS_VERSION
Номер версии текущей операционной системы.

Конфигурационно определяемое значение возвращается в буфер, на который указывает buf, и имеет длину не более len байтов, включая завершающий NULL.

Чтобы найти длину конфигурационно определяемого значения, нужно вызвать confstr() с buf, установленным в NULL, и len, установленным в 0.

Для установки конфигурационно определяемого значения:

  1. применить ИЛИ для имени значения (например, _CS_HOSTNAME) и _CS_SET.
  2. Установить новое значение строки, которое будет завершаться NULL.
  3. Установить значение длины в 0.

Возвращаемое значение:

≠0
Если успешно выполнено получение значения переменной, возвращается длина конфигурационно определяемого полученного значения
0
Возникла ошибка. Код ошибки записан в errno.

Можно сравнить возвращенное confstr() значение с len чтобы определить, было ли усечено возвращенное значение при получении (этого нельзя сделать при установке значения).

Коды ошибок:

EINVAL
Аргумент не является корректным конфигурационно определяемым значением.

Примеры:

Вывести информацию, аналогичную той, что возвращает функция uname():

#include <unistd.h>
#include <stdio.h>
#include <limits.h>
#define BUFF_SIZE (256 + 1)
int main( void )
{
char buff[BUFF_SIZE];
if ( confstr( _CS_SYSNAME, buff, BUFF_SIZE ) > 0 )
{
printf( "System name: %s\n", buff );
}
if ( confstr( _CS_HOSTNAME, buff, BUFF_SIZE ) > 0 )
{
printf( "Host name: %s\n", buff );
}
if ( confstr( _CS_RELEASE, buff, BUFF_SIZE ) > 0 )
{
printf( "Release: %s\n", buff );
}
if ( confstr( _CS_VERSION, buff, BUFF_SIZE ) > 0 )
{
printf( "Version: %s\n", buff );
}
if ( confstr( _CS_MACHINE, buff, BUFF_SIZE ) > 0 )
{
printf( "Machine: %s\n", buff );
}
if ( confstr( _CS_SET | _CS_HOSTNAME, "myhostname", 0 ) != 0 )
{
printf( "Hostname set to: %s\n", "myhostname" );
}
return (0);
}

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Предостережения:

Функция confstr() является частью проекта стандарта; ее интерфейс и/или поведение может поменяться в будущем.

Тематические ссылки:

pathconf(), sysconf()

getconf, setconf в Справочнике по Утилитам




Предыдущий раздел: Описание API системной библиотеки