Скачиваний:
77
Добавлен:
12.05.2015
Размер:
177.66 Кб
Скачать

2.3. Пределы

Реализации определяют множество системных констант. Многие из них жестко зашиты в тексты программ, для получения значений других используются специальные методы. Благодаря стандартизации сейчас преобладают более универсальные методы определения значений констант и предусматриваемых реализациями пределов, что очень помогает в разработке переносимого программного обеспечения.

Существует три типа пределов:

  1. Пределы времени компиляции (например, наибольшее значение, которое может принимать переменная типа short int).

  2. Пределы времени выполнения, не связанные с файлами или каталогами (например, максимальная длина имени пользователя). Для получения значений пределов этого типа предусмотрена функция sysconf.

  3. Пределы времени выполнения, связанные с файлами или каталогами (например, максимальная длина имени файла). Для получения значений пределов этого типа предусмотрены функции pathconf и fpathconf.

Пределы времени компиляции чаще всего определяются в заголовочных файлах, которые включаются в программу на этапе компиляции. Пределы времени выполнения требуют, чтобы процесс получил их значения, вызвав соответствующие функции.

Кроме того, некоторые пределы для одной реализации имеют фиксированные значения и потому могут определяться в заголовочных файлах. Для других реализаций они могут варьироваться, вследствие чего для получения их значений требуется обращение к соответствующим функциям во времени исполнения. Примером предела такого типа может служить максимальная длина имени файла. System V до появления SVR4 ограничивала длину имени файла 14 символами, тогда как BSD-системы увеличили это значение до 255 символов. Сегодня большинство реализаций Unix поддерживают множество различных типов файловых систем, и каждая из них имеет собственные пределы – это случай предела времени выполнения, который зависит от того, в какой файловой системе находится рассматриваемый файл. Например, корневая файловая система может ограничивать длину имени файла 14 символами, тогда как в другой файловой системе это ограничение может составлять 255 символов.

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

На этапе выполнения значения пределов можно получить с помощью одной из следующих функций.

#include <unistd.h>

long sysconf (int name);

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

long fpathconf (int filedes, int name);

/* все три функции возвращают значение соответствующего

предела в случае успеха, -1 – в случае ошибки */

Различие между двумя последними функциями состоит в том, что первая из них получает в качестве аргумента строку пути к файлу, а вторая – файловый дескриптор. Имена пределов (аргумент name), значения которых можно узнать, перечислены в справочном руководстве по данным функциям.

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

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

  2. Для некоторых пределов могут возвращаться либо определенные неотрицательные значения, либо признак неопределенности – в этом случае возвращаемое значение равно –1, но при этом значение errno не изменяется.

Соседние файлы в папке Chapter.1
  • #
    12.05.2015100.86 Кб541_1.vsd
  • #
    12.05.201598.3 Кб461_2.vsd
  • #
    12.05.201589.6 Кб461_3.vsd
  • #
    12.05.201592.16 Кб471_4.vsd
  • #
    12.05.201591.14 Кб471_5.vsd
  • #
    12.05.2015177.66 Кб77Часть1.doc