6.1. Выбор возможностей glibc

6.1. Выбор возможностей glibc

В glibc существует набор макросов для выбора возможностей. Эти макросы используются для выбора стандарта, которому будет подчиняться glibc. Иногда стандарты конфликтуют между собой, a glibc позволяет выбирать именно тот набор стандартов (формальный, де-юре, и неформальный, де-факто), которым нужно соответствовать полностью либо частично. Технически такие макросы называются макросами проверки возможностей.

Знание этих макросов необходимо, так как набор макросов, определенных по умолчанию, не обеспечивает полную функциональность glibc. Некоторые механизмы, описанные в этой книге, в выбранном по умолчанию наборе функций не доступны; далее мы опишем макросы, необходимые для включения каждого такого механизма.

Макросы проверки возможностей разработаны для определения стандартов (де-юре или де-факто), и в некоторых случаях они определяют, каким именно версиям этих стандартов должна соответствовать glibc. Это соглашение часто не включает определения функций и макросов, не указанных стандартом, в стандартных заголовочных файлах. Это значит, что приложение, написанное в соответствии со стандартом, может определять свои собственные функции и макросы, не конфликтуя с расширениями, которые этим стандартом не определены.

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

Макросы определяются в системном заголовочном файле feature.h, который не должен включаться непосредственно. Взамен его включают все другие заголовочные файлы, которые зависят от содержимого feature.h.

Набор макросов по умолчанию содержит _SVID_SOURCE=1, _BSD_SOURCE=1, _POSIX_SOURCE=1 и _POSIX_C_SOURCE=199506L. Описание каждой из этих опций можно найти ниже, но все это, по сути, транслируется в поддержку возможностей стандарта 1995 POSIX (этот стандарт использовался до объединения стандартов POSIX и Single Unix), всех стандартных функций System V и всех функций BSD, которые не конфликтуют с функциями System V. Данного набора макросов достаточно для большинства программ.

При определении в gcc опции -ansi, как было описано ранее, автоматически определяется внутренний макрос __STRICT_ANSI__, который отключает все макросы, определенные по умолчанию.

За исключением __STRICT_ANSI__, который представляет собой специальный макрос (и должен настраиваться только компилятором в контексте опции командной строки -ansi), эти макросы имеют накопительный характер, то есть можно определять любые их комбинации. Точное определение изменений _BSD_SOURCE зависит от настройки других макросов (более детально об этом — ниже); все остальные макросы — исключительно накопительные.

Некоторые макросы определяются различными версиями POSIX или других стандартов, другие являются общими, а третьи могут использоваться только в glibc.

_POSIX_SOURCE Если указан этот макрос, становятся доступными все интерфейсы, определенные как часть оригинальной спецификации POSIX.1. Данный макрос был определен в первоначальном стандарте POSIX.1-1990.
_POSIX_C_SOURCE Этот макрос может заменять _POSIX_SOURCE. Если установлен в 1, то эквивалентен _POSIX_SOURCE. Если его значение больше либо равно 2, макрос включает интерфейсы С, соответствующие POSIX.2, и задействует регулярные выражения. Если значение больше либо равно 199309L, макрос включает в себя дополнительные интерфейсы С, соответствующие пересмотренному в 1993 году стандарту POSIX, в частности, включая функциональность реального времени. Если его значение больше либо равно 199506L (по умолчанию), макрос включает дополнительные интерфейсы С, соответствующие пересмотренному в 1995 году стандарту POSIX, в частности, включая потоки POSIX. Этот макрос был описан версией POSIX, выпущенной после 1990 года для разграничения поддержки различных версий стандартов POSIX (а теперь также и Single Unix). Во многих случаях полностью замещается _XOPEN_SOURCE.
_XOPEN_SOURCE Макрос _XOPEN_SOURCE определен XSI-частью стандарта Single Unix и описывает логическое надмножество интерфейсов, включенных с помощью _POSIX_C_SOURCE. Этот макрос также был определен XPG. Если макрос определен, указываются функциональные возможности из начального стандарта XPG4 (Unix95). Если макрос определен со значением 500, включаются функциональные возможности из стандарта XPG5 (Unix98, SuS версии 2). Если установлено значение 600, включаются функциональные возможности из начального стандарта IEEE Std 1003.1-2003 (комбинированный документ по POSIX и SuS).
_ISOC99_SOURCE Этот макрос проверки возможностей экспортирует интерфейсы, определенные в новых стандартах ISO/IEC С99.
_SVID_SOURCE При указании данного макроса для выбора возможностей становится доступным стандарт SVID (System V Interface Definition). Это не значит, что glibc обеспечивает полную реализацию стандарта SVID; она всего лишь открывает указанную функциональность SVID, существующую в glibc.
_BSD_SOURCE Функции BSD могут конфликтовать с другими функциями, и эти конфликты всегда разрешаются в пользу поведения, соответствующего стандарту System V, или, если определен или подразумевается любой макрос функций POSIX, X/Open или System V, единственным макросом, который включает поведение BSD является _ISOC99_SOURCE. (Точное определение этого макроса временами изменялось и может меняться в дальнейшем, поскольку он не регламентируется каким-либо стандартом.)
_GNU_SOURCE В случаях конфликта _GNU_SOURCE включает все, что возможно, отдавая предпочтение интерфейсам System V, а не BSD. Этот макрос также добавляет некоторые специальные для GNU и Linux интерфейсы, например, владение файлами.

Когда стандартного набора макросов недостаточно, обычно определяют макрос _GNU_SOURCE (включает все — самое простое решение), _XOPEN_SOURCE=600 (наиболее вероятно, что пригодится поднабор _GNU_SOURCE) или _ISOC99_SOURCE (использование функций наиболее позднего стандарта С, поднабор _XOPEN_SOURCE=600).

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Glibc

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич


Активация дополнительных возможностей

Из книги Основы AS/400 автора Солтис Фрэнк

Активация дополнительных возможностей В этом подразделе описана активация дополнительных возможностей Pinnacle Studio без регистрации через Интернет. Правда, для этого у вас должен быть код активации программы. Совсем не обязательно активизироваться сразу же после установки


Адресация на базе возможностей

Из книги Инфраструктуры открытых ключей автора Полянская Ольга Юрьевна

Адресация на базе возможностей Системный указатель может также содержать сведения о типе операций, которые выполнимы над объектом. Обычно, такая информация называется полномочиями (authority). Указатель, содержащий адрес объекта и полномочия, называется возможностью


Анализ возможностей поставщика

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

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


7.2. Средства проверки памяти, входящие в состав glibc

Из книги VBA для чайников автора Каммингс Стив

7.2. Средства проверки памяти, входящие в состав glibc Библиотека GNU С (glibc) предлагает три простых средства проверки памяти. Первые два — mcheck() и MALLOC_CHECK_ — вызывают проверку на непротиворечивость структуры данных кучи, а третье средство — mtrace() — выдает трассировку


21.1. Базы данных возможностей

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

21.1. Базы данных возможностей Действия, контролируемые заданными управляющими последовательностями, часто называются возможностями (capabilities). Некоторые управляющие последовательности совместно используются большим числом терминалов. Многие из таких


Обзор возможностей

Из книги Linux Mint и его Cinnamon. Очерки применителя автора Федорчук Алексей Викторович

Обзор возможностей Firebird является программным обеспечением для платформы клиент-сервер, разработанным специально для использования в локальных и глобальных компьютерных сетях. Соответственно, его ядро состоит из двух основных программ: сервер базы данных, который


3.2.1.9. Только GLIBC: чтение целых строк: getline() и getdelim()

Из книги Linux и все, все, все... Статьи и колонки в LinuxFormat, 2006-2013 автора Федорчук Алексей Викторович

3.2.1.9. Только GLIBC: чтение целых строк: getline() и getdelim() Теперь, когда вы увидели, как читать строки произвольной длины, вы можете сделать вздох облегчения, что вам не нужно самим писать такую функцию. GLIBC предоставляет вам для этого две функции:#define _GNU_SOURCE 1 /* GLIBC */#include <stdio.h>#include


11.4. Проверка для эффективного пользователя: euidaccess() (GLIBC)

Из книги автора

11.4. Проверка для эффективного пользователя: euidaccess() (GLIBC) GLIBC предоставляет дополнительную функцию, которая работает подобно access(), но проверяет в соответствии с эффективными UID, GID и набором групп:#include <unistd.h> /* CLIBC */int euidaccess(const char *path, int amode);Аргументы и возвращаемое


13.3.4.2. Только GLIBC:

Из книги автора

13.3.4.2. Только GLIBC: <libintl.h> Для программ, которые будут использоваться лишь на системах с GLIBC, использование заголовочных файлов и макросов похоже, но проще:#include <stdio.h>#include <libintl.h>#define _(msgid) gettext(msgid)#define N_(msgid) msgid/* ... все остальное то же ... */Как мы видели ранее, заголовочный


Обзор возможностей

Из книги автора

Обзор возможностей Прежде чем погружаться в вопросы, связанные с ZFS, читатель, вероятно, хотел бы убедиться в том, что это стоит делать. То есть — ознакомиться с возможностями, которые она ему предоставляет.Для начала — немного цифр. В отличие от всех предшествовавших


Обзор возможностей

Из книги автора

Обзор возможностей Прежде чем погружаться в вопросы, связанные с ZFS, читатель, вероятно, хотел бы убедиться в том, что это стоит делать. То есть – ознакомиться с возможностями, которые она ему предоставляет.Для начала – немного цифр. В отличие от всех предшествовавших