•
Поскольку ограничения и возможности системы оказывают влияние на возможности приложения, портируемое приложение нуждается в способах определения значений для ограничений и поддерживаемых возможностей. Стандарты языка программирования C и SUSv3 предоставляют приложению два основных способа получения этой информации.
• Некоторые ограничения и возможности известны в ходе компиляции. Например, максимальное значение переменной типа int определяется аппаратной архитектурой и деталями реализации компилятора. Эти ограничения могут быть записаны в заголовочных файлах.
• Другие ограничения и возможности могут изменяться в ходе выполнения приложения. Для таких случаев в SUSv3 определяются три функции — sysconf(), pathconf() и fpathconf(). Приложение может вызвать их для проверки ограничений и возможностей данной реализации UNIX.
В SUSv3 указывается диапазон ограничений, которые могут накладываться соответствующей реализацией, а также набор возможностей, каждая из которых может быть предоставлена или не предоставлена конкретной системой. В этой главе мы рассмотрим лишь некоторые из этих ограничений и возможностей, а другие будут описаны в последующих главах.
Для каждого определяемого ограничения в SUSv3 требуется, чтобы все реализации поддерживали его
Если приложение ограничивает себя минимальными значениями, указанными в SUSv3, оно будет портируемым для всех реализаций стандарта. Но это не дает ему права воспользоваться преимуществами реализаций, предоставляющих более высокие ограничения. Поэтому зачастую предпочтительнее определять ограничения конкретной системы через
Применение строки _MAX в названиях ограничений, определенных в SUSv3, может показаться странным, учитывая их описание как минимальных значений. Смысл названий проясняется, если заметить, что каждая из этих констант устанавливает верхний предел ресурсов или возможностей, и стандарты определяют, что этот верхний предел должен иметь конкретное минимальное значение.
Иногда в качестве ограничения предоставляются максимальные значения, в именах которых присутствует строка _MIN. Для этих констант верно обратное утверждение: они представляют нижний предел какого-либо ресурса, и стандарты говорят, что в соответствующей реализации этот нижний предел не может быть больше определенного значения. Например, ограничение FLT_MIN (1E–37) задает наибольшее значение, которое реализация может установить для наименьшего числа с плавающей точкой из тех, что могут быть представлены, и все соответствующие стандарту реализации будут иметь возможность для представления чисел с плавающей точкой, по крайней мере таких же малых, как это.
У каждого ограничения есть свое название, которое соответствует показанному выше
Указываемые в SUSv3 ограничения разбиты на три категории: