Роббинс Арнольд
Шрифт:
Во время написания этого, для GLIBC 2.3.2 и ранее, GNU
ЗАМЕЧАНИЕ. Хотя POSIX определяет
Обычной методикой, применимой во многих случаях, является использование набора значений флагов; когда флаг установлен (т.е. true), имеет место некоторый факт или применяется некоторое условие. Значения флагов определены либо через именованные константы
Физически каждая именованная константа представляет различные позиции битов в значении
Флаги устанавливаются, проверяются и очищаются с помощью побитовых операторов С. Например,
Побитовый оператор И проверяет, установлен ли флаг, а сочетание побитовых операторов И и дополнения очищает флаг:
Побитовые операторы отпугивают, если вы не использовали их ранее. Однако, только что показанный код примера представляет обычный стиль С. Тщательно изучите каждую операцию; возможно, нарисуйте себе несколько картин, показывающих работу этих операторов. Однажды разобравшись с ними, вы можете тренировать себя, распознавая эти операторы как высокоуровневые операции для управления значениями флагов вместо их трактовки как низкоуровневых манипуляций с битами.
Причина использования флагов кроется в том, что они обеспечивают значительную экономию пространства данных. Одно поле
82
См.
8.3.2. Стиль Linux:
Системные вызовы
Как и в случае с
Поля аналогичны полям в
Преимуществом использования
Есть два неудобства в использовании этих вызовов. Во-первых, они специфичны для Linux. Во-вторых, часть сведений из