Самую общую информацию о характеристиках хоста позволяют
получить служебная программа uname
uname [-snrvma]
и одноименная функция (см. листинг 10.1).
#include <sys/utsname.h> int uname (struct utsname *name);
Функция uname( помещает информацию, идентифицирующую
опрашиваемую систему, в структуру типа utsname, которая должна
содержать по крайней мере следующие поля.
char sysname []; /* Имя реализации ОС */
char nodename []; /* Имя хоста как узла */
/* коммуникационной сети */
char release []; /* Номер выпуска ОС */
char version []; /* Номер версии ОС */
char machine []; /* Название аппаратной */
/* конфигурации */
Размер массивов не специфицируется, оговаривается только, что хранящиеся в них цепочки символов завершаются нулевым байтом.
Аналогичные данные выдает на стандартный вывод служебная программа uname, опции которой соответствуют полям структуры utsname
( -m – выдать название аппаратной конфигурации, -n – -s, -r и -v – имя реализации ОС, номера выпуска и версии, соответственно).
Опция -a предписывает выдавать все; без опций выдается имя реализации.
Результат выполнения команды
uname -a
может выглядеть так, как показано в листинге 10.2. Правда, здесь
фигурирует нестандартная составляющая, выдаваемая по опции -p, – тип
процессора (в данном случае unknown ).
Linux t94 2.4.18-3 #1 Thu Apr 18 07:37:53 EDT 2002 i686 unknown
Функция gethostname() (см. листинг 10.3) возвращает в массиве
name длины namelen namelen – HOST_NAME_MAX + 1 (см. следующий раздел).
#include <unistd.h> int gethostname (char *name, size_t namelen);
Значения
Основная часть статической конфигурационной информации
сосредоточена в упоминавшемся ранее заголовочном файле <unistd.h>.
Кратко опишем наиболее важные характеристики.
_POSIX_VERSION
Поддерживаемая версия системного интерфейса для языка C
стандарта POSIX. Для POSIX-2001 значение этой константы должно
равняться 200112L. Предыдущей версии (1996 года) соответствует значение 199506L.
_POSIX2_VERSION
Поддерживаемая версия интерфейса к системным сервисам на
уровне командного языка и служебных программ; для реализаций,
соответствующих стандарту POSIX-2001, значение этой константы должно
равняться 200112L.
В листинге 10.4 показан пример использования значения _POSIX_VERSION для
#if _POSIX_VERSION >= 200112L /* Используем новую функцию, применимую к */ /* большим файлам */ off_t fpos = ftello (fp); #else /* Либо реализация поддерживает только */ /* старую версию стандарта POSIX, либо */ /* константа _POSIX_VERSION вообще не */ /* определена. */ /* Используем старую, традиционную функцию */ /* опроса текущей позиции в файле */ long fpos = ftell (fp); #endif
Следующая группа констант описывает поддерживаемые
необязательные возможности стандарта POSIX-2001. Значения этих констант
могут равняться -1 (необязательная возможность не поддерживается), 0 (в
системе присутствуют все необходимые описания, но наличие поддержки
нужно опросить во время выполнения) или быть положительными (возможность
полностью поддерживается реализацией).
_POSIX_CHOWN_RESTRICTED
Функции chown() и fchown() могут вызываться для смены владельца
только процессами, обладающими соответствующими привилегиями.
_POSIX_IPV6
Реализация поддерживает IPv6. Положительное значение этой
константы должно равняться 200112L.
_POSIX_JOB_CONTROL
Реализация поддерживает управление заданиями.
_POSIX_NO_TRUNC
Компоненты маршрутных имен, имеющие длину более NAME_MAX,
вызывают сообщения об ошибках.
_POSIX_REGEXP
Реализация поддерживает обработку регулярных выражений.
_POSIX_SAVED_IDS
Каждый процесс имеет сохраненный
_POSIX_SHELL
Реализация поддерживает стандартный командный интерпретатор.
_POSIX_VDISABLE
Значением этой константы должен быть символ, отключающий
обработку соответствующего _POSIX_VDISABLE ) сделать значением элемента
массива c_cc[].
_POSIX2_C_BIND
Реализация поддерживает системный интерфейс для языка C.
Значение этой константы должно равняться 200112L.
_POSIX2_CHAR_TERM
Реализация поддерживает по крайней мере один тип терминалов.
_POSIX2_LOCALEDEF
Реализация поддерживает создание 200112L.
_POSIX_V6_ILP32_OFF32
Реализация предоставляет int, long, off_t и такими же указателями.
_POSIX_V6_ILP32_OFFBIG
Реализация предоставляет int, long и такими же указателями; размер значений типа off_t составляет не менее 64 бит.
_POSIX_V6_LP64_OFF64
Реализация предоставляет int и 64-битными указателями и типами long и off_t.
_POSIX_V6_LPBIG_OFFBIG
Реализация предоставляет int и не менее чем 64-битными
указателями и значениями типов long и off_t.
_POSIX_ASYNC_IO
Поддерживается асинхронный ввод/вывод.
_POSIX_PRIO_IO
Поддерживается приоритетный ввод/вывод.
_POSIX_SYNC_IO
Поддерживается синхронизированный ввод/вывод.
Три константы задают номера файловых дескрипторов для
стандартных ввода ( STDIN_FILENO со значением 0 ), вывода ( STDOUT_FILENO – 1 ) и протокола ( STDERR_FILENO – 2 ). Их нужно не анализировать, а
использовать вместо явных числовых значений.
Разного рода лимиты на количество и размеры заданы в заголовочном
файле <limits.h>. Стандарт определяет
Мобильные приложения не должны полагаться на какие-то
конкретные значения лимитов и требовать больше ресурсов, чем
предусмотрено
Перечислим наиболее важные из числа
ARG_MAX (_POSIX_ARG_MAX = 4096)
Максимально допустимая длина аргумента функций семейства exec*() (включая данные окружения).
ATEXIT_MAX (32)
Максимально допустимое число функций, которые можно
зарегистрировать посредством atexit().
CHARCLASS_NAME_MAX
(_POSIX2_CHARCLASS_NAME_MAX = 14)
Максимально допустимое число байт в имени
CHILD_MAX (_POSIX_CHILD_MAX = 25)
Максимально допустимое число одновременно существующих процессов с одним реальным идентификатором пользователя.
HOST_NAME_MAX (_POSIX_HOST_NAME_MAX = 255)
Максимально допустимая длина
LINE_MAX (_POSIX2_LINE_MAX = 2048)
Максимально допустимое число байт в строке текстового файла.
LOGIN_NAME_MAX (_POSIX_LOGIN_NAME_MAX = 9)
Максимально допустимая длина входного имени (с учетом
завершающего нулевого байта). Таким образом, по соображениям мобильности
NGROUPS_MAX (_POSIX_NGROUPS_MAX = 8)
Максимально допустимое число
OPEN_MAX (_POSIX_OPEN_MAX = 20)
Максимально допустимое число файлов, одновременно открытых в одном процессе.
PAGESIZE, PAGE_SIZE (1)
Размер страницы оперативной памяти в байтах.
RE_DUP_MAX (_POSIX2_RE_DUP_MAX = 255)
Максимально допустимое число повторных вхождений регулярного
выражения при использовании интервальной нотации \{m,n\}.
STREAM_MAX (_POSIX_STREAM_MAX = 8)
Максимально допустимое число потоков, одновременно открытых в одном процессе.
SYMLOOP_MAX (_POSIX_SYMLOOP_MAX = 8)
Максимально допустимое число символьных ссылок, которые могут быть обработаны в случае разрешения маршрутных имен файлов при отсутствии циклов.
TTY_NAME_MAX (_POSIX_TTY_NAME_MAX = 9)
Максимально допустимая длина имени
TZNAME_MAX (_POSIX_TZNAME_MAX = 6)
Максимально допустимая длина имени часового пояса.
Следующие
FILESIZEBITS (32)
Минимальное число бит, необходимое для представления размера обычного файла в виде целочисленного значения со знаком.
LINK_MAX (_POSIX_LINK_MAX = 8)
Максимально допустимое число жестких ссылок на файл.
MAX_CANON (_POSIX_MAX_CANON = 255)
Максимально допустимое число байт во входной строке при каноническом вводе с терминала.
MAX_INPUT (_POSIX_MAX_INPUT = 255)
Максимально допустимое число байт во входной терминальной очереди.
NAME_MAX (_POSIX_NAME_MAX = 14)
Максимально допустимая длина простого имени файла (без завершающего нулевого байта).
PATH_MAX (_POSIX_PATH_MAX = 256)
Максимально допустимая длина маршрутного имени файла (с учетом завершающего нулевого байта).
PIPE_BUF (_POSIX_PIPE_BUF = 512)
Максимально допустимое число байт, которое можно неделимым образом записать в канал.
SYMLINK_MAX (_POSIX_SYMLINK_MAX = 255)
Максимально допустимое число байт в символьной ссылке.
Следующие
CHAR_BIT (8)
Число бит в значении типа char.
CHAR_MAX
Максимальное значение типа char. Совпадает с UCHAR_MAX или SCHAR_MAX.
CHAR_MIN
Минимальное значение типа char ( SCHAR_MIN или 0 ).
INT_MAX (2147483647).
Максимальное значение типа int.
LONG_BIT (32)
Число бит в значении типа long.
LONG_MAX (2147483647)
Максимальное значение типа long.
SCHAR_MAX (127)
Максимальное значение типа signed char.
SHRT_MAX (32767)
Максимальное значение типа short.
SSIZE_MAX (_POSIX_SSIZE_MAX = 32767)
Максимальное значение типа ssize_t.
UCHAR_MAX (255)
Максимальное значение типа unsigned char.
UINT_MAX (4294967295)
Максимальное значение типа unsigned int.
ULONG_MAX (4294967295)
Максимальное значение типа unsigned long.
USHRT_MAX (65535)
Максимальное значение типа unsigned short.
WORD_BIT (16)
Число бит в слове или значении типа int.
INT_MIN (-2147483647)
Минимальное значение типа int.
LONG_MIN (-2147483647)
Минимальное значение типа long.
SCHAR_MIN (-128)
Минимальное значение типа signed char.
SHRT_MIN (-32767)
Минимальное значение типа short.
LLONG_MIN (-9223372036854775807)
Минимальное значение типа long long.
LLONG_MAX (9223372036854775807)
Максимальное значение типа long long.
ULLONG_MAX (18446744073709551615)
Максимальное значение типа unsigned long long.
Некоторые полезные
BUFSIZ
Размер буферов ввода/вывода.
L_ctermid
Максимальный размер символьного массива для хранения имени
ctermid().
L_tmpnam
Максимальный размер символьного массива для хранения имени
временного файла – результата функции tmpnam().
FILENAME_MAX
Максимально допустимое число байт в имени открываемого файла.
TMP_MAX (25)
Максимально допустимое число обращений к функции tmpnam(),
при котором гарантируется уникальность генерируемых имен.
Упоминавшаяся ранее служебная программа getconf
getconf [-v спецификация]
конфигурационный_параметр
getconf [-v спецификация]
конфигурационный_параметр
маршрутное_имя
а также функции sysconf(), confstr(), fpathconf() и pathconf()
(см. листинг 10.5) предназначены для опроса значений
системных параметров во время выполнения. Первая из перечисленных
функций опрашивает лимитирующие
#include <unistd.h>
long sysconf (int name);
size_t confstr (int name, char *buf,
size_t len);
long fpathconf (int fildes, int name);
long pathconf (const char *path, int name);
Утилита getconf выдает на стандартный вывод confstr(), нужно удалять префикс _CS_.
Опция
-v спецификация
задает опрашиваемую конфигурацию и версию. По умолчанию используется подразумеваемое для данной реализации окружение.
Например, если определен _POSIX_V6_ILP32_OFF32, то команда вида
getconf -v _POSIX_V6_ILP32_OFF32 ...
опрашивает значения, соответствующие 32-битной
Приведем несколько примеров использования служебной
программы getconf. Команда
getconf LINE_MAX может выдать 2048, а команда getconf PATH_MAX /tmp
в используемой автором версии ОС Linux выдает 4096.
Обращение со служебной программой getconf требует известной
аккуратности. Нужно помнить, что
if unm=$(getconf "$@"); then if [ "$unm" = "undefined" ]; then echo Значение "$@" не определено else echo Значение "$@" равно $unm. fi else echo Ошибка при выполнении getconf fi
Функция sysconf() опрашивает описанные выше <unistd.h> и <limits.h> ; аргумент name задает имя
опрашиваемого параметра.
Функция confstr() возвращает значения для следующих <unistd.h> и заданных аргументом name:
_CS_PATH
Значение переменой окружения PATH, позволяющее найти все
стандартные служебные программы.
_CS_POSIX_V6_ILP32_OFF32_CFLAGS
_CS_POSIX_V6_ILP32_OFF32_LDFLAGS
_CS_POSIX_V6_ILP32_OFF32_LIBS
Опции и библиотеки для компиляции и редактирования внешних связей приложений, использующих 32-битную программную модель.
_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
_CS_POSIX_V6_ILP32_OFFBIG_LIBS
_CS_POSIX_V6_LP64_OFF64_CFLAGS
_CS_POSIX_V6_LP64_OFF64_LDFLAGS
_CS_POSIX_V6_LP64_OFF64_LIBS
_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
_CS_POSIX_V6_LPBIG_OFFBIG_LIBS
Опции и библиотеки для других программных моделей.
_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS
Список имен поддерживаемых реализацией программных моделей,
в которых размеры типов blksize_t, cc_t, mode_t, nfds_t, pid_t, ptrdiff_t, size_t, speed_t, ssize_t, suseconds_t, tcflag_t, useconds_t, wchar_t и wint_t не больше, чем long.
confstr() в буфере buf длины len (при необходимости значение
обрезается). Результатом вызова confstr() является минимальный размер
буфера, где можно разместить опрашиваемое значение вместе с
завершающим нулевым байтом. Если в качестве len задан нуль, в буфер ничего
не помещается, но требуемый размер выдается. В листинге 10.7 показана
программа, динамически резервирующая буфер необходимого размера и
получающая в нем стандартное значение списка поиска.
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main (void) {
size_t buf_len;
char *buf;
if ((buf_len = confstr (_CS_PATH,
(char *) NULL, (size_t) 0)) > 0) {
if ((buf = (char *) malloc (buf_len)) != NULL)
{
(void) confstr (_CS_PATH, buf, buf_len);
printf ("Standard PATH: %s\n", buf);
}
}
return 0;
}
В результате выполнения этой программы может быть выдано:
Standard PATH: /bin:/usr/bin
Функции fpathconf() и pathconf() служат для опроса текущих
значений лимитирующих fildes функции fpathconf() ) или маршрутными именами (аргумент
path функции pathconf() ).
Аргумент name задает имя опрашиваемого параметра. Выше мы уже
описывали подобные FILESIZEBITS, LINK_MAX, MAX_CANON, MAX_INPUT, NAME_MAX, PATH_MAX, PIPE_BUF, SYMLINK_MAX, _POSIX_CHOWN_RESTRICTED, _POSIX_NO_TRUNC, _POSIX_VDISABLE, _POSIX_ASYNC_IO, _POSIX_PRIO_IO, _POSIX_SYNC_IO. Допустимые значения для name получаются путем
приписывания к имени параметра префикса _PC_ (например, _PC_PATH_MAX ) или замены префикса _POSIX_ на _PC_ (например, _PC_SYNC_IO ).
Отметим, что во время работы приложения результаты, возвращаемые
функциями fpathconf() и pathconf(), могут меняться, поскольку существует вероятность монтирования и/или размонтирования файловых
систем, поддерживающих различные необязательные возможности и
разные лимиты. В этом смысле результаты функций sysconf() и confstr()
более стабильны.
Самую общую информацию о характеристиках хоста позволяют
получить служебная программа uname
uname [-snrvma]
и одноименная функция (см. листинг 10.1).
#include <sys/utsname.h> int uname (struct utsname *name);
Функция uname( помещает информацию, идентифицирующую
опрашиваемую систему, в структуру типа utsname, которая должна
содержать по крайней мере следующие поля.
char sysname []; /* Имя реализации ОС */
char nodename []; /* Имя хоста как узла */
/* коммуникационной сети */
char release []; /* Номер выпуска ОС */
char version []; /* Номер версии ОС */
char machine []; /* Название аппаратной */
/* конфигурации */
Размер массивов не специфицируется, оговаривается только, что хранящиеся в них цепочки символов завершаются нулевым байтом.
Аналогичные данные выдает на стандартный вывод служебная программа uname, опции которой соответствуют полям структуры utsname
( -m – выдать название аппаратной конфигурации, -n – -s, -r и -v – имя реализации ОС, номера выпуска и версии, соответственно).
Опция -a предписывает выдавать все; без опций выдается имя реализации.
Результат выполнения команды
uname -a
может выглядеть так, как показано в листинге 10.2. Правда, здесь
фигурирует нестандартная составляющая, выдаваемая по опции -p, – тип
процессора (в данном случае unknown ).
Linux t94 2.4.18-3 #1 Thu Apr 18 07:37:53 EDT 2002 i686 unknown
Функция gethostname() (см. листинг 10.3) возвращает в массиве
name длины namelen namelen – HOST_NAME_MAX + 1 (см. следующий раздел).
#include <unistd.h> int gethostname (char *name, size_t namelen);
Значения
Основная часть статической конфигурационной информации
сосредоточена в упоминавшемся ранее заголовочном файле <unistd.h>.
Кратко опишем наиболее важные характеристики.
_POSIX_VERSION
Поддерживаемая версия системного интерфейса для языка C
стандарта POSIX. Для POSIX-2001 значение этой константы должно
равняться 200112L. Предыдущей версии (1996 года) соответствует значение 199506L.
_POSIX2_VERSION
Поддерживаемая версия интерфейса к системным сервисам на
уровне командного языка и служебных программ; для реализаций,
соответствующих стандарту POSIX-2001, значение этой константы должно
равняться 200112L.
В листинге 10.4 показан пример использования значения _POSIX_VERSION для
#if _POSIX_VERSION >= 200112L /* Используем новую функцию, применимую к */ /* большим файлам */ off_t fpos = ftello (fp); #else /* Либо реализация поддерживает только */ /* старую версию стандарта POSIX, либо */ /* константа _POSIX_VERSION вообще не */ /* определена. */ /* Используем старую, традиционную функцию */ /* опроса текущей позиции в файле */ long fpos = ftell (fp); #endif
Следующая группа констант описывает поддерживаемые
необязательные возможности стандарта POSIX-2001. Значения этих констант
могут равняться -1 (необязательная возможность не поддерживается), 0 (в
системе присутствуют все необходимые описания, но наличие поддержки
нужно опросить во время выполнения) или быть положительными (возможность
полностью поддерживается реализацией).
_POSIX_CHOWN_RESTRICTED
Функции chown() и fchown() могут вызываться для смены владельца
только процессами, обладающими соответствующими привилегиями.
_POSIX_IPV6
Реализация поддерживает IPv6. Положительное значение этой
константы должно равняться 200112L.
_POSIX_JOB_CONTROL
Реализация поддерживает управление заданиями.
_POSIX_NO_TRUNC
Компоненты маршрутных имен, имеющие длину более NAME_MAX,
вызывают сообщения об ошибках.
_POSIX_REGEXP
Реализация поддерживает обработку регулярных выражений.
_POSIX_SAVED_IDS
Каждый процесс имеет сохраненный
_POSIX_SHELL
Реализация поддерживает стандартный командный интерпретатор.
_POSIX_VDISABLE
Значением этой константы должен быть символ, отключающий
обработку соответствующего _POSIX_VDISABLE ) сделать значением элемента
массива c_cc[].
_POSIX2_C_BIND
Реализация поддерживает системный интерфейс для языка C.
Значение этой константы должно равняться 200112L.
_POSIX2_CHAR_TERM
Реализация поддерживает по крайней мере один тип терминалов.
_POSIX2_LOCALEDEF
Реализация поддерживает создание 200112L.
_POSIX_V6_ILP32_OFF32
Реализация предоставляет int, long, off_t и такими же указателями.
_POSIX_V6_ILP32_OFFBIG
Реализация предоставляет int, long и такими же указателями; размер значений типа off_t составляет не менее 64 бит.
_POSIX_V6_LP64_OFF64
Реализация предоставляет int и 64-битными указателями и типами long и off_t.
_POSIX_V6_LPBIG_OFFBIG
Реализация предоставляет int и не менее чем 64-битными
указателями и значениями типов long и off_t.
_POSIX_ASYNC_IO
Поддерживается асинхронный ввод/вывод.
_POSIX_PRIO_IO
Поддерживается приоритетный ввод/вывод.
_POSIX_SYNC_IO
Поддерживается синхронизированный ввод/вывод.
Три константы задают номера файловых дескрипторов для
стандартных ввода ( STDIN_FILENO со значением 0 ), вывода ( STDOUT_FILENO – 1 ) и протокола ( STDERR_FILENO – 2 ). Их нужно не анализировать, а
использовать вместо явных числовых значений.
Разного рода лимиты на количество и размеры заданы в заголовочном
файле <limits.h>. Стандарт определяет
Мобильные приложения не должны полагаться на какие-то
конкретные значения лимитов и требовать больше ресурсов, чем
предусмотрено
Перечислим наиболее важные из числа
ARG_MAX (_POSIX_ARG_MAX = 4096)
Максимально допустимая длина аргумента функций семейства exec*() (включая данные окружения).
ATEXIT_MAX (32)
Максимально допустимое число функций, которые можно
зарегистрировать посредством atexit().
CHARCLASS_NAME_MAX
(_POSIX2_CHARCLASS_NAME_MAX = 14)
Максимально допустимое число байт в имени
CHILD_MAX (_POSIX_CHILD_MAX = 25)
Максимально допустимое число одновременно существующих процессов с одним реальным идентификатором пользователя.
HOST_NAME_MAX (_POSIX_HOST_NAME_MAX = 255)
Максимально допустимая длина
LINE_MAX (_POSIX2_LINE_MAX = 2048)
Максимально допустимое число байт в строке текстового файла.
LOGIN_NAME_MAX (_POSIX_LOGIN_NAME_MAX = 9)
Максимально допустимая длина входного имени (с учетом
завершающего нулевого байта). Таким образом, по соображениям мобильности
NGROUPS_MAX (_POSIX_NGROUPS_MAX = 8)
Максимально допустимое число
OPEN_MAX (_POSIX_OPEN_MAX = 20)
Максимально допустимое число файлов, одновременно открытых в одном процессе.
PAGESIZE, PAGE_SIZE (1)
Размер страницы оперативной памяти в байтах.
RE_DUP_MAX (_POSIX2_RE_DUP_MAX = 255)
Максимально допустимое число повторных вхождений регулярного
выражения при использовании интервальной нотации \{m,n\}.
STREAM_MAX (_POSIX_STREAM_MAX = 8)
Максимально допустимое число потоков, одновременно открытых в одном процессе.
SYMLOOP_MAX (_POSIX_SYMLOOP_MAX = 8)
Максимально допустимое число символьных ссылок, которые могут быть обработаны в случае разрешения маршрутных имен файлов при отсутствии циклов.
TTY_NAME_MAX (_POSIX_TTY_NAME_MAX = 9)
Максимально допустимая длина имени
TZNAME_MAX (_POSIX_TZNAME_MAX = 6)
Максимально допустимая длина имени часового пояса.
Следующие
FILESIZEBITS (32)
Минимальное число бит, необходимое для представления размера обычного файла в виде целочисленного значения со знаком.
LINK_MAX (_POSIX_LINK_MAX = 8)
Максимально допустимое число жестких ссылок на файл.
MAX_CANON (_POSIX_MAX_CANON = 255)
Максимально допустимое число байт во входной строке при каноническом вводе с терминала.
MAX_INPUT (_POSIX_MAX_INPUT = 255)
Максимально допустимое число байт во входной терминальной очереди.
NAME_MAX (_POSIX_NAME_MAX = 14)
Максимально допустимая длина простого имени файла (без завершающего нулевого байта).
PATH_MAX (_POSIX_PATH_MAX = 256)
Максимально допустимая длина маршрутного имени файла (с учетом завершающего нулевого байта).
PIPE_BUF (_POSIX_PIPE_BUF = 512)
Максимально допустимое число байт, которое можно неделимым образом записать в канал.
SYMLINK_MAX (_POSIX_SYMLINK_MAX = 255)
Максимально допустимое число байт в символьной ссылке.
Следующие
CHAR_BIT (8)
Число бит в значении типа char.
CHAR_MAX
Максимальное значение типа char. Совпадает с UCHAR_MAX или SCHAR_MAX.
CHAR_MIN
Минимальное значение типа char ( SCHAR_MIN или 0 ).
INT_MAX (2147483647).
Максимальное значение типа int.
LONG_BIT (32)
Число бит в значении типа long.
LONG_MAX (2147483647)
Максимальное значение типа long.
SCHAR_MAX (127)
Максимальное значение типа signed char.
SHRT_MAX (32767)
Максимальное значение типа short.
SSIZE_MAX (_POSIX_SSIZE_MAX = 32767)
Максимальное значение типа ssize_t.
UCHAR_MAX (255)
Максимальное значение типа unsigned char.
UINT_MAX (4294967295)
Максимальное значение типа unsigned int.
ULONG_MAX (4294967295)
Максимальное значение типа unsigned long.
USHRT_MAX (65535)
Максимальное значение типа unsigned short.
WORD_BIT (16)
Число бит в слове или значении типа int.
INT_MIN (-2147483647)
Минимальное значение типа int.
LONG_MIN (-2147483647)
Минимальное значение типа long.
SCHAR_MIN (-128)
Минимальное значение типа signed char.
SHRT_MIN (-32767)
Минимальное значение типа short.
LLONG_MIN (-9223372036854775807)
Минимальное значение типа long long.
LLONG_MAX (9223372036854775807)
Максимальное значение типа long long.
ULLONG_MAX (18446744073709551615)
Максимальное значение типа unsigned long long.
Некоторые полезные
BUFSIZ
Размер буферов ввода/вывода.
L_ctermid
Максимальный размер символьного массива для хранения имени
ctermid().
L_tmpnam
Максимальный размер символьного массива для хранения имени
временного файла – результата функции tmpnam().
FILENAME_MAX
Максимально допустимое число байт в имени открываемого файла.
TMP_MAX (25)
Максимально допустимое число обращений к функции tmpnam(),
при котором гарантируется уникальность генерируемых имен.
Упоминавшаяся ранее служебная программа getconf
getconf [-v спецификация]
конфигурационный_параметр
getconf [-v спецификация]
конфигурационный_параметр
маршрутное_имя
а также функции sysconf(), confstr(), fpathconf() и pathconf()
(см. листинг 10.5) предназначены для опроса значений
системных параметров во время выполнения. Первая из перечисленных
функций опрашивает лимитирующие
#include <unistd.h>
long sysconf (int name);
size_t confstr (int name, char *buf,
size_t len);
long fpathconf (int fildes, int name);
long pathconf (const char *path, int name);
Утилита getconf выдает на стандартный вывод confstr(), нужно удалять префикс _CS_.
Опция
-v спецификация
задает опрашиваемую конфигурацию и версию. По умолчанию используется подразумеваемое для данной реализации окружение.
Например, если определен _POSIX_V6_ILP32_OFF32, то команда вида
getconf -v _POSIX_V6_ILP32_OFF32 ...
опрашивает значения, соответствующие 32-битной
Приведем несколько примеров использования служебной
программы getconf. Команда
getconf LINE_MAX может выдать 2048, а команда getconf PATH_MAX /tmp
в используемой автором версии ОС Linux выдает 4096.
Обращение со служебной программой getconf требует известной
аккуратности. Нужно помнить, что
if unm=$(getconf "$@"); then if [ "$unm" = "undefined" ]; then echo Значение "$@" не определено else echo Значение "$@" равно $unm. fi else echo Ошибка при выполнении getconf fi
Функция sysconf() опрашивает описанные выше <unistd.h> и <limits.h> ; аргумент name задает имя
опрашиваемого параметра.
Функция confstr() возвращает значения для следующих <unistd.h> и заданных аргументом name:
_CS_PATH
Значение переменой окружения PATH, позволяющее найти все
стандартные служебные программы.
_CS_POSIX_V6_ILP32_OFF32_CFLAGS
_CS_POSIX_V6_ILP32_OFF32_LDFLAGS
_CS_POSIX_V6_ILP32_OFF32_LIBS
Опции и библиотеки для компиляции и редактирования внешних связей приложений, использующих 32-битную программную модель.
_CS_POSIX_V6_ILP32_OFFBIG_CFLAGS
_CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS
_CS_POSIX_V6_ILP32_OFFBIG_LIBS
_CS_POSIX_V6_LP64_OFF64_CFLAGS
_CS_POSIX_V6_LP64_OFF64_LDFLAGS
_CS_POSIX_V6_LP64_OFF64_LIBS
_CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS
_CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS
_CS_POSIX_V6_LPBIG_OFFBIG_LIBS
Опции и библиотеки для других программных моделей.
_CS_POSIX_V6_WIDTH_RESTRICTED_ENVS
Список имен поддерживаемых реализацией программных моделей,
в которых размеры типов blksize_t, cc_t, mode_t, nfds_t, pid_t, ptrdiff_t, size_t, speed_t, ssize_t, suseconds_t, tcflag_t, useconds_t, wchar_t и wint_t не больше, чем long.
confstr() в буфере buf длины len (при необходимости значение
обрезается). Результатом вызова confstr() является минимальный размер
буфера, где можно разместить опрашиваемое значение вместе с
завершающим нулевым байтом. Если в качестве len задан нуль, в буфер ничего
не помещается, но требуемый размер выдается. В листинге 10.7 показана
программа, динамически резервирующая буфер необходимого размера и
получающая в нем стандартное значение списка поиска.
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main (void) {
size_t buf_len;
char *buf;
if ((buf_len = confstr (_CS_PATH,
(char *) NULL, (size_t) 0)) > 0) {
if ((buf = (char *) malloc (buf_len)) != NULL)
{
(void) confstr (_CS_PATH, buf, buf_len);
printf ("Standard PATH: %s\n", buf);
}
}
return 0;
}
В результате выполнения этой программы может быть выдано:
Standard PATH: /bin:/usr/bin
Функции fpathconf() и pathconf() служат для опроса текущих
значений лимитирующих fildes функции fpathconf() ) или маршрутными именами (аргумент
path функции pathconf() ).
Аргумент name задает имя опрашиваемого параметра. Выше мы уже
описывали подобные FILESIZEBITS, LINK_MAX, MAX_CANON, MAX_INPUT, NAME_MAX, PATH_MAX, PIPE_BUF, SYMLINK_MAX, _POSIX_CHOWN_RESTRICTED, _POSIX_NO_TRUNC, _POSIX_VDISABLE, _POSIX_ASYNC_IO, _POSIX_PRIO_IO, _POSIX_SYNC_IO. Допустимые значения для name получаются путем
приписывания к имени параметра префикса _PC_ (например, _PC_PATH_MAX ) или замены префикса _POSIX_ на _PC_ (например, _PC_SYNC_IO ).
Отметим, что во время работы приложения результаты, возвращаемые
функциями fpathconf() и pathconf(), могут меняться, поскольку существует вероятность монтирования и/или размонтирования файловых
систем, поддерживающих различные необязательные возможности и
разные лимиты. В этом смысле результаты функций sysconf() и confstr()
более стабильны.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.