Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго




Скачать 17.46 Mb.
НазваниеUnix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго
страница9/143
Дата конвертации11.01.2013
Размер17.46 Mb.
ТипДокументы
1   ...   5   6   7   8   9   10   11   12   ...   143
Глава 2. Стандарты и реализации UNIX

Приложения, строго следующие стандарту P0SIX, отличаются от просто POSIX-совмес-тимых приложений. Последние используют только интерфейсы, определяемые стан­дартом IEEE Standard 1003.1-2001. Приложение, строго следующее стандарту, - это POSIX-совместимое приложение, которое не полагается ни на какое не определенное в стандарте поведение, не использует никаких устаревающих интерфейсов и не требу­ет значений констант больших, чем минимумы, приведенные в табл. 2.8.

К сожалению, некоторые из этих неизменяемых минимальных значений слишком малы, чтобы найти практическое применение. Например, боль­шинство современных UNIX-систем предоставляют возможность открывать намного больше 20 файлов на процесс. Минимальный предел 255 для _P0SIX _РАТН_МАХ также слишком мал. Длина строки пути может превысить это зна­чение, что говорит о том, что мы не можем использовать константы _P0SIX_0P-EN_MAX и _P0SIX_PATH_MAX в качестве размеров массивов на этапе компиляции.

Каждому из 19 неизменяемых минимальных значений, приведенных в табл. 2.8, соответствует значение, зависящее от реализации, имя которого отличается отсутствием приставки _P0SIX__. Константы без приставки _P0SIX_ предназначены для хранения фактических значений, поддерживаемых кон­кретной реализацией. (Эти 19 констант, значения которых определяются реализацией, перечислены в пунктах 2-5 списка, приведенного выше: неиз­меняемое значение, значения, которые могут быть увеличены во время вы­полнения, значения, не изменяемые во время выполнения и изменяемые значения, связанные с размером строки пути.) Основная проблема состоит в том, что не все 19 значений, зависящих от реализации, обязательно будут определены в заголовочном файле .

Например, определение конкретного значения может не быть включено в за­головочный файл, если его фактическая величина для данного процесса зави­сит от количества памяти в системе. Если значения не определены в заголо­вочном файле, мы не сможем использовать их для задания границ массивов на этапе компиляции. Поэтому стандарт POSIX.l определяет функции sys-conf, pathconf и f pathconf, с помощью которых можно определить фактические значения пределов во время выполнения. Однако существует еще одна пробле­ма: некоторые из значений определены стандартом POSIX.l как «возможно неопределенные» (следовательно, бесконечные). Это означает, что на практи­ке значение не имеет верхней границы. Для ОС Linux, например, количество структур iovec, которые можно передать функциям readv или writev, ограни­чено только объемом доступной памяти. Поэтому предел I0V_MAX для Linux считается неопределенным. Мы еще вернемся к этой проблеме в разделе 2.5.5.

2.5.3. Пределы XSI

Стандарт XSI также определяет ряд констант, значения которых зависят от реализации. Они включают:

  1. Неизменяемые минимальные значения: десять констант, перечисленных в табл. 2.9.

  2. Числовые пределы: L0NG_BIT и W0RD_BIT.

2.5. Пределы

75

3. Значения, не изменяемые во время выполнения, возможно неопределен-* ные: ATEXIT.MAX, I0V.MAX и PAGE.SIZE.

Неизменяемые минимальные значения перечислены в табл. 2.9. Большая часть их имеет отношение к каталогам сообщений. Две последние констан­ты наглядно показывают ситуацию, когда минимумы, декларируемые стан­дартом POSIX.1, слишком малы (вероятно, для того, чтобы сделать возмож­ной реализацию POSIX-совместимых операционных систем для встраивае­мых устройств), поэтому стандартом Single UNIX Specification были добав­лены увеличенные минимальные значения для использования в XSI-совместимых системах.

Таблица 2.9. Неизменяемые минимальные значения из файла , определяемые стандартом XSI



Имя

Описание

Минимально допу-

Типовое







стимое значение

значение

NL.ARGMAX

Максимальное количество позициониро­ванных аргументов функций printf и scanf

9

9

NL_LANGMAX

Максимальный размер переменной окру­жения LANG в байтах

14

14

NL.MSGMAX

Максимальный номер сообщения

32 767

32 767

NLJMAX

Максимальное число байт при преобразо­вании символов «несколько-к-одному»

Не определено

1

NL_SETMAX

Максимальный номер набора сообщений

255

255

NLJTEXTMAX

Максимальный размер строки сообщения

_P0SIX2_LINE_MAX

2 048

NZERO

Приоритет процесса по умолчанию

20

20

JCOPEN.IOV _MAX

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

readv или writev

16

16

-XOPEN NAME _MAX

Максимальная длина имени файла в бай­тах ,

255

255

_X0PEN PATH _MAX

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

1024

1024

2.5.4. Функции sysconf, pathconf и fpathconf

ы пеРечислили различные минимальные значения, которые должны под­держиваться реализацией, но как мы узнаем фактические пределы, которые ПоДДерживает конкретная система? Как мы уже упоминали ранее, некото­рые из этих пределов могут быть определены на этапе компиляции, другие -0 время исполнения. Мы также говорили, что некоторые из них являются е Изменяемыми в данной системе, тогда как другие, связанные с файлами и каталогами, могут изменяться. На этапе выполнения значения преде-в можно получить с помощью одной из следующих функций.

76 Глава 2. Стандарты и реализации UNIX

#include

long sysconf(int name)\

long pathconf(const char * pathname, int name)\

long fpathconf(int filedes, int name)\

Все три возвращают значение соответствующего предела в случае успеха, -1 в случае ошибки (см. ниже)

Различие между двумя последними функциями состоит в том, что первая из них получает в качестве аргумента строку пути к файлу, а вторая - фай­ловый дескриптор.

В табл. 2.10 перечисляются значения аргумента пате, которые можно пере­дать функции sysconf для идентификации пределов времени выполнения. Эта функция использует константы, имена которых начинаются с префикса _SC_. В табл. 2.11 перечисляются значения аргумента пате для функций pathconf и f pathconf. Эти функции используют для идентификации пределов времени выполнения константы, имена которых начинаются с префикса _РС_.

Таблица 2.10. Пределы и идентификаторы для аргумента пате функции sysconf



Имя предела

Описание

Аргумент name

ARG_MAX АТЕХ1Т_МАХ

CHILD_MAX

Количество так­тов системных часов в секунду

COLL_WEIGHTS_MAX

HOST_NAME_MAX

I0V_MAX

LINE.MAX

L0GIN_NAME_MAX NGR0UPSJ1AX

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

Максимальное количество функций, которые могут быть зарегистрированы с помощью функции atexit

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

Количество тактов системных часов в секунду

Максимальное количество весовых коэффици­ентов для одного элемента категории LC_COLLATE в файле региональных настроек

Максимальная длина имени сетевого узла, воз­вращаемого функцией gethostname

Максимальное количество структур iovec, ко­торое можно передать функциям readv и writev

Максимальная длина строки ввода, принимае­мой утилитами

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

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

_SC_ARG_MAX

_SC_ATEXIT_MAX

_SC_CHILD_MAX _SC_CLK_TCK

_SC_COLL_WEIGHTS_MAX

_SC_HOST_NAME_MAX

_SC_I0V_MAX

_SC_LINE_MAX

_SC_LOGIN_NAME_MAX _SC_NGR0UPS_MAX

2.5. Пределы

77



Имя предела

Описание

Аргумент пате

OPEN_MAX

PAGESIZE

PAGE.SIZE

RE_DUP_MAX

STREAM_MAX

SYMLOOP_MAX

TTY_NAME_MAX

TZNAME_MAX

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

Системный размер страницы памяти в байтах

Системный размер страницы памяти в байтах

Максимальное количество повторяющихся вхождений для основного регулярного выра­жения, принимаемого функциями гедехес и гедсотр, при использовании интервальной нотации \{т, п\}

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

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

Максимальная длина имени терминального устройства, включая завершающий нулевой символ

Количество байт в имени временной зоны

_SC_OPEN_MAX

_SC_PAGESIZE

_SC_PAGE_SIZE

_SC_RE_DUP_MAX

_SC_STREAM_MAX

_SC_SYML00P_MAX _SC_TTY_NAME_MAX

_SC_TZNAME_MAX

Таблица 2.11. Пределы и идентификаторы для аргумента пате функций pathconf и fpathconf



Имя предела

Описание

Аргумент пате

FILESIZEBITS

LINK_MAX

MAX_CAN0N

MAX_INPUT

NAME_MAX

pATH_MAX

PIPE_BUF

SYMLINK_MAX

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

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

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

Количество байт, доступное во входной очереди терминала

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

(за исключением завершающего нулевого символа)

Максимальная длина строки пути к файлу, включая завершающий нулевой символ

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

Количество байт в символической ссылке

_PC_FILESIZEBITS

_PC_LINK_MAX

_PC_MAX_CANON

_PC_MAX_INPUT

_PC_NAME_MAX

_PC_PATH_MAX

_PC_PIPE„BUF

_PC_SYMLINK_MAX

78

Глава 2. Стандарты и реализации UNIX

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

  1. Все три функции возвращают значение -1 и код ошибки EINVAL в перемен­ной еггпо, если аргумент name содержит имя неподдерживаемого предела. В третьей колонке табл. 2.10 и табл. 2.11 даны имена пределов, которые будут использоваться на протяжении всей книги.

  2. Для некоторых пределов могут возвращаться либо определенные числовые значения (>0), либо признак неопределенности - возвращаемое значение равно -1, но при этом значение еггпо не изменяется.

  3. Значение предела _SC__CLK_TCK представляет собой количество тактов сис­темных часов в секунду; эта величина используется при работе со значе­ниями, возвращаемыми функцией times (раздел 8.16).

Ниже перечислены ограничения, накладываемые на аргумент pathname функции pathconf и аргумент fileldes функции fpathconf. Если какое-либо из этих ограничений не будет соблюдено, это может привести к непредска­зуемым результатам.

  1. Файл, к которому относятся параметры _PC_MAX_CANON и _PC_MAX_INPUT, дол­жен быть файлом терминального устройства.

  2. Файл, к которому относится параметр _PC_LINK_MAX, должен быть либо файлом, либо каталогом. Если файл является каталогом, то возвращае­мое значение применимо только к самому каталогу, но не к файлам, на­ходящимся в нем.

  3. Файл, к которому относятся параметры _PC_FILESIZEBITS и _PC_NAME_MAX, должен быть каталогом. Возвращаемое значение относится к именам файлов этого каталога.

  4. Файл, к которому относится параметр _РС_РАТН_МАХ, должен быть катало­гом. Возвращаемое значение представляет собой максимальную длину от­носительного пути, когда заданный каталог является рабочим каталогом. (К сожалению, эта величина не отражает фактическую максимальную длину абсолютного пути, которую мы в действительности хотим узнать. Мы еще вернемся к этой проблеме в разделе 2.5.5.)

  5. Файл, к которому относится параметр _PC_PIPE_BUF, должен быть неиме­нованным каналом, именованным каналом или каталогом. В первых двух случаях возвращаемое значение относится к самим каналам. В слу­чае каталога ограничение будет относиться к любым именованным кана­лам, созданным в этом каталоге.

  6. Файл, к которому относится параметр _PC_SYMLINK_MAX, должен быть ката­логом. Возвращаемое значение - максимальная длина строки, которую может хранить символическая ссылка в этом каталоге.

2.5. Пределы

79

Пример

Программа на языке awk( 1), представленная в листинге 2.1, генерирует про­грамму на языке С, которая в свою очередь выводит значения всех иденти­фикаторов функций pathconf и sysconf.

Листинг 2.1. Генерация программы на языке С, которая выводит значения всех конфигурационных ограничений

BEGIN {

printf("«include \"apue.h\"\n")

printf("#include \n")

printf("«include \n")

printf("\n")

printf("static void pr_sysconf(char *, int);\n")

printf("static void pr_pathconf(char *, char *, int);\n")

printf("\n")

printf("int\n")

printf("main(int argc, char *argv[])\n")

printf("{\n")

printf("\tif (argc != 2)\n")

printf("\t\terr_quit(\"Иcпoльзoвaниe: a.out <каталог>\");\п\п")

FS="\t+"

while (getline <"sysconf.sym" > 0) {

printf("#ifdef %s\n", $1)

printf("\tprintf(\"%s определен как %%d\\n\", %s+0);\n", $1, $1)

printf("#else\n")

printf(M\tprintf(\"MfleHTH(|MKaTop %s не найден\\п\");\п", $1)

printf("#endif\n")

printf("#ifdef %s\n", $2)

printf("\tpr_sysconf(\"%s =\", %s);\n", $1, $2)

printf("#else\n")

printf("\tprintf(\"MAeH^HKaTop %s не найден\\п\");\п", $2)

printf("#endif\n") }

close("syscpnf.sym") while (getline <"pathconf.sym" > 0) {

printf("#ifdef %s\n", $1)

printf("\tprintf(\"%s определен как %%d\\n\", %s+0);\n", $1, $1)

printf("#else\n")

printf("\tprintf(\"nfleHTH0MKaTop %s не найден\\п\");\п", $1)

printf("#endif\n")

printf("#ifdef %s\n", $2)

printf("\tpr_pathconf(\"%s =\", argv[1], %s);\n", $1, $2)

printf("#else\n")

printf("\tprintf(\"MfleH^MKaTop %s не найден\\п\");\п", $2)

printf("#endif\n") }

close("pathconf.sym")

exit } END {

80

1   ...   5   6   7   8   9   10   11   12   ...   143

Похожие:

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивене Д. 80 Сознавание: исследуем, экспериментируем, упражняемся/ Пер с англ. А. Пилюгина
Разработка серийного оформления художника В. Щербакова Серия основана в 1999 году

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Д. Деловые культуры в международном бизнесе. От столкновения к взаимопониманию / Льюис Ричард Д.; пер с англ. Т. А. Нестика
Европа: вчера, сегодня, завтра / ран, Ин-т Европы; отв ред., авт предисл. Н. П. Шмелев. – М.: Экономика, 2002. – 823с

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Докинз. Эгоистичный ген
Ричард Докинз профессор Оксфордского университета, автор таких известных книг, как "Эгоистический ген", "Слепой часовщик", "Расширенный...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconСтивен Кинг После заката Стивен Кинг После заката Посвящается Хайди Питлор
Он, бесформенный, присвоил чужую форму. Как такое могло случиться, Остин? Нет, как такое может быть? И почему тогда солнце не померкнет,...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Флорида, «Креативный класс: люди, которые меняют будущее». М
Ричард Флорида, «Креативный класс: люди, которые меняют будущее». М.: Классика-xxi, 2005. (Richard Florida, “The Rise of The Creative...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconРичард Фарсон Менеджмент абсурда. Парадоксы лидерства Публикуется по: © "София", 2001 Перевод с англ. © А. Левицкий Об
Роджерсом (одним из этих проектов был получивший академическую премию документальный фильм "Путешествие в себя"). Ричард Фарсон получил...

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconThe Roles of Intermediaries in Cluster Development: The Thai Experiences from High-Tech and mid-tech manufacturing, knowledge-intensive services, to

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconHigh School/High Tech Program Guide

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconКультура Социогуманитарные исследования Издание второе, дополненное
Борисов С. Б. Человек. Текст. Культура. Социогуманитарные исследования. Издание второе, дополненное. – Шадринск, 2007 – 556 с

Unix профессиональное программирование Второе издание У. Ричард Стивене, Стивен а раго 2007 Серия «High tech» У. Ричард Стивене, Стивен А. Раго iconЕстественно-математические науки. Техника Барр, С. Россыпи головоломок [Текст] / Стивен Барр; пер с англ. Ю. Н. Сударева. М. Мир, 1987. 415 с
Барр, С. Россыпи головоломок [Текст] / Стивен Барр; пер с англ. Ю. Н. Сударева. М. Мир, 1987. 415 с


Разместите кнопку на своём сайте:
lib.convdocs.org


База данных защищена авторским правом ©lib.convdocs.org 2012
обратиться к администрации
lib.convdocs.org
Главная страница