|
Программирование >> Структура ядра и системные вызовы
Действие 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 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, задают лишь минимальные значения параметров конфигурации системы. Любую 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;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |