Программирование >>  Структура ядра и системные вызовы 

1 2 [ 3 ] 4 5 6 ... 98


Действие

POSlX NO TRUNC

POSIX VDISABLE

Если определено значение -1, то все длинные путевые имена, переданные в API, усекаются до NAME MAX байтов; в противном случае выдается сообщение об ошибке. Если этот макрос в заголовке <unistd.h> не определен, пользователи должны с помощью функции pathconf или функции fpathconf (см. следующий раздел) проверить режим усечения путевого имени для каждого каталога

Значение этого макроса используется как запрещающий символ для специальных управляющих символов терминальных устройств ввода-вывода. Если определено значение - I, то запрещающего символа нет. Если этот макрос в заголовке <unistd.h> не определен, пользователи должны с помощью функции pathconf шк функции fpathconf (сы. следующий раздел) проверить наличие запрещающего символа для каждого файла терминального устройства

В приведенном ниже примере на экран выводятся определенные стандартом POSIX параметры конфигурации, поддерживаемые в любой UNIX-системе:

/* show test macros.C */ ♦define POSIX SOURCE ♦define POSIX C SOURCE ♦include <iostream.h> ♦include <unistd.h>

199309L

int mainO (

♦ifdef POSIX JOB CONTROL

cout System supports job control\n ; ♦else

cout System does not support job controlNnV; ♦endif )~l

♦ifdef POSIX SAVED IDS

cout System supports saved set-UID and saved set-GID\n ; ♦else

cout System does not support saved set-UID and saved

set-GID\n ;

♦endif

♦ifdef POSIX CHOWN RESTRICTED

cout chovm restricted option is:

TOSIX CHOWN RESTRICTED endl;

♦else

cout System does not support system-wide chown restricted option\n ; ♦endif

♦ifdef POSIX NO TRUNC

cout Pathname trucnation option is: ГОS]:x Ю TRUNC endl; ♦else

cout << System does not support system-wide pathname trucnation optionNn ;

♦endif

♦Ifdef POSIX VDISABLE

cout Disable character for terminal files is: POSIX VDISABLE endl;

♦else

cout System does not support POSIX VDISABLE\n ; ♦endif

return 0;

1.4.3. Проверка ограничений во время компиляции и во время выполнения

в стандартах POSIX.l и POSIX.lb определен набор ограничений, задающих предельные значения параметров конфигурации системы. Эти ограничения устанавливаются с помощью макросов в заголовке <limits.h>. Многие из них взяты из систем UNIX и имеют те же имена, что и их UNIX-эквива-ленты, но с префиксом POSIX . Например, в системах UNIX определена константа CHILD MAX, ограничивающая максимальное число порожденных процессов, которые процесс может создать в любой заданный момент времени. В POSIX.l этой константе соответствует константа POSIX CHILD MAX. Причина определения этих констант состоит в том, что, несмотря на наличие в большинстве UNIX-систем похожего набора констант, их значения в разных UNIX-системах существенно различаются. Константы, определенные в POSIX, задают минимальные значения параметров для всех соответствующих стандарту POSIX систем; в силу этого прикладные программисты при разработке программ закладывают в них свои ограничения на параметры конфигурации систем.

Ниже приведен перечень констант, определенных стандартом POSIX.l в заголовке <limits.h>.

Ограничение

Минимальное значение

Смысл

POSIX CHILD MAX

Максимальное число порожденных процессов, которые процесс может создать в любой момент времени

POSlX OPEN MAX

Максимальное число файлов, которые процесс может открыть одновременно

POSIX STREAM MAX

Максимальное число потоков ввода-вывода, которые процесс может открыть одновременно



Ограничение

Минимальное значение

Смысл

POSIX ARG MAX

4096

POSIX NGROUP MAX О

POSIX PATH MAX 255

POSIX NAME lVIAX 14

POSIX LINK MAX 8

POSIX PIPE BUF 512

POSIX MAX INPUT 255

POSIX MAX CANON 235

POSIX SSIZE MAX 32767

POSIXTZNAME MAX 3

Максимальный размер (в байтах) аргументов, которые могут быть переданы при вызове функции exec

Максимальное число дополнительных групп, которым может принадлежать процесс

Максимально допустимое число символов в путевом имени

Максимально допустимое число символов в имени файла

Максимальное число ссылок на файл

Максимальный размер блока данных, который может быть прочитан из канала или записан в канал в ходе одного обращения к нему

Максимальная емкость (в байтах) входного буфера терминала

Максимальное количество байтов в строке в каноническом режиме ввода*

Максимальное значение, которое может храниться в объекте типа ssizejt

Максимальное количество символов в названии часового пояса

Канонический режим ввода предусматривает наличие функций редактирования строки erase (удалить символ) и kill (удалить строку), а также ограничение вводимой строки символами EOL, EOF, NL. - Прим. ред.

Ниже перечислены константы, определенные в стандарте POSIX. lb.

Ограничение

Минимальное Смысл значение

POSIX AIO MAX

POSIX AIO LISTIO MAX 2

POSIX TIMER MAX

POSIX DELAYTIMER MAX 32

Максимально допустимое количество одновременных операций асинхронного ввода-вывода

Максимальный размер списка операций ввода-вывода, возвращаемого системным вызовом Ustio

Максимальное количество таймеров, которые могут одновременно использоваться процессом.

Максимально допустимое количество переполнений для каждого таймера

Ограничение

Минимальное Смысл значение

POSIX MQ OPEN MAX

Максимальное количество очередей сообщений, которые могут

быть одновременно доступны од-

ному процессу

POsix MQ PRIO MAX

Максимальное значение приоритета, который может быть назначен сообщению

POSIX RTSIG MAX

Максимальное количество сигналов реального времени, зарезервированных для прикладных программ

POSIX SIGQUEUE MAX

Максимальное количество сигналов реального времени, которые

процесс может поставить в оче-

редь в любой момент времени

POSIX SEM NSEMS MAX

Максимальное количество семафоров, которые могут одновременно использоваться процессом

POSIX SEM VALUE MAX

32767

Максимальное значение, которое может быть присвоено семафору

Следует отметить, что константы, определенные в стандартах POSIX, задают лишь минимальные значения параметров конфигурации системы. Любую POSIX-совместимую систему можно конфигурировать с более высокими значениями этих пределов. Более того, не все эти константы нужно указывать в заголовке <Iimits.h>, потому что некоторые из лимитов могут быть неопределенными или изменяться в зависимости от конкретного файла.

Чтобы определить фактически установленные ограничения конфигурации для всей системы или для отдельных ее объектов, можно запросить значения этих ограничений с помошью определенных стандартом POSIX. I функций sysconf, pathconf и fpathconf. Функция sysconf служит для запроса общесистемных ограничений конфигурации, которые установлены в данной системе; функции pathconf fpathconf используются для запроса ограничений конфигурации, связанных с файлами. Единственное различие этих функций состоит в том, что pathconf в качестве аргумента принимает путевое имя файла, тогда как fpathconf- дескриптор файла. Вот прототипы этих функций:

#include <unistd.h>

long sysconf ( const int limit name );

long pathconf ( const char* pathname, int flimit name );

long fpathconf { const int fdesc, int flimit name );



Значение аргумента limitjtame - макрос, определенный в заголовке <unistd.h>. Ниже перечислены возможные значения lmit name и данные, возвращаемые функцией sysconf.

- ---. J

Значение ограничения Возвращаемые данные

sc arg max

sc child max

sc open max

sc ngroups max

sc clk tx:k

sc job control

sc saved 1ds

SC VERS10N SC timers SC delayti mer MAX

sc rtsig max

sc mq open max

SC MQ PR[0 MAX

sc sem nsems max

sc sem value max

8СШ0иЕиЕ МАХ

SC AIO LISTIO MAX

sc aio max

Максимальный размер (в байтах) значений аргументов, которые могуг быть переданы в вызов API exec

Максимальное число порожденных процессов, которыми процесс может владеть одновременно

Максимальное число открытых файлов на один процесс

Максимальное число дополнительных групп на один процесс

Количество тактов системных часов в секунду Значение POSIX JOB CONTROL Значение POSIX SAVED IDS Значение POSIX VERSION Значение POSIX TIMERS

Максимальное количество переполнений на один таймер

Максимальное количество сигналов реального времени

Максимальное количество очередей сообщений на один процесс

Максимальное значение приоритета, который может быть назначен сообщению

Максимальное количество семафоров на один процесс

Максимальное значение, которое может быть присвоено семафору

Максимальное количество сигналов реального времени, которые процесс может поставить в очередь в любой момент времени

Максимальный размер списка операций ввода-вывода, возвращаемого системным вызовом listio

Максимально допустимое количество одновременных операций асинхронного ввода-вывода

Как видите, все макросы, используемые в качестве значения аргумента sysconf, имеют префикс SC . Аналогичным образом значение аргумента

flmitjiame - это макрос, определенный в заголовке <unistd h> Все эти константы имеют префикс РС . Ниже перечислены некоторые из них а также значения, которые функции pathconf и fpathconf возвращают дая указанного объекта. HciMctiui для

Значение ограничения Возвращаемые данные

PC CHOWN RESTRICTED PC NO TRUNC PC VDISABLE РС РАТН МАХ PC LINK MAX PC NAME MAX

PC PIPE BUF

PC MAX CANON PC MAX INPUT

Значение POSIX CHOWN RESTRICTED

Возвращает значение POSIX NO TRUNC

Возвращает значение POSIX VDISABLE

Максимальная длина путевого имени в байтах

Максимальное число ссылок на файл

Максимально допустимая длина имени файла в байтах

Максимальный размер блока данных, который может быть автоматически прочитан из канала или записан в канал

Максимальный размер (в байтах) строки в каноническом режиме ввода

Максимальная емкость (в байтах) входного буфера терминала

Эти переменные дублируют соответствующие переменные, определенные в больщинстве UNIX-систем (имена UNIX-переменных совпадают с POSIX-именами, за исключением префикса POSIX ). Указанные переменные можно использовать в программах, поскольку во время компиляции для них будут вьшолнены макроподстановки:

char pathname [ POSIX PATH MAX + 1 ]; for (int i=0; i< POSIX OPEN MAX; i++)

closed); закрыть все дескрипторы файлов

Использование функций sysconf, pathconf и fpathconf иллюстрируется на примере следующей программы testj:onfig. С:

♦define POSIX SOURCE

♦define POSIX C SOURCE 199309L

♦include <stdio.h>

♦include <iostream.h>

♦include <unistd.h>

int mainO (

int res;

if ((res=sysconf( SC OPEN MAX))==-!) perror ( sysconf );

else

cout OPEN MAX: res endl;



1 2 [ 3 ] 4 5 6 ... 98

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика