<?xml version="1.0" encoding="Windows-1251"?>
<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink">
 <description>
  <title-info>
   <genre>comp_programming</genre>
   <author>
    <first-name>Уильям</first-name>
    <middle-name>Ричард</middle-name>
    <last-name>Стивенс</last-name>
    <home-page>http://www.kohala.com/~rstevens</home-page>
    <email>rstevens@kohala.com </email>
   </author>
   <book-title>UNIX: взаимодействие процессов</book-title>
   <annotation>
    <p>Книга написана известным экспертом по операционной системе UNIX и посвящена описанию одной из форм межпроцессного взаимодействия, IPC, с использованием которой создается большинство сложных программ. В ней описываются четыре возможности разделения решаемых задач между несколькими процессами или потоками одного процесса: передача сообщений, синхронизация, разделяемая память, удаленный вызов процедур.</p>
    <p>Книга содержит большое количество иллюстрирующих примеров и может использоваться как учебник по IPC, и как справочник для опытных программистов.</p>
   </annotation>
   <date>06.02.03</date>
   <coverpage>
    <image l:href="#Any2FbImgLoader0.jpg"/></coverpage>
   <lang>ru</lang>
   <src-lang>en</src-lang>
   <translator>
    <first-name>Д.</first-name>
    <last-name>Солнышков</last-name>
   </translator>
  </title-info>
  <src-title-info>
   <genre>comp_programming</genre>
   <author>
    <first-name>William</first-name>
    <middle-name>Richard</middle-name>
    <last-name>Stevens</last-name>
    <home-page>http://www.kohala.com/~rstevens</home-page>
    <email>rstevens@kohala.com </email>
   </author>
   <book-title>UNIX Network Programming. Volume 2 Second Edition. Interprocess Communications</book-title>
   <date></date>
   <lang>en</lang>
  </src-title-info>
  <document-info>
   <author>
    <nickname>honorato bonafe</nickname>
   </author>
   <program-used>FB Editor v2.0</program-used>
   <date value="2010-03-11">11 March 2010</date>
   <id>44ECAFAA-4DE1-469E-94EB-57910325EA97</id>
   <version>1.0</version>
   <history>
    <p>1.0 pdf-&gt;fb2</p>
   </history>
  </document-info>
  <publish-info>
   <book-name>UNIX: взаимодействие процессов</book-name>
   <publisher>Питер</publisher>
   <city>Санкт-Петербург</city>
   <year>2003</year>
   <isbn>5-318-00534-9</isbn>
   <sequence name="Мастер-класс"/>
  </publish-info>
 </description>
 <body>
  <title>
   <p>Уильям Стивенс</p>
   <p>UNIX: взаимодействие процессов</p>
   <p>МАСТЕР-КЛАСС</p>
  </title>
  <epigraph>
   <p>Всему сообществу Usenet, где можно найти много ЧаВо с ответами на все вопросы и случаи жизни</p>
  </epigraph>
  <section>
   <title>
    <p>Предисловие</p>
   </title>
   <subtitle>Введение</subtitle>
   <p>Большинство нетривиальных программ пишутся с использованием одной из форм межпроцессного взаимодействия (IPC — Interprocess Communication). Это естественное следствие принципа разработки, заключающегося в том, что лучше создавать приложение, состоящее из отдельных взаимодействующих элементов, чем одну большую программу. Исторически разработка приложений пережила следующие этапы развития:</p>
   <p>1. Сначала были большие цельные программы, которые делали все необходимое. Отдельные части программы реализовывались в виде функций, обменивавшихся информацией через аргументы, возвращаемые значения и глобальные переменные.</p>
   <p>2. Потом стали создаваться небольшие программы, взаимодействующие друг с другом посредством различных средств IPC. Многие стандартные утилиты Unix были разработаны именно таким образом, причем для передачи информации использовались каналы интерпретатора.</p>
   <p>3. Наконец, сейчас появилась возможность писать цельные программы, состоящие из взаимодействующих между собой потоков. В данном случае мы все равно применяем термин IPC, хотя процесс имеется только один.</p>
   <p>Комбинация последних двух вариантов также возможна: несколько процессов, каждый из которых состоит из нескольких потоков, вполне могут взаимодействовать между собой.</p>
   <p>Мы описываем возможность разделения решаемых задач между несколькими процессами или даже между потоками одного процесса. В мультипроцессорной системе такое приложение сможет выполняться гораздо быстрее, поэтому разделение задач между процессами способно повысить его быстродействие.</p>
   <p>В этой книге подробно описываются четыре формы IPC:</p>
   <p>1. Передача сообщений (каналы, FIFO, очереди сообщений).</p>
   <p>2. Синхронизация (взаимные исключения, условные переменные, блокировки чтения-записи, блокировка файлов и записей, семафоры).</p>
   <p>3. Разделяемая память (неименованная и именованная).</p>
   <p>4. Удаленный вызов процедур (двери, Sun RPC).</p>
   <p>Здесь не рассматриваются вопросы написания программ, взаимодействующих по сети. Такая форма взаимодействия обычно подразумевает использование интерфейса сокетов и стека протоколов TCP/IP; эти темы были подробно разобраны в первом томе книги ([24]).</p>
   <p>Нам могут возразить, что средства IPC, не предназначенные для взаимодействия по сети, вообще не следует использовать и что вместо этого следует изначально разрабатывать приложения с расчетом на использование в сети. Однако на практике средства IPC, работающие только в пределах одного узла, функционируют гораздо быстрее, чем сетевые, да и программы с их использованием оказываются проще. Разделяемая память и средства синхронизации обычно не могут использоваться по сети — они доступны только в пределах одного узла. Опыт и история показывают, что существует потребность в наличии как несетевых, так и сетевых форм IPC.</p>
   <p>В этой книге используется материал первого тома и других моих книг:</p>
   <p>&#9632; UNIX Network Programming, том 1, 1998 [24];</p>
   <p>&#9632; Advanced Programming in the UNIX Environment, 1992 [21];</p>
   <p>&#9632; TCP/IP Illustrated, том 1, 1994 [22];</p>
   <p>&#9632; TCP/IP Illustrated, том 2, написанной в соавторстве с Гари Райтом (Gary Wright),1995, [27];</p>
   <p>&#9632; TCP/IP Illustrated, том 3, 1996 [23].</p>
   <p>Может показаться странным, что я описываю средства IPC в книге, заглавие которой содержит слова «Network Programming». Замечу, что IPC часто используется и в сетевых приложениях. Как говорилось в предисловии к книге «UNIX Network Programming» 1990 года издания, «для понимания методов разработки сетевых приложений необходимо понимание средств межпроцессного взаимодействия (IPC)».</p>
   <subtitle>Изменения со времени первого издания</subtitle>
   <p>Этот том содержит полностью переписанные главы 3 и 18 книги «UNIX Network Programming» 1990 года издания. Если подсчитать количество слов, объем материала увеличился в пять раз. Ниже перечислены основные отличия данного издания:</p>
   <p>&#9632; В дополнение к трем формам System V IPC (очереди сообщений, семафоры, разделяемая память) рассматриваются более новые функции Posix, реализующие эти же три формы IPC. О стандартах Posix более подробно говорится в разделе 1.7. В будущем можно ожидать перехода к использованию функций Posix, обладающих определенными преимуществами по сравнению с аналогами System V.</p>
   <p>&#9632; Рассматриваются средства синхронизации Posix: взаимные исключения, условные переменные, блокировки чтения-записи. Эти средства могут использоваться для синхронизации потоков или процессов и часто привлекаются для обеспечения синхронизации доступа к разделяемой памяти.</p>
   <p>&#9632; В этом томе предполагается наличие поддержки потоков Posix (Pthreads), и многие примеры написаны с использованием многопоточного (а не многопроцессного) программирования.</p>
   <p>&#9632; Описание именованных и неименованных каналов и блокировок записей основано на их определениях в стандарте Posix.</p>
   <p>&#9632; В дополнение к описанию средств IPC и примерам их использования я также привожу примеры реализации очередей сообщений, блокировок чтения-записи и семафоров Posix (все это может быть скомпилировано в пользовательские библиотеки). Эти реализации задействуют множество разных средств одновременно. Например, одна из реализаций семафоров Posix использует взаимные исключения, условные переменные и отображение в память. В комментариях отмечаются важные моменты, которые следует учитывать при разработке приложений (ситуации гонок, обработка ошибок, утечка памяти, использование списков аргументов переменной длины). Понимание реализации какого-либо средства ведет к лучшему его использованию.</p>
   <p>&#9632; При описании RPC основное внимание уделяется пакету Sun RPC. Рассказ предваряется описанием нового интерфейса дверей в Solaris, который похож на RPC, но используется только в пределах одного узла. Описание дверей является как бы введением, в котором описываются важные вопросы вызова процедур в других процессах без необходимости учитывать особенности сетевой реализации.</p>
   <subtitle>Кому адресована эта книга?</subtitle>
   <p>Эта книга может использоваться как учебник по IPC или как справочник для опытных программистов. Текст разделен на четыре части:</p>
   <p>&#9632; передача сообщений;</p>
   <p>&#9632; синхронизация;</p>
   <p>&#9632; разделяемая память;</p>
   <p>&#9632; удаленный вызов процедур.</p>
   <p>Возможно, некоторые читатели будут интересоваться содержимым конкретных подразделов. Большая часть глав может читаться совершенно независимо от остальных, хотя в главе 2 объединены многие общие особенности средств Posix IPC, в главе 3 — System V IPC, а глава 12 является введением в разделяемую память (как Posix, так и System V). Всем читателям настоятельно рекомендуется прочесть главу 1, в особенности раздел 1.6, в котором описываются используемые в книге функции-обертки. Главы, описывающие средства Posix IPC, могут читаться отдельно от глав, посвященных System V IPC. Описание каналов и блокировок записей стоит особняком. Две главы, посвященные удаленному вызову процедур, также могут читаться отдельно от прочих.</p>
   <p>Подробный индекс упрощает использование книги в качестве справочника. Для читающих текст в случайном порядке приводятся многочисленные перекрестные ссылки на сходный материал.</p>
   <subtitle>Исходный код и опечатки</subtitle>
   <p>Исходный код всех примеров можно загрузить с домашней страницы автора (адрес — в конце предисловия). Лучший способ изучить IPC — это изменить программы из примеров или даже улучшить их. Написание программ лучше всего способствует усвоению концепций и методов. В конце каждой главы даются упражнения, решения к большей части которых даны в приложении Г.</p>
   <p>Список замеченных опечаток можно также найти на домашней странице автора.</p>
   <subtitle>Благодарности</subtitle>
   <p>Хотя на обложке книги стоит имя только одного автора, в ее создании участвовало множество людей. Прежде всего это члены семьи автора, которые смирились с ушедшими на ее написание часами. Еще раз спасибо, Салли, Билл, Эллен и Дэвид.</p>
   <p>Спасибо всем, кто помогал работать с содержимым книги. Ваша помощь была просто неоценимой (135 печатных страниц). Вы исправляли ошибки, отмечали недостаточную четкость пояснений, предлагали другие объяснения и варианты программ. Спасибо вам, Гевин Боуи, Аллен Бриггс, Дейв Бутенхов, Ван-Тех Чанг, Крис Клилэнд, Боб Фриснан, Эндрю Гиерт, Скотт Джонсон, Марти Леиснер, Ларри Мак-Вой, Крейг Метз, Боб Нельсон, Стив Рэго, Джим Рейд, Свами К. Ситарама, Джон К. Снейдер, Иан Ланс Тейлор, Рик Тир и Энди Такер.</p>
   <p>Мне помогали и те, кто отвечал на мои электронные письма, в которых порой было множество вопросов. Ваши ответы помогли сделать книгу более точной и ясной: Дэвид Баусум, Дейв Бутенхов, Билл Голмейстер, Макеш Кэкер, Брайан Керниган, Ларри МакВой, Стив Рэго, Кейт Скорвран, Барт Смаалдерс, Энди Такер и Джон Уэйт.</p>
   <p>Отдельная благодарность Ларри Рафски из GSquared. Спасибо, как обычно, говорю я NOAO, Сиднею Вульфу, Ричарду Вульфу и Стиву Гранди за возможность работать с их сетями и компьютерами. Джим Баунд, Мэтт Томас, Мэри Клаутер и Барб Гловер из Digital Equipment Corp. предоставили систему Alpha, на которой выполнялась большая часть примеров данной книги. Часть программ была протестирована и в других системах. Спасибо Майклу Джонсону из Red Hat Software (за новейшие версии Red Hat Linux), Дейву Маркуардту и Джесси Хауг за компьютер RS/6000 и доступ к последним версиям AIX.</p>
   <p>Благодарю сотрудников Prentice Hall — редактора Мэри Франц вместе с Норин Регина, Софи Папаниколау и Патти Гуэрриери — за помощь, в особенности в соблюдении сроков.</p>
   <subtitle>Выходные сведения</subtitle>
   <p>Оригинал-макет этой книги был подготовлен на языке PostScript. Форматирование осуществлялось с помощью замечательного пакета groff (автор — Джеймс Кларк) на SparcStation под управлением Solaris 2.6. (Сведения о смерти groff сильно преувеличены). Я набил все 138 897 слов книги в редакторе vi, создал 72 рисунка с помощью программы gpic (используя макросы Гари Райта), сделал 35 таблиц с помощью программы gtbl, подготовил индекс (с помощью сценариев на языке awk, написанных Джоном Бентли и Брайаном Керниганом) и сверстал все это вместе. Программа Дейва Хэнсона loom, пакет GNU indent и сценарии Гари Райта помогли добавить в книгу 8046 строк исходного кода на языке С.</p>
   <p>С нетерпением жду комментариев, предложений и сообщений о замеченных опечатках.</p>
   <p>W. Richard Stevens Tucson, Arizona July 1998</p>
   <p>rstevens@kohala.com http://www.kohala.com/~rstevens</p>
   <subtitle>От издательства</subtitle>
   <p>Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция).</p>
   <p>Мы будем рады узнать ваше мнение!</p>
   <p>Все исходные тексты, приведенные в книге, вы можете найти по адресу http://www.piter.com/download.</p>
   <p>На web-сайте издательства http://www.piter.com вы найдете подробную информацию о наших книгах.</p>
  </section>
  <section>
   <title>
    <p>ЧАСТЬ 1</p>
    <p>ВВЕДЕНИЕ В IPC UNIX</p>
   </title>
   <section>
    <title>
     <p>ГЛАВА 1</p>
     <p>Обзор средств взаимодействия процессов Unix</p>
    </title>
    <section>
     <title>
      <p>1.1. Введение</p>
     </title>
     <p>Аббревиатура IPC расшифровывается как <emphasis>interprocess communication,</emphasis> то есть взаимодействие процессов. Обычно под этим понимается передача сообщений различных видов между процессами в какой-либо операционной системе. При этом могут использоваться различные формы синхронизации, требуемой современными видами взаимодействия, осуществляемыми, например, через разделяемую память.</p>
     <p>В процессе развития операционных систем семейства Unix за последние 30 лет методы передачи сообщений эволюционировали следующим образом:</p>
     <p>&#9632; Каналы (pipes — глава 4) были первой широко используемой формой взаимодействия процессов, доступной программам и пользователю (из интерпретатора команд). Основным недостатком каналов является невозможность их использования между процессами, не имеющими общего родителя (ancestor), но этот недостаток был устранен с появлением именованных каналов (named pipes), или каналов FIFO (глава 4).</p>
     <p>&#9632; Очереди сообщений стандарта System V (System V message queues — глава 4) были добавлены к ядрам System V в начале 80-х. Они могут использоваться для передачи сообщений между процессами на одном узле вне зависимости от того, являются ли эти процессы родственными. Несмотря на сохранившийся префикс «System V», большинство современных версий Unix, включая и те, которые не произошли от System V, поддерживают эти очереди.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В отношении процессов Unix термин «родство» означает, что у процессов имеется общий предок. Подразумевается, что процессы, являющиеся родственниками, были созданы этим процессом-предком с помощью одной или нескольких «вилок» (forks). Простейшим примером будет вызов fork некоторым процессом дважды, что приведет к созданию двух порожденных процессов. Тогда можно говорить о родстве этих процессов между собой. Естественно, каждый порожденный процесс является родственником породившего. Родитель может позаботиться о возможности взаимодействия с порожденным процессом (создав канал или очередь сообщений) перед вызовом fork, и этот объект IPC будет унаследован порожденным процессом. Более подробно о наследовании объектов IPC рассказано в табл. 1.4. Нужно также отметить, что все процессы Unix теоретически являются потомками процесса init, который запускает все необходимое в процессе загрузки системы (bootstrapping). С практической точки зрения отсчет родства процессов лучше вести с оболочки (login shell) и всех процессов, ею созданных. В главе 9 [24] рассказано о сеансах и родственных отношениях процессов более подробно. </p>
     </cite>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Примечания вроде этого будут использоваться нами для того, чтобы уточнять особенности реализации, давать исторические справки и полезные советы. </p>
     </cite>
     <p>&#9632; Очереди сообщений Posix (Posix message queues — глава 5) были добавлены в стандарт Posix (1003.1b-1993, о котором более подробно рассказано в разделе 1.7). Они могут использоваться для взаимодействия родственных и неродственных процессов на каком-либо узле.</p>
     <p>&#9632; Удаленный вызов процедур (remote procedure calls — RPC, часть 5) появился в 80-х в качестве средства для вызова функций на одной системе (сервере) программой, выполняемой на другой системе (клиенте). Это средство было разработано в качестве альтернативы для упрощения сетевого программирования. Поскольку между клиентом и сервером обычно передается информация (передаются аргументы для вызова функции и возвращаемые значения) и поскольку удаленный вызов процедур может использоваться между клиентом и сервером на одном узле, RPC можно также считать одной из форм передачи сообщений.</p>
     <p>Интересно также взглянуть на эволюцию различных форм синхронизации в процессе развития Unix:</p>
     <p>&#9632; Самые первые программы, которым требовалась синхронизация (чаще всего для предотвращения одновременного изменения содержимого файла несколькими процессами), использовали особенности файловой системы, некоторые из которых описаны в разделе 9.8,</p>
     <p>&#9632; Возможность блокирования записей (record locking — глава 9) была добавлена к ядрам Unix в начале 80-х и стандартизована в версии Posix.1 в 1988.</p>
     <p>&#9632; Семафоры System V (System V semaphores — глава 11) были добавлены вместе с возможностью совместного использования памяти (System V shared memory — глава 14) и одновременно с очередями сообщений System V (начало 80-х). Эти IPC поддерживаются большинством современных версий Unix.</p>
     <p>&#9632; Семафоры Posix (Posix semaphores — глава 10) и разделяемая память Posix (Posix shared memory— глава 13) были также добавлены в стандарт Posix (1003.1b-1993, который ранее упоминался в связи с очередями сообщений Posix).</p>
     <p>&#9632; Взаимные исключения и условные переменные (mutex, conditional variable — глава 7) представляют собой две формы синхронизации, определенные стандартом программных потоков Posix (Posix threads, Pthreads — 1003.1с-1995). Хотя обычно они используются для синхронизации между потоками, их можно применять и при организации взаимодействия процессов.</p>
     <p>&#9632; Блокировки чтения-записи (read-write locks — глава 8) представляют собой дополнительную форму синхронизации. Она еще не включена в стандарт Posix, но, вероятно, скоро будет.</p>
    </section>
    <section>
     <title>
      <p>1.2. Процессы, потоки и общий доступ к информации</p>
     </title>
     <section>
      <p>В традиционной модели программирования Unix в системе могут одновременно выполняться несколько процессов, каждому из которых выделяется собственное адресное пространство. Это иллюстрирует рис. 1.1. </p>
      <image l:href="#Any2FbImgLoader9"/>
      <p>Рис. 1.1. Совместное использование информации процессами</p>
      <empty-line/>
      <p>1. Два процесса в левой части совместно используют информацию, хранящуюся в одном из объектов файловой системы. Для доступа к этим данным каждый процесс должен обратиться к ядру (используя функции read, write, lseek, write, lseek и аналогичные). Некоторая форма синхронизации требуется при изменении файла, для исключения помех при одновременной записи в файл несколькими процессами и для защиты процессов, читающих из файла, от тех, которые пишут в него.</p>
      <p>2. Два процесса в середине рисунка совместно используют информацию, хранящуюся в ядре. Примерами в данном случае являются канал, очередь сообщений или семафор System V. Для доступа к совместно используемой информации в этом случае будут использоваться системные вызовы.</p>
      <p>3. Два процесса в правой части используют общую область памяти, к которой может обращаться каждый из процессов. После того как будет получен доступ к этой области памяти, процессы смогут обращаться к данным вообще без помощи ядра. В этом случае, как и в первом, процессам, использующим общую память, также требуется синхронизация.</p>
      <p>Обратите внимание, что ни в одном из этих случаев количество взаимодействующих процессов не ограничивается двумя. Любой из описанных методов работает для произвольного числа взаимодействующих процессов. На рисунке мы изображаем только два для простоты.</p>
     </section>
     <section>
      <title>
       <p>Потоки</p>
      </title>
      <p>Хотя концепция процессов в системах Unix используется уже очень давно, возможность использовать несколько потоков внутри одного процесса появилась относительно недавно. Стандарт потоков Posix.1, называемый Pthreads, был принят в 1995 году. С точки зрения взаимодействия процессов все потоки одного процесса имеют общие глобальные переменные (то есть поточной модели свойственно использование общей памяти). Однако потокам требуется синхронизация доступа к глобальным данным. Вообще, синхронизация, не являясь собственно формой IPC, часто используется совместно с различными формами IPC для управления доступом к данным.</p>
      <p>В этой книге описано взаимодействие между процессами и между потоками. Мы предполагаем наличие среды, в которой поддерживается многопоточное программирование, и будем использовать выражения вида «если канал пуст, вызывающий поток блокируется до тех пор, пока какой-нибудь другой поток не произведет запись в канал». Если система не поддерживает потоки, можно в этом предложении заменить «потоки» на «процессы» и получится классическое определение блокировки в Unix, возникающей при считывании из пустого канала командой read. Однако в системе, поддерживающей потоки, блокируется только поток, запросивший данные из пустого канала, а все остальные потоки процесса будут продолжать выполняться. Записать данные в канал сможет другой поток этого же процесса или какой-либо поток другого процесса.</p>
      <p>В приложении Б сведены некоторые основные характеристики потоков и дано описание пяти основных функций Pthread, используемых в программах этой книги.</p>
     </section>
    </section>
    <section>
     <title>
      <p>1.3. Живучесть объектов IPC</p>
     </title>
     <p>Можно определить живучесть (persistence) любого объекта IPC как продолжительность его существования. На рис. 1.2 изображены три возможные группы, к которым могут быть отнесены объекты по живучести.</p>
     <image l:href="#Any2FbImgLoader11"/>
     <p>Рис. 1.2. Живучесть объектов IPC</p>
     <empty-line/>
     <p>1. Объект IPC, живучесть которого определяется процессом (process-persistent), существует до тех пор, пока не будет закрыт последним процессом, в котором он еще открыт. Примером являются неименованные и именованные каналы (pipes, FIFO).</p>
     <p>2. Объект IPC, живучесть которого определяется ядром (kernel-persistent), существует до перезагрузки ядра или до явного удаления объекта. Примером являются очереди сообщений стандарта System V, семафоры и разделяемая память. Живучесть очередей сообщений Posix, семафоров и разделяемой памяти должна определяться по крайней мере ядром, но может определяться и файловой системой в зависимости от реализации.</p>
     <p>3. Объект IPC, живучесть которого определяется файловой системой (filesystem-persistent), существует до тех пор, пока не будет удален явно. Его значение сохраняется даже при перезагрузке ядра. Очереди сообщений Posix, семафоры и память с общим доступом обладают этим свойством, если они реализованы через отображаемые файлы (так бывает не всегда).</p>
     <p>Следует быть аккуратным при определении живучести объекта IPC, поскольку она не всегда очевидна. Например, данные в канале (pipe) обрабатываются ядром, но живучесть каналов определяется процессами, а не ядром, потому что после того, как последний процесс, которым канал был открыт на чтение, закроет его, ядро сбросит все данные и удалит канал. Аналогично, хотя каналы FIFO и обладают именами в файловой системе, живучесть их также определяется процессами, поскольку все данные в таком канале сбрасываются после того, как последний процесс, в котором он был открыт, закроет его.</p>
     <p>В табл. 1.1 сведена информация о живучести перечисленных ранее объектов IPC.</p>
     <empty-line/>
    </section>
    <section>
     <p>Таблица 1.1. Живучесть различных типов объектов IPC</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Тип IPC</th>
       <th align="left" valign="top">Живучесть определяет</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Программный канал (pipe)</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Именованный канал (FIFO)</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Взаимное исключение Posix (mutex)</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Условная переменная Posix (condition variable)</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Блокировка чтения-записи Posix (lock)</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Блокировка записи fcntl</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Очередь сообщений Posix (message queue)</td>
       <td align="left" valign="top">Ядро</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Именованный семафор Posix (named semaphore)</td>
       <td align="left" valign="top">Ядро</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Семафор Posix в памяти (memory-based semaphore)</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Разделяемая память Posix (shared memory)</td>
       <td align="left" valign="top">Ядро</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Очередь сообщений System V</td>
       <td align="left" valign="top">Ядро</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Семафор System V</td>
       <td align="left" valign="top">Ядро</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Память с общим доступом System V</td>
       <td align="left" valign="top">Ядро</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Сокет TCP (TCP socket)</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Сокет UDP (UDP socket)</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Доменный сокет Unix (Unix domain socket)</td>
       <td align="left" valign="top">Процесс</td>
      </tr>
     </table>
     <p>Обратите внимание, что ни один тип IPC в этой таблице не обладает живучестью, определяемой файловой системой. Мы уже упомянули о том, что три типа объектов IPC в стандарте Posix <emphasis>могут </emphasis>иметь этот тип живучести в зависимости от реализации. Очевидно, что запись данных в файл обеспечивает живучесть, определяемую файловой системой, но обычно IPC таким образом не реализуются. Большая часть объектов IPC не предназначена для того, чтобы существовать и после перезагрузки, потому что ее не переживают процессы. Требование живучести, определяемой файловой системой, скорее всего, снизит производительность данного типа IPC, а обычно одной из задач разработчика является именно обеспечение высокой производительности.</p>
    </section>
    <section>
     <title>
      <p>1.4. Пространства имен</p>
     </title>
     <p>Если два неродственных процесса используют какой-либо вид IPC для обмена информацией, объект IPC должен иметь имя или идентификатор, чтобы один из процессов (называемый обычно сервером — server) мог создать этот объект, а другой процесс (обычно один или несколько клиентов — client) мог обратиться к этому конкретному объекту.</p>
     <p>Программные каналы (pipes) именами не обладают (и поэтому не могут использоваться для взаимодействия между неродственными процессами), но каналам FIFO сопоставляются имена в файловой системе, являющиеся их идентификаторами (поэтому каналы FIFO могут использоваться для взаимодействия неродственных процессов). Для других типов IPC, рассматриваемых в последующих главах, используются дополнительные соглашения об именовании (naming conventions). Множество возможных имен для определенного типа IPC называется его пространством имен (name space). Пространство имен — важный термин, поскольку для всех видов IPC, за исключением простых каналов, именем определяется способ связи клиента и сервера для обмена сообщениями.</p>
     <p>В табл. 1.2 сведены соглашения об именовании для различных видов IPC.</p>
     <empty-line/>
     <p>Таблица 1.2. Пространства имен для различных типов IPC</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Тип IPC</th>
       <th align="left" valign="top">Пространство имен для создания или открытия</th>
       <th align="left" valign="top">Идентификатор после открытия</th>
       <th align="left" valign="top">Posix.1 1996</th>
       <th align="left" valign="top">Unix 98</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Канал</td>
       <td align="left" valign="top">(Без имени)</td>
       <td align="left" valign="top">Дескриптор</td>
       <td align="left" valign="top">•</td>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">FIFO</td>
       <td align="left" valign="top">Имя файла (pathname)</td>
       <td align="left" valign="top">Дескриптор</td>
       <td align="left" valign="top">•</td>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Взаимное исключение Posix</td>
       <td align="left" valign="top">(Без имени)</td>
       <td align="left" valign="top">Указатель типа pthread_mutex_t</td>
       <td align="left" valign="top">•</td>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Условная переменная Posix</td>
       <td align="left" valign="top">(Без имени)</td>
       <td align="left" valign="top">Указатель типа pthread_cond_t</td>
       <td align="left" valign="top">•</td>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Блокировка чтения-записи Posix</td>
       <td align="left" valign="top">(Без имени)</td>
       <td align="left" valign="top">Указатель типа pthread_rwlock_t</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Блокировка записей fcntl</td>
       <td align="left" valign="top">Имя файла</td>
       <td align="left" valign="top">Дескриптор</td>
       <td align="left" valign="top">•</td>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Разделяемая память Posix</td>
       <td align="left" valign="top">Posix-имя IPC</td>
       <td align="left" valign="top">Дескриптор</td>
       <td align="left" valign="top">•</td>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Очередь сообщений System V</td>
       <td align="left" valign="top">Ключ key_t</td>
       <td align="left" valign="top">Идентификатор IPC System V</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Семафор System V</td>
       <td align="left" valign="top">Ключ key_t</td>
       <td align="left" valign="top">Идентификатор IPC System V</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Разделяемая память System V</td>
       <td align="left" valign="top">Ключ key_t</td>
       <td align="left" valign="top">Идентификатор IPC System V</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Двери (doors)</td>
       <td align="left" valign="top">Имя файла</td>
       <td align="left" valign="top">Дескриптор</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Удаленный вызов процедур (RPC) Sun</td>
       <td align="left" valign="top">Программа/версия</td>
       <td align="left" valign="top">Дескриптор (handle) RPC</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Сокет TCP</td>
       <td align="left" valign="top">IP-адрес и порт TCP</td>
       <td align="left" valign="top">Дескриптор</td>
       <td align="left" valign="top">.1g</td>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Сокет UDP</td>
       <td align="left" valign="top">IP-адрес и порт TCP</td>
       <td align="left" valign="top">Дескриптор</td>
       <td align="left" valign="top">.1g</td>
       <td align="left" valign="top">•</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Доменный сокет Unix (domain socket)</td>
       <td align="left" valign="top">Полное имя файла</td>
       <td align="left" valign="top">Дескриптор</td>
       <td align="left" valign="top">.1g</td>
       <td align="left" valign="top">•</td>
      </tr>
     </table>
     <p>Здесь также указано, какие формы IPC содержатся в стандарте Posix.1 1996 года и какие были включены в стандарт Unix 98. Об обоих этих стандартах более подробно рассказано в разделе 1.7. Для сравнения мы включили в эту таблицу три типа сокетов, которые подробно описаны в [24]. Обратите внимание, что интерфейс сокетов (Application Program Interface — API) стандартизируется рабочей группой Posix.1g и должен в будущем стать частью стандарта Posix.1.</p>
     <p>Хотя стандарт Posix. 1 и дает возможность использования семафоров, их поддержка не является обязательной для производителей. В табл. 1.3 сведены функции, описанные в стандартах Posix.1 и Unix 98. Каждая функция может быть обязательной (mandatory), неопределенной (not defined) или необязательной (дополнительной — optional). Для необязательных функций мы указываем имя константы (например, _POSIX_THREADS), которая будет определена (обычно в заголовочном файле &lt;unistd.h&gt;), если эта функция поддерживается. Обратите внимание, что Unix 98 содержит в себе Posix.1 в качестве подмножества.</p>
     <empty-line/>
     <p>Таблица 1.3. Доступность различных форм IPC</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Тип IPC</th>
       <th align="left" valign="top">Posix.1 1996</th>
       <th align="left" valign="top">Unix 98</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Программный канал</td>
       <td align="left" valign="top">Обязателен</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">FIFO</td>
       <td align="left" valign="top">Обязателен</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Взаимное исключение Posix</td>
       <td align="left" valign="top">_POSIX_THREADS</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Условная переменная Posix</td>
       <td align="left" valign="top">_POSIX_THREADS</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Взаимные исключения и условные переменные между процессами</td>
       <td align="left" valign="top">_POSIX_THREADS_PROCESS_SHARED</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Блокировка чтения-записи Posix</td>
       <td align="left" valign="top">(He определен)</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Блокировка записей fcntl</td>
       <td align="left" valign="top">Обязателен</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Очередь сообщений Posix</td>
       <td align="left" valign="top">_POSIX_MESSAGE_PASSING</td>
       <td align="left" valign="top">_XOPEN_REALTIME</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Семафоры Posix</td>
       <td align="left" valign="top">_POSIX_SEMAPHORES_</td>
       <td align="left" valign="top">_XOPEN_REALTIME</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Память с общим доступом Posix</td>
       <td align="left" valign="top">_POSIX_SHARED_MEMORY_OBJECTS</td>
       <td align="left" valign="top">_XOPEN_REALTIME</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Очередь сообщений System V</td>
       <td align="left" valign="top">(He определен)</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Семафор System V</td>
       <td align="left" valign="top">(He определен)</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Память с общим доступом System V</td>
       <td align="left" valign="top">(He определен)</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Двери (doors)</td>
       <td align="left" valign="top">(He определен)</td>
       <td align="left" valign="top">(Не определен)</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Удаленный вызов процедур Sun</td>
       <td align="left" valign="top">(He определен)</td>
       <td align="left" valign="top">(Не определен)</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Отображение памяти mmap</td>
       <td align="left" valign="top">_POSIX_MAPPED_FILES или POSIX_SHARED_MEMORY_OBJECTS</td>
       <td align="left" valign="top">Обязателен</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Сигналы реального времени (realtime signals)</td>
       <td align="left" valign="top">_POSIX_REALTIME_SIGNALS</td>
       <td align="left" valign="top">_XOPEN_REALTIME</td>
      </tr>
     </table>
    </section>
    <section>
     <title>
      <p>1.5. Действие команд fork, exec и exit на объекты IPC</p>
     </title>
     <p>Нам нужно достичь понимания действия функций fork, exec и _exit на различные формы IPC, которые мы обсуждаем (последняя из перечисленных функций вызывается функцией exit). Информация по этому вопросу сведена в табл. 1.4.</p>
     <p>Большинство функций описаны далее в тексте книги, но здесь нужно сделать несколько замечаний. Во-первых, вызов fork из многопоточного процесса (multithreaded process) приводит к беспорядку в безымянных переменных синхронизации (взаимных исключениях, условных переменных, блокировках и семафорах, хранящихся в памяти). Раздел 6.1 книги [3] содержит необходимые детали. Мы просто отметим в добавление к таблице, что если эти переменные хранятся в памяти с общим доступом и создаются с атрибутом общего доступа для процессов, они будут доступны любому процессу, который может обращаться к этой области памяти. Во-вторых, три формы IPC System V не могут быть открыты или закрыты. Из листинга 6.6 и упражнений 11.1 и 14.1 видно, что все, что нужно знать, чтобы получить доступ к этим трем формам IPC, — это идентификатор. Поэтому они доступны всем процессам, которым известен этот идентификатор, хотя для семафоров и памяти с общим доступом требуется некая особая обработка.</p>
     <empty-line/>
     <p>Таблица 1.4. Действие fork, exec и _exit на IPC</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Тип IPC</th>
       <th align="left" valign="top">fork</th>
       <th align="left" valign="top">exec</th>
       <th align="left" valign="top">_exit</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Неименованные и именованные каналы</td>
       <td align="left" valign="top">Порожденный процесс получает копии всех дескрипторов родительского процесса</td>
       <td align="left" valign="top">Все открытые дескрипторы остаются открытыми, если для них не установлен бит FD_CLOEXEC</td>
       <td align="left" valign="top">Все открытые дескрипторы закрываются, данные из программного канала и FIFO удаляются после последнего закрытия</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Очереди сообщений Posix</td>
       <td align="left" valign="top">Порожденный процесс получает копии всех открытых родительских процессов</td>
       <td align="left" valign="top">Все открытые дескрипторы очередей сообщений закрываются</td>
       <td align="left" valign="top">Все открытые дескрипторы очередей сообщений закрываются</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Очереди сообщений System V</td>
       <td align="left" valign="top">Не действует</td>
       <td align="left" valign="top">Не действует</td>
       <td align="left" valign="top">Не действует</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Взаимные исключения и условные переменные Posix</td>
       <td align="left" valign="top">Общий доступ, если используется разделяемая память с атрибутом разделения между процессами</td>
       <td align="left" valign="top">Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения</td>
       <td align="left" valign="top">Исчезает, если не находится в разделяемой памяти, которая остается открытой и имеет атрибут разделения</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Блокировки чтения-записи Posix</td>
       <td align="left" valign="top">Общий доступ, если используется память с общим доступом и атрибутом разделения между процессами</td>
       <td align="left" valign="top">Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения</td>
       <td align="left" valign="top">Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Семафоры Posix, хранящиеся в памяти</td>
       <td align="left" valign="top">Общий доступ, если используется память с общим доступом и атрибутом разделения между процессами</td>
       <td align="left" valign="top">Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения</td>
       <td align="left" valign="top">Исчезает, если не хранится в разделяемой памяти, которая остается открытой и имеет атрибут разделения</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Именованные семафоры Posix</td>
       <td align="left" valign="top">Все открытые в родительском процессе остаются открытыми в порожденном</td>
       <td align="left" valign="top">Все открытые закрываются</td>
       <td align="left" valign="top">Все открытые закрываются</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Семафоры System V</td>
       <td align="left" valign="top">Все значения semadj в порожденном процессе устанавливаются в 0</td>
       <td align="left" valign="top">Все значения semadj передаются новой программе</td>
       <td align="left" valign="top">Все значения semadj добавляются к значению соответствующего семафора</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Блокировка записей fcntl</td>
       <td align="left" valign="top">Блокировки в родительском процессе не наследуются порожденным процессом</td>
       <td align="left" valign="top">Блокировки не изменяются до тех пор, пока не закроется дескриптор</td>
       <td align="left" valign="top">Все несброшенные блокировки, установленные процессом, снимаются</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Отображение памяти</td>
       <td align="left" valign="top">Отображения памяти родительского процесса сохраняются в порожденном</td>
       <td align="left" valign="top">Отображения памяти сбрасываются (unmap)</td>
       <td align="left" valign="top">Отображения памяти сбрасываются</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Разделяемая память Posix</td>
       <td align="left" valign="top">Отображения памяти родительского процесса сохраняются в порожденном</td>
       <td align="left" valign="top">Отображения памяти сбрасываются</td>
       <td align="left" valign="top">Отображения памяти сбрасываются</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Разделяемая память System V</td>
       <td align="left" valign="top">Присоединенные сегменты разделяемой памяти остаются присоединенными в порожденном процессе</td>
       <td align="left" valign="top">Присоединенные сегменты разделяемой памяти отсоединяются</td>
       <td align="left" valign="top">Присоединенные сегменты разделяемой памяти отсоединяются</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Двери (doors)</td>
       <td align="left" valign="top">Порожденный процесс получает копии всех открытых дескрипторов родительского процесса, но только родительский процесс является сервером при активизации дверей через дескрипторы</td>
       <td align="left" valign="top">Все дескрипторы дверей должны быть закрыты, потому что они создаются с установленным битом FD_CLOEXEC</td>
       <td align="left" valign="top">Все открытые дескрипторы закрываются</td>
      </tr>
     </table>
    </section>
    <section>
     <title>
      <p>1.6. Обработка ошибок: функции-обертки</p>
     </title>
     <section>
      <p>В любой реальной программе при любом вызове требуется проверка возвращаемого значения на наличие ошибки. Поскольку обычно работа программ при возникновении ошибок завершается, мы можем сократить объем текста, определив функции-обертки (wrapper functions), которые осуществляют собственно вызов функции, проверяют возвращаемое значение и завершают работу при возникновении ошибок. В соответствии с соглашениями имена функций-оберток совпадают с именами самих функций, за исключением первой буквы, которая делается заглавной, например </p>
      <p><code>Sem_post(ptr);</code></p>
      <p>Пример функции-обертки приведен в листинге 1.1<a l:href="#n_1" type="note">[1]</a> </p>
      <subtitle>Листинг 1.1. Функция-обертка к функции sem_post</subtitle>
      <p><code>// lib/wrapunix.c</code></p>
      <p><code>387 void</code></p>
      <p><code>388 Sem_post(sem_t *sem)</code></p>
      <p><code>389 {</code></p>
      <p><code>390  if (sem_post(sem) == –1)</code></p>
      <p><code>391   err_sys("sem_post error");</code></p>
      <p><code>392 }</code></p>
      <p>Если в тексте вы встретите имя функции, начинающееся с заглавной буквы, знайте: это наша собственная функция-обертка. Она вызывает функцию с тем же именем, начинающимся со строчной буквы. Функция-обертка приводит к завершению работы процесса с выводом сообщения об ошибке, если таковая возникает.</p>
      <p>При описании исходного кода, включенного в книгу, мы всегда говорим о вызываемой функции самого низкого уровня (например, sem_post), а не о функции-обертке (например, Sem_post). Аналогично в алфавитном указателе приведены имена самих функций, а не оберток к ним.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Вышеприведенный формат исходного кода используется во всем тексте. Все непустые строки нумеруются. Текст, описывающий разделы кода, начинается с номеров первой и последней строк на пустом поле слева. Иногда перед абзацем текста присутствует краткий заголовок, набранный полужирным шрифтом, излагающий основное содержание описываемого кода.</p>
       <p>В начале кода указывается имя исходного файла. В данном примере — это файл wrapunix.c в каталоге lib. Поскольку исходный код всех примеров этой книги распространяется свободно (см. предисловие), вы можете легко найти требуемый файл. Компиляция, выполнение и особенно изменение этих программ в процессе чтения книги — лучший способ изучить концепции взаимодействия процессов.</p>
      </cite>
      <p>Хотя может показаться, что использовать такие функции-обертки не слишком выгодно, вы избавитесь от этого заблуждения в главе 7, где мы обнаружим, что функции для работы с потоками (thread functions) не присваивают значение стандартной переменной Unix errno при возникновении ошибки; вместо этого код ошибки просто возвращается функцией. Это означает, что при вызове функции pthread мы должны каждый раз выделять память под переменную, сохранять в ней возвращаемое функцией значение, а затем устанавливать значение переменной errno равным этой переменной, прежде чем вызывать функцию err_sys (листинг В.4). Чтобы не загромождать текст фигурными скобками, мы используем оператор языка Си «запятая» (comma) и совмещаем присваивание значения переменной errno и вызов err_sys в одном операторе, как в нижеследующем примере:</p>
      <p><code>int n;</code></p>
      <p><code>if ((n = pthread_mutex_lock(&amp;ndone_mutex))!=0) errno=n, err_sys("pthread_mutex_lock error");</code></p>
      <p>Альтернативой является определение новой функции обработки ошибок, принимающей код ошибки в качестве аргумента. Однако мы можем сделать этот фрагмент кода гораздо более читаемым, записав</p>
      <p><code>Pthread_mutex_lock(&amp;ndone_mutex);</code></p>
      <p>где используется наша собственная функция-обертка, приведенная в листинге 1.2.</p>
      <subtitle>Листинг 1.2. Реализация обертки к функции pthread_mutex_lock</subtitle>
      <p><code>//lib/wrappthread.c</code></p>
      <p><code>125 void</code></p>
      <p><code>126 Pthread_mutex_lock(pthread_mutex_t *mptr)</code></p>
      <p><code>127 {</code></p>
      <p><code>128  int n;</code></p>
      <p><code>129  if ((n=pthread_mutex_lock(mptr))==0)</code></p>
      <p><code>130   return;</code></p>
      <p><code>131  errno=n;</code></p>
      <p><code>132  err_sys("pthread_mutex_lock error");</code></p>
      <p><code>133 }</code></p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Аккуратно используя возможности языка Си, мы могли бы применять макросы вместо функций, что увеличило бы скорость выполнения программ, но эти функции-обертки редко бывают (если вообще бывают) узким местом.</p>
       <p>Наше соглашение о замене первой буквы имени функции на заглавную является компромиссом. Рассматривалось много других форм записи: использование префикса е ([10, с. 182]), суффикса _е и т. д. Наш вариант кажется наименее отвлекающим внимание и одновременно дающим визуальное указание на то, что вызывается какая-то другая функция.</p>
       <p>Этот метод имеет побочное полезное свойство: проверяются ошибки, возвращаемые функциями, код возврата которых обычно игнорируется, например close и pthread_ mutex_lock.</p>
      </cite>
      <p>Далее в тексте книги мы будем использовать эти функции-обертки, если только не потребуется явно проверить наличие ошибки и обработать ее произвольным образом, отличным от завершения процесса. Мы не приводим в книге исходный код для всех оберток, но он свободно доступен в Интернете (см. предисловие).</p>
     </section>
     <section>
      <title>
       <p>Значение errno</p>
      </title>
      <p>При возникновении ошибки в функции Unix глобальной переменной errno присваивается положительное значение, указывающее на тип ошибки; при этом функция обычно возвращает значение –1. Наша функция err_sys выводит соответствующее коду ошибки сообщение (например, Resource temporarily unavailable — ресурс временно недоступен, — если переменная errno имеет значение EAGAIN).</p>
      <p>Функция присваивает значение переменной errno только при возникновении ошибки. В случае нормального завершения работы значение этой переменной не определено. Все положительные значения соответствуют константам с именами из заглавных букв, начинающимися с Е, определяемым обычно в заголовочном файле &lt;sys/errno.h&gt;. Отсутствию ошибок соответствует значение 0. </p>
      <p>При работе с несколькими потоками в каждом из них должна быть собственная переменная errno. Выделение переменной каждому потоку происходит автоматически, однако обычно это требует указания компилятору на то, что должна быть возможность повторного входа в программу. Задается это с помощью ключей –D_REENTRANT или –D_POSIX_C_SOURCE=199506L или аналогичных. Часто в заголовке &lt;errno.h&gt; переменная errno определяется как макрос, раскрываемый в вызов функции, если определена константа _REENTRANT. Функция обеспечивает доступ к копии errno, относящейся к данному потоку.</p>
      <p>Далее в тексте мы используем выражения наподобие «функция mq_send возвращает EMSGSIZE», означающие, что функция возвращает ошибку (обычно возвращаемое значение при этом равно –1) и присваивает переменной errno значение указанной константы.</p>
     </section>
    </section>
    <section>
     <title>
      <p>1.7. Стандарты Unix</p>
     </title>
     <section>
      <p>В настоящее время стандарты Unix определяются Posix и The Open Group.</p>
     </section>
     <section>
      <title>
       <p>Posix</p>
      </title>
      <p>Название Posix образовано от «Portable Operating System Interface», что означает приблизительно «интерфейс переносимых операционных систем». Это не один стандарт, а целое семейство, разработанное Институтом инженеров по электротехнике и радиоэлектронике (Institute for Electrical and Electronics Engineers — IEEE). Стандарты Posix были также приняты в качестве международных стандартов ISO (International Organization for Standardization, Международная организация по стандартизации) и IEC (International Electrotechnical Commission, Международная электротехническая комиссия), или ISO/IEC. Стандарты Posix прошли несколько стадий разработки.</p>
      <p>&#9632; Стандарт IEEE 1003.1-1988 (317 страниц) был первым стандартом Posix. Он определял интерфейс взаимодействия языка С с ядром Unix-типа в следующих областях: примитивы для реализации процессов (вызовы fork, exec, сигналы и таймеры), среда процесса (идентификаторы пользователей, группы процессов), файлы и каталоги (все функции ввода-вывода), работа с терминалом, базы данных системы (файлы паролей и групп), форматы архивов tar и cpio.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Первый стандарт Posix вышел в рабочем варианте под названием IEEEIX в 1986 году. Название Posix было предложено Ричардом Штолманом (Richard Stallman). </p>
      </cite>
      <p>&#9632; Затем вышел стандарт IEЕЕ 1003.1-1990 (356 страниц). Он одновременно являлся и международным стандартом ISO/IEC 9945-1:1990. По сравнению с версией 1988 года изменения в версии 1990 года были минимальными. К заголовку было добавлено: «Part 1: System Application Program Interface (API) [C Language]» («Часть 1: Системный интерфейс разработки программ (API) [Язык С])», и это означало, что стандарт описывал программный интерфейс (API) языка С. </p>
      <p>&#9632; IEEE 1003.2-1992 вышел в двух томах общим объемом около 1300 страниц, и его заголовок содержал строку «Part 2: Shell and Utilities» (Часть 2: «Интерпретатор и утилиты»). Эта часть определяла интерпретатор (основанный на Bourne shell в Unix System V) и около ста утилит (программ, обычно вызываемых из интерпретатора — от awk и basename до vi и уасс). В настоящей книге мы будем ссылаться на этот стандарт под именем Posix. 2.</p>
      <p>&#9632; IEEE 1003.1b-1993 (590 страниц) изначально был известен как IEEE P1003.4. Этот стандарт представлял собой дополнение к стандарту 1003.1-1990 и включал расширения реального времени, разработанные рабочей группой Р1003.4: синхронизацию файлов, асинхронный ввод-вывод, семафоры, управление памятью, планирование выполнения (scheduling), часы, таймеры и очереди сообщений.</p>
      <p>&#9632; IEEE 1003.1, издание 1996 года [8] (743 страницы), включает 1003.1-1990 (базовый интерфейс API), 1003.1b-1993 (расширения реального времени), 1003.1-1995 (Pthreads — программные потоки Posix) и 1003.1i-1995 (технические поправки к 1003.1b). Этот стандарт также называется ISO/IEC 9945-1: 1996. В него были добавлены три главы о потоках и дополнительные разделы, касающиеся синхронизации потоков (взаимные исключения и условные переменные), планирование выполнения потоков, планирование синхронизации. В настоящей книге мы называем этот стандарт Posix.1.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Более четверти из 743 страниц стандарта представляли собой приложение, озаглавленное «Rationale and Notes» («Обоснование и примечания»). Это обоснование содержит историческую информацию и объяснение причин, по которым некоторые функции были или не были включены в стандарт. Часто обоснование оказывается не менее полезным, чем собственно стандарт.</p>
       <p>К сожалению, стандарты IEEE не являются свободно доступными через Интернет. Информация о том, где можно заказать книгу, дана в библиографии под ссылкой [8]. Обратите внимание, что семафоры были определены в стандарте расширений реального времени, отдельно от взаимных исключений и условных переменных (которые были определены в стандарте Pthreads), что объясняет некоторые различия в интерфейсах API этих средств.</p>
       <p>Наконец, заметим, что блокировки чтения-записи не являются частью стандартов Posix. Об этом более подробно рассказано в главе 8. </p>
      </cite>
      <p>В будущем планируется выход новой версии IEEE 1003.1, включающей стандарт P1003.1g, сетевые интерфейсы (сокеты и XTI), которые описаны в первом томе этой книги.</p>
      <p>В предисловии стандарта Posix.1 1996 года утверждается, что стандарт ISO/IEC 9945 состоит из следующих частей:</p>
      <p>1. Системный интерфейс разработки программ (API) (язык С).</p>
      <p>2. Интерпретатор и утилиты.</p>
      <p>3. Администрирование системы (в разработке).</p>
      <p>Части 1 и 2 представляют собой то, что мы называем Posix.1 и Posix.2. </p>
      <p>Работа над стандартами Posix постоянно продолжается, и авторам книг, с ними связанных, приходится заниматься стрельбой по движущейся мишени. О текущем состоянии стандартов можно узнать на сайте http://www.pasc.org/standing/sd11.html.</p>
     </section>
     <section>
      <title>
       <p>The Open Group</p>
      </title>
      <p>The Open Group (Открытая группа) была сформирована в 1996 году объединением X/Open Company (основана в 1984 году) и Open Software Foundation (OSF, основан в 1988 году). Эта группа представляет собой международный консорциум производителей и потребителей из промышленности, правительства и образовательных учреждений. Их стандарты тоже выходили в нескольких версиях:</p>
      <p>&#9632; В 1989 году Х/Open опубликовала 3-й выпуск X/Open Portability Guide (Руководство по разработке переносимых программ) — XPG3.</p>
      <p>&#9632; В 1992 году был опубликован четвертый выпуск (Issue 4), а в 1994 году — вторая его версия (Issue 4, Version 2). Последняя известна также под названием Spec 1170, где магическое число 1170 представляет собой сумму количества интерфейсов системы (926), заголовков (70) и команд (174). Есть и еще два названия: X/Open Single Unix Specification (Единая спецификация Unix) и Unix 95.</p>
      <p>&#9632; В марте 1997 года было объявлено о выходе второй версии Единой спецификации Unix. Этот стандарт программного обеспечения называется также Unix 98, и именно так мы ссылаемся на эту спецификацию далее в тексте книги. Количество интерфейсов в Unix 98 возросло с 1170 до 1434, хотя для рабочей станции это количество достигает 3030, поскольку в это число включается CDE (Common Desktop Environment — общее окружение рабочего стола), которое, в свою очередь, требует системы X Window System и пользовательского интерфейса Motif. Подробно об этом написано в книге [9]. Полезную информацию можно также найти по адресу http://www.UNIX-systems.org/version2.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>С этого сайта можно свободно скачать единую спецификацию Unix практически целиком.</p>
      </cite>
     </section>
     <section>
      <title>
       <p>Версии Unix и переносимость</p>
      </title>
      <p>Практически все версии Unix, с которыми можно столкнуться сегодня, соответствуют какому-либо варианту стандарта Posix.1 или Posix.2. Мы говорим «какому-либо», потому что после внесения изменений в Posix (например, Добавление расширений реального времени в 1993 и потоков в 1996) производителям обычно требуется год или два, чтобы подогнать свои программы под эти стандарты.</p>
      <p>Исторически большинство систем Unix являются потомками либо BSD, либо System V, но различия между ними постепенно стираются, по мере того как производители переходят к использованию стандартов Posix. Основные различия лежат в области системного администрирования, поскольку ни один стандарт Posix на данный момент не описывает эту область.</p>
      <p>В большинстве примеров этой книги мы использовали операционные системы Solaris 2.6 и Digital Unix 4.0B. Дело в том, что на момент написания книги (конец 1997 — начало 1998 года) только эти две операционные системы поддерживали System V IPC, Posix IPC и программные потоки Posix (Pthreads).</p>
     </section>
    </section>
    <section>
     <title>
      <p>1.8. Комментарий к примерам IPC</p>
     </title>
     <p>Чаще всего для иллюстрации различных функций в книге используются три шаблона (модели) взаимодействия:</p>
     <p>1. Сервер файлов: приложение клиент-сервер, причем клиент посылает серверу запрос с именем файла, а сервер возвращает клиенту его содержимое.</p>
     <p>2. Производитель-потребитель: один или несколько потоков или процессов (производителей) помещают данные в буфер общего пользования, а другие потоки или процессы (потребители) производят с этими данными различные операции.</p>
     <p>3. Увеличение последовательного номера: один или несколько потоков или процессов увеличивают общий для всех индекс. Число это может храниться в файле с общим доступом или в совместно используемой области памяти.</p>
     <p>Первый пример иллюстрирует различные формы передачи сообщений, а других два — разнообразные виды синхронизации и использования разделяемой памяти.</p>
     <p>Таблицы 1.5, 1.6 и 1.7 представляют собой своего рода путеводитель по разрабатываемым нами программам на различные темы, изложенные в книге. В этих таблицах кратко описаны сами программы и указаны номера соответствующих листингов.</p>
    </section>
    <section>
     <title>
      <p>1.9. Резюме</p>
     </title>
     <p>Взаимодействие процессов традиционно является одной из проблемных областей в Unix. По мере развития системы предлагались различные решения, и ни одно из них не было совершенным. Мы подразделяем IPC на четыре главных типа.</p>
     <p>1. Передача сообщений (каналы, FIFO, очереди сообщений).</p>
     <p>2. Синхронизация (взаимные исключения, условные переменные, блокировки чтения-записи, семафоры).</p>
     <p>3. Разделяемая память (неименованная и именованная).</p>
     <p>4. Вызов процедур (двери в Solaris, RPC Sun).</p>
     <p>Мы рассматриваем взаимодействие как отдельных потоков одного процесса, так и нескольких независимых процессов.</p>
     <p>Живучесть каждого типа IPC определяется либо процессом, либо ядром, либо файловой системой в зависимости от продолжительности его существования. При выборе типа IPC для конкретного применения нужно учитывать его живучесть.</p>
     <p>Другим свойством каждого типа IPC является пространство имен, определяющее идентификацию объектов IPC процессами и потоками, использующими его. Некоторые объекты не имеют имен (каналы, взаимные исключения, условные переменные, блокировки чтения-записи), другие обладают именами в рамках файловой системы (каналы FIFO), третьи характеризуются тем, что в главе 2 названо «именами IPC стандарта Posix», а четвертые — еще одним типом имен, который описан в главе 3 (ключи или идентификаторы IPC стандарта System V). Обычно сервер создает объект IPC с некоторым именем, а клиенты используют это имя для получения доступа к объекту.</p>
     <p>В исходных кодах, приведенных в книге, используются функции-обертки, описанные в разделе 1.6, позволяющие уменьшить объем кода, обеспечивая, тем не менее, проверку возврата ошибки для любой вызываемой функции. Имена всех функций-оберток начинаются с заглавной буквы.</p>
     <p>Стандарты IEEE Posix — Posix.1, определяющий основы интерфейса С в Unix, и Posix.2, определяющий основные команды, — это те стандарты, к которым движутся большинство производителей. Однако стандарты Posix в настоящее время быстро поглощаются (включаются в качестве части) и расширяются коммерческими стандартами, в частности The Open Group (Unix 98).</p>
     <empty-line/>
     <p>Таблица 1.5. Версии модели клиент-сервер  </p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Листинг</th>
       <th align="left" valign="top">Описание</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4.1</td>
       <td align="left" valign="top">Два канала между родительским и порожденным процессами</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4.5</td>
       <td align="left" valign="top">Использует popen и cat</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4.6</td>
       <td align="left" valign="top">Использует два канала FIFO между родительским и порожденным процессами</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4.7</td>
       <td align="left" valign="top">Два канала FIFO между независимым сервером и неродственным клиентом</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4.10</td>
       <td align="left" valign="top">Каналы FIFO между независимым последовательным сервером и несколькими клиентами</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4.12</td>
       <td align="left" valign="top">Программный канал или FIFO: формирование записей в потоке байтов</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">6.7</td>
       <td align="left" valign="top">Две очереди сообщений System V</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">6.12</td>
       <td align="left" valign="top">Одна очередь сообщений System V с несколькими клиентами</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">6.16</td>
       <td align="left" valign="top">Одна очередь сообщений System V для каждого клиента; клиентов несколько</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">15.15</td>
       <td align="left" valign="top">Передача дескриптора через дверь</td>
      </tr>
     </table>
     <empty-line/>
     <p>Таблица 1.6. Версии модели производитель-потребитель</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Листинг</th>
       <th align="left" valign="top">Описание</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">7.1</td>
       <td align="left" valign="top">Взаимное исключение, несколько производителей, один потребитель</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">7.5</td>
       <td align="left" valign="top">Взаимное исключение и условная переменная, несколько производителей, один потребитель</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">10.8</td>
       <td align="left" valign="top">Именованные семафоры Posix, один производитель, один потребитель</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">10.11</td>
       <td align="left" valign="top">Семафоры Posix в памяти, один производитель, один потребитель</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">10.12</td>
       <td align="left" valign="top">Семафоры Posix в памяти, несколько производителей, один потребитель</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">10.15</td>
       <td align="left" valign="top">Семафоры Posix в памяти, несколько производителей, несколько потребителей</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">10.18</td>
       <td align="left" valign="top">Семафоры Posix в памяти, один производитель, один потребитель: несколько буферов</td>
      </tr>
     </table>
     <empty-line/>
     <p>Таблица 1.7. Версии программы с увеличением последовательного номера</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Листинг</th>
       <th align="left" valign="top">Описание</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">9.1</td>
       <td align="left" valign="top">Индекс в файле, без блокировки</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">9.3</td>
       <td align="left" valign="top">Индекс в файле, блокировка с помощью fcntl</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">9.9</td>
       <td align="left" valign="top">Индекс в файле, блокировка с использованием функции open</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">10.10</td>
       <td align="left" valign="top">Индекс в файле, блокировка с помощью именованного семафора Posix</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">12.2</td>
       <td align="left" valign="top">Индекс в общей памяти mmap, блокировка с помощью именованного семафора Posix</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">12.3</td>
       <td align="left" valign="top">Индекс в общей памяти mmap, блокировка с помощью семафора Posix в памяти</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">12.4</td>
       <td align="left" valign="top">Индекс в неименованной общей памяти 4.4BSD, блокировка с помощью именованного семафора Posix</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">12.5</td>
       <td align="left" valign="top">Индекс в общей памяти SVR4 /dev/zero, блокировка с помощью именованного семафора Posix</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">13.6</td>
       <td align="left" valign="top">Индекс в общей памяти Posix, блокировка с помощью семафора Posix в памяти</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">А.19</td>
       <td align="left" valign="top">Измерение производительности: блокировка взаимным исключением между потоками</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">А.22</td>
       <td align="left" valign="top">Измерение производительности: блокировка чтения-записи между потоками</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">А.23</td>
       <td align="left" valign="top">Измерение производительности: блокировка между потоками с помощью семафоров Posix в памяти</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">А.25</td>
       <td align="left" valign="top">Измерение производительности: блокировка между потоками с помощью именованных семафоров Posix</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">А.28</td>
       <td align="left" valign="top">Измерение производительности: блокировка между потоками с помощью семафоров System V</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">А.29</td>
       <td align="left" valign="top">Измерение производительности: блокировка между потоками с помощью fcntl</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">А.33</td>
       <td align="left" valign="top">Измерение производительности: блокировка между процессами с помощью взаимных исключений</td>
      </tr>
     </table>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. На рис 1.1 изображены два процесса, обращающиеся к одному файлу. Если оба процесса только дописывают данные к концу файла (возможно, длинного), какой нужен будет тип синхронизации?</p>
     <p>2. Изучите заголовочный файл &lt;errno.h&gt; в вашей системе и выясните, как определена errno.</p>
     <p>3. Дополните табл. 1.3 используемыми вами функциями, поддерживаемыми Unix-системами.</p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 2</p>
     <p>Posix IPC</p>
    </title>
    <section>
     <title>
      <p>2.1. Введение</p>
     </title>
     <p>Из имеющихся типов IPC следующие три могут быть отнесены к Posix IPC, то есть к методам взаимодействия процессов, соответствующим стандарту Posix:</p>
     <p>&#9632; очереди сообщений Posix (глава 5);</p>
     <p>&#9632; семафоры Posix (глава 10);</p>
     <p>&#9632; разделяемая память Posix (глава 13).</p>
     <p>Эти три вида IPC обладают общими свойствами, и для работы с ними используются похожие функции. В этой главе речь пойдет об общих требованиях к полным именам файлов, используемых в качестве идентификаторов, о флагах, указываемых при открытии или создании объектов IPC, и о разрешениях на доступ к ним.</p>
     <p>Полный список функций, используемых для работы с данными типами IPC, приведен в табл. 2.1.</p>
     <empty-line/>
     <p>Таблица 2.1. Функции Posix IPC</p>
     <table>
      <tr align="left">
       <th align="left" valign="top"/>
       <th align="left" valign="top">Очереди сообщений</th>
       <th align="left" valign="top">Семафоры</th>
       <th align="left" valign="top">Общая память</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Заголовочный файл</td>
       <td align="left" valign="top">&lt;mqueue.h&gt;</td>
       <td align="left" valign="top">&lt;semaphore.h&gt;</td>
       <td align="left" valign="top">&lt;sys/mman.h&gt;</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Функции для создания, открытия и удаления</td>
       <td align="left" valign="top">mq_open mq_close mq_unlink</td>
       <td align="left" valign="top">sem_open sem_close sem_unlink sem_init sem_destroy</td>
       <td align="left" valign="top">shm_open shm_unlink</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Операции управления</td>
       <td align="left" valign="top">mq_getattr mq_setattr</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">ftruncate fstat</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Операции IPC</td>
       <td align="left" valign="top">mq_send mq_receive mq_notify</td>
       <td align="left" valign="top">sem_wait sem_trywait sem_post sem_getvalue</td>
       <td align="left" valign="top">mmap munmap</td>
      </tr>
     </table>
    </section>
    <section>
     <title>
      <p>2.2. Имена IPC</p>
     </title>
     <section>
      <p>В табл. 1.2 мы отметили, что три типа IPC стандарта Posix имеют идентификаторы (имена), соответствующие этому стандарту. Имя IPC передается в качестве первого аргумента одной из трех функций: mq_open, sem_open и shm_open, причем оно не обязательно должно соответствовать реальному файлу в файловой системе. Стандарт Posix.1 накладывает на имена IPC следующие ограничения:</p>
      <p>&#9632; Имя должно соответствовать существующим требованиям к именам файлов (не превышать в длину РАТНМАХ байтов, включая завершающий символ с кодом 0).</p>
      <p>&#9632; Если имя начинается со слэша (/), вызов любой из этих функций приведет к обращению к одной и той же очереди. В противном случае результат зависит от реализации.</p>
      <p>&#9632; Интерпретация дополнительных слэшей в имени зависит от реализации.</p>
      <p>Таким образом, для лучшей переносимости имена должны начинаться со слэша (/) и не содержать в себе дополнительных слэшей. К сожалению, эти правила, в свою очередь, приводят к проблемам с переносимостью.</p>
      <p>В системе Solaris 2.6 требуется наличие начального слэша и запрещается использование дополнительных. Для очереди сообщений, например, при этом создаются три файла в каталоге /tmp, причем имена этих файлов начинаются с .MQ. Например, если аргумент функции mq_open имеет вид /queue.1234, то созданные файлы будут иметь имена /tmp/.MQDqueue.1234, /tmp/.MQLqueue.1234 и /tmp/.MQPqueue.1234. В то же время в системе Digital Unix 4.0B просто создается файл с указанным при вызове функции именем.</p>
      <p>Проблема с переносимостью возникает при указании имени с единственным слэшем в начале: при этом нам нужно иметь разрешение на запись в корневой каталог. Например, очередь с именем /tmp.1234 допустима стандартом Posix и не вызовет проблем в системе Solaris, но в Digital Unix возникнет ошибка создания файла, если разрешения на запись в корневой каталогу программы нет. Если мы укажем имя /tmp/test.1234, проблемы в Digital Unix и аналогичных системах, создающих файл с указанным именем, пропадут (предполагается существование каталога /tmp и наличие у программы разрешения на запись в него, что обычно для большинства систем Unix), однако в Solaris использование этого имени будет невозможно.</p>
      <p>Для решения подобных проблем с переносимостью следует определять имя в заголовке с помощью директивы #define, чтобы обеспечить легкость его изменения при переносе программы в другую систему.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Разработчики стремились разрешить использование очередей сообщений, семафоров и разделяемой памяти для существующих ядер Unix и в независимых бездисковых системах. Это тот случай, когда стандарт получается чересчур общим и в результате вызывает проблемы с переносимостью. В отношении Posix это называется «как стандарт становится нестандартным».</p>
      </cite>
      <p>Стандарт Posix.1 определяет три макроса:</p>
      <p><code>S_TYPEISMQ(<emphasis>buf</emphasis>)</code></p>
      <p><code>S_TYPEISSEM(<emphasis>buf</emphasis>)</code></p>
      <p><code>S_TYPEISSHM(<emphasis>buf</emphasis>)</code></p>
      <p>которые принимают единственный аргумент — указатель на структуру типа stat, содержимое которой задается функциями fstat, lstat и stat. Эти три макроса возвращают ненулевое значение, если указанный объект IPC (очередь сообщений, семафор или сегмент разделяемой памяти) реализован как особый вид файла и структура stat ссылается на этот тип. В противном случае макрос возвращает 0.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>К сожалению, проку от этих макросов мало, потому что нет никаких гарантий, что эти типы IPC реализованы как отдельные виды файлов. Например, в Solaris 2.6 все три макроса всегда возвращают 0.</p>
       <p>Все прочие макросы, используемые для проверки типа файла, имеют имена, начинающиеся с S_IS, и принимают всегда единственный аргумент: поле st_mode структуры stat. Поскольку макросы, используемые для проверки типа IPC, принимают аргументы другого типа, их имена начинаются с S_TYPEIS. </p>
      </cite>
     </section>
     <section>
      <title>
       <p>Функция px_ipc_name</p>
      </title>
      <p>Существует и другое решение упомянутой проблемы с переносимостью. Можно определить нашу собственную функцию px_ipc_name, которая добавляет требуемый каталог в качестве префикса к имени Posix IPC.</p>
      <p><code>#include "unpipc.h"</code></p>
      <p><code>char *px_ipc_name(const char <emphasis>*name</emphasis>);</code></p>
      <p><code>/* Возвращает указатель при успешном завершении, NULL при возникновении ошибки */</code></p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Так выглядят листинги наших собственных функций, то есть функций, не являющихся стандартными системными. Обычно включается заголовочный файл unpipc.h (листинг B.1).</p>
      </cite>
      <p>Аргумент <emphasis>пате </emphasis>(имя) не должен содержать слэшей. Тогда, например, при вызове px_ipc_name("test1") будет возвращен указатель на строку /test1 в Solaris 2.6 или на строку /tmp/test1 в Digital Unix 4.0B. Память для возвращаемой строки выделяется динамически и освобождается вызовом free. Можно установить произвольное значение переменной окружения PX_IPC_NAME, чтобы задать другой каталог по умолчанию.</p>
      <p>В листинге 2.1<a l:href="#n_1" type="note">[1]</a> приведен наш вариант реализации этой функции.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Возможно, в этом листинге вы в первый раз встретитесь с функцией snprintf. Значительная часть существующих программ используют вместо нее функцию sprintf, однако последняя не производит проверки переполнения приемного буфера. В отличие от нее snprintf получает в качестве второго аргумента размер приемного буфера и впоследствии предотвращает его переполнение. Умышленное переполнение буфера программы, использующей sprintf, в течение многих лет использовалось хакерами для взлома систем.</p>
       <p>Функция snprintf еще не является частью стандарта ANSI С, но планируется ее включение в обновленный стандарт, называющийся С9Х. Тем не менее многие производители включают ее в стандартную библиотеку С. Везде в тексте мы используем функцию snprintf в нашем собственном варианте, обеспечивающем вызов sprintf, если в системной библиотеке функция snprinft отсутствует. </p>
      </cite>
      <subtitle>Листинг 2.1. Функция px_ipc_name в нашей реализации.</subtitle>
      <p><code>//lib/px_ipc_name.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  char *</code></p>
      <p><code>3  px_ipc_name(const char *name)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   char *dir, *dst, *slash;</code></p>
      <p><code>6   if ((dst = malloc(РАТН_МАХ)) == NULL)</code></p>
      <p><code>7    return(NULL);</code></p>
      <p><code>8   /* есть возможность задать другое имя каталога с помощью переменной окружения */</code></p>
      <p><code>9   if ((dir = getenv("PX IPC_NAME")) == NULL) {</code></p>
      <p><code>10 #ifdef POSIX_IPC_PREFIX</code></p>
      <p><code>11   dir = POSIX_IPC_PREFIX; /* из "config.h" */</code></p>
      <p><code>12 #else</code></p>
      <p><code>13   dir = "/tmp/"; /* по умолчанию */</code></p>
      <p><code>14 #endif</code></p>
      <p><code>15  }</code></p>
      <p><code>16  /* имя каталога должно заканчиваться символом '/' */</code></p>
      <p><code>17  slash = (dir[strlen(dir) – 1] == '/') ? "" : "/";</code></p>
      <p><code>18  snprintf(dst, PATH_MAX, "%s%s%s", dir, slash, name);</code></p>
      <p><code>19  return(dst); /* для освобождения этого указателя можно вызвать free() */</code></p>
      <p><code>20 }</code></p>
     </section>
    </section>
    <section>
     <title>
      <p>2.3. Создание и открытие каналов IPC</p>
     </title>
     <p>Все три функции, используемые для создания или открытия объектов IPC: mq_open, sem_open и shm_open, — принимают специальный флаг <emphasis>oflag</emphasis> в качестве второго аргумента. Он определяет параметры открытия запрашиваемого объекта аналогично второму аргументу стандартной функции open. Все константы, из которых можно формировать этот аргумент, приведены в табл. 2.2.</p>
     <empty-line/>
     <p>Таблица 2.2. Константы, используемые при создании и открытии объектов IPC </p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Описание</th>
       <th align="left" valign="top">mq_open</th>
       <th align="left" valign="top">sem_open</th>
       <th align="left" valign="top">shm_open</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Только чтение</td>
       <td align="left" valign="top">О_RDONLY</td>
       <td align="left" valign="top"> </td>
       <td align="left" valign="top">О_RDONLY</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Только запись</td>
       <td align="left" valign="top">О_WRONLY</td>
       <td align="left" valign="top"> </td>
       <td align="left" valign="top"> </td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Чтение и запись</td>
       <td align="left" valign="top">О_RDWR</td>
       <td align="left" valign="top"> </td>
       <td align="left" valign="top">О_RDWR</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Создать, если не существует</td>
       <td align="left" valign="top">О_CREAT</td>
       <td align="left" valign="top">О_CREAT</td>
       <td align="left" valign="top">О_CREAT</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Исключающее создание</td>
       <td align="left" valign="top">О_EXCL</td>
       <td align="left" valign="top">О_EXCL</td>
       <td align="left" valign="top">О_EXCL</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Без блокировки</td>
       <td align="left" valign="top">О_NONBLOCK</td>
       <td align="left" valign="top"> </td>
       <td align="left" valign="top"> </td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Сократить (truncate) существующий</td>
       <td align="left" valign="top"> </td>
       <td align="left" valign="top"> </td>
       <td align="left" valign="top">O_TRUNC </td>
      </tr>
     </table>
     <p>Первые три строки описывают тип доступа к создаваемому объекту: только чтение, только запись, чтение и запись. Очередь сообщений может быть открыта в любом из трех режимов доступа, тогда как для семафора указание этих констант не требуется (для любой операции с семафором требуется доступ на чтение и запись). Наконец, объект разделяемой памяти не может быть открыт только на запись.</p>
     <p>Указание прочих флагов из табл. 2.2 не является обязательным.</p>
     <p>O_CREAT — создание очереди сообщений, семафора или сегмента разделяемой памяти, если таковой еще не существует (см. также флаг O_EXCL, влияющий на результат).</p>
     <p>При создании новой очереди сообщений, семафора или сегмента разделяемой памяти требуется указание по крайней мере одного дополнительного аргумента, определяющего режим. Этот аргумент указывает биты разрешения на доступ к файлу и формируется путем побитового логического сложения констант из табл. 2.3.</p>
     <empty-line/>
     <p>Таблица 2.3. Константы режима доступа при создании нового объекта IPC </p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Константа</th>
       <th align="left" valign="top">Описание</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">S_IRUSR</td>
       <td align="left" valign="top">Владелец — чтение</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">S_IWUSR</td>
       <td align="left" valign="top">Владелец — запись</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">S_IRGRP</td>
       <td align="left" valign="top">Группа — чтение</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">S_IWGRP</td>
       <td align="left" valign="top">Группа — запись</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">S_IROTH</td>
       <td align="left" valign="top">Прочие — чтение</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">S_IWOTH</td>
       <td align="left" valign="top">Прочие — запись </td>
      </tr>
     </table>
     <p>Эти константы определены в заголовке &lt;sys/stat.h&gt;. Указанные биты разрешений изменяются наложением маски режима создания файлов для данного процесса (с. 83-85 [21]) или с помощью команды интерпретатора umask.</p>
     <p>Как и со вновь созданным файлом, при создании очереди сообщений, семафора или сегмента разделяемой памяти им присваивается идентификатор пользователя, соответствующий действующему (effective) идентификатору пользователя процесса. Идентификатор группы семафора или сегмента разделяемой памяти устанавливается равным действующему групповому идентификатору процесса или групповому идентификатору, установленному по умолчанию для системы в целом. Групповой идентификатор очереди сообщений всегда устанавливается равным действующему групповому идентификатору процесса (на с. 77-78 [21] рассказывается о групповых и пользовательских идентификаторах более подробно).</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Кажется странным наличие разницы в установке группового идентификатора для разных видов Posix IPC. Групповой идентификатор нового файла, создаваемого с помощью функции open, устанавливается равным либо действительному идентификатору группы процесса, либо идентификатору группы каталога, в котором создается файл, но функции IPC не могут заранее предполагать, что для объекта IPC создается реальный файл в файловой системе.</p>
     </cite>
     <p>O_EXCL — если этот флаг указан одновременно с O_CREAT, функция создает новую очередь сообщений, семафор или объект разделяемой памяти только в том случае, если таковой не существует. Если объект уже существует и указаны флаги O_CREAT | O_EXCL, возвращается ошибка EEXIST.</p>
     <p>Проверка существования очереди сообщений, семафора или сегмента разделяемой памяти и его создание (в случае отсутствия) должны производиться только одним процессом. Два аналогичных флага имеются и в System V IPC, они описаны в разделе 3.4.</p>
     <p>O_NONBLOCK — этот флаг создает очередь сообщений без блокировки. Блокировка обычно устанавливается для считывания из пустой очереди или записи в полную очередь. Об этом более подробно рассказано в подразделах, посвященных функциям mq_send и mq_receive раздела 5.4.</p>
     <p>O_TRUNC — если уже существующий сегмент общей памяти открыт на чтение и запись, этот флаг указывает на необходимость сократить его размер до 0.</p>
     <p>На рис. 2.1 показана реальная последовательность логических операций при открытии объекта IPC. Что именно подразумевается под проверкой разрешений доступа, вы узнаете в разделе 2.4. Другой подход к изображенному на рис. 2.1 представлен в табл. 2.4. </p>
     <image l:href="#Any2FbImgLoader40"/>
     <p>Рис. 2.1. Логика открытия объекта IPC</p>
     <empty-line/>
     <p>Обратите внимание, что в средней строке табл. 2.4, где задан только флаг O_CREAT, мы не получаем никакой информации о том, был ли создан новый объект или открыт существующий.</p>
     <empty-line/>
     <p>Таблица 2.4. Логика открытия объекта IPC </p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Аргумент oflag</th>
       <th align="left" valign="top">Объект не существует</th>
       <th align="left" valign="top">Объект уже существует</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Нет специальных флагов</td>
       <td align="left" valign="top">Ошибка, errno=ENOENT</td>
       <td align="left" valign="top">OK, открывается существующий объект</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">O_CREAT</td>
       <td align="left" valign="top">OK, создается новый объект</td>
       <td align="left" valign="top">OK, открывается существующий объект</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">O_CREAT|O_EXCL</td>
       <td align="left" valign="top">OK, создается новый объект</td>
       <td align="left" valign="top">Ошибка, errno=EEXIST </td>
      </tr>
     </table>
    </section>
    <section>
     <title>
      <p>2.4. Разрешения IPC</p>
     </title>
     <p>Новая очередь сообщений, именованный семафор или сегмент разделяемой памяти создается функциями mq_open, sem_open и shm_open, при условии, что аргумент <emphasis>oflag</emphasis> содержит константу O_CREAT. Согласно табл. 2.3, любому из данных типов IPC присваиваются определенные права доступа (permissions), аналогичные разрешениям доступа к файлам в Unix.</p>
     <p>При открытии существующей очереди сообщений, семафора или сегмента разделяемой памяти теми же функциями (в случае, когда не указан флаг O_CREAT или указан O_CREAT без O_EXCL и объект уже существует) производится проверка разрешений:</p>
     <p>1. Проверяются биты разрешений, присвоенные объекту IPC при создании.</p>
     <p>2. Проверяется запрошенный тип доступа (O_RDONLY, O_WRONLY, O_RDWR).</p>
     <p>3. Проверяется действующий идентификатор пользователя вызывающего процесса, действующий групповой идентификатор процесса и дополнительные групповые идентификаторы процесса (последние могут не поддерживаться).</p>
     <p>Большинством систем Unix производятся следующие конкретные проверки:</p>
     <p>1. Если действующий идентификатор пользователя для процесса есть 0 (привилегированный пользователь), доступ будет разрешен.</p>
     <p>2. Если действующий идентификатор пользователя процесса совпадает с идентификатором владельца объекта IPC: если соответствующий бит разрешения для пользователя установлен, доступ разрешен, иначе в доступе отказывается.</p>
     <p>Под соответствующим битом разрешения мы подразумеваем, например, бит разрешения на чтение, если процесс открывает объект только для чтения. Если процесс открывает объект для записи, должен быть установлен соответственно бит разрешения на запись для владельца (user-write).</p>
     <p>3. Если действующий идентификатор группы процесса или один из дополнительных групповых идентификаторов процесса совпадает с групповым идентификатором объекта IPC: если соответствующий бит разрешения для группы установлен, доступ будет разрешен, иначе в доступе отказывается.</p>
     <p>4. Если соответствующий бит разрешения доступа для прочих пользователей установлен, доступ будет разрешен, иначе в доступе будет отказано. </p>
     <p>Эти четыре проверки производятся в указанном порядке. Следовательно, если процесс является владельцем объекта IPC (шаг 2), доступ разрешается или запрещается на основе одних только разрешений пользователя (владельца). Разрешения группы при этом не проверяются. Аналогично, если процесс не является владельцем объекта IPC, но принадлежит к нужной группе, доступ разрешается или запрещается на основе разрешений группы — разрешения для прочих пользователей при этом не проверяются.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Согласно табл. 2.2, функция sem_open не использует флаги O_RDONLY, O_WRONLY, O_RDWR. В разделе 10.2, однако, будет сказано о том, что некоторые реализации Unix подразумевают наличие флага O_RDWR, потому что любое обращение к семафору подразумевает чтение и запись его значения.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>2.5. Резюме</p>
     </title>
     <p>Три типа Posix IPC — очереди сообщений, семафоры и разделяемая память — идентифицируются их полными именами. Они могут являться или не являться реальными именами файлов в файловой системе, и это вызывает проблемы с переносимостью. Решение проблемы — использовать собственную функцию px_ipc_name. При создании или открытии объекта IPC требуется указать набор флагов, аналогичных указываемым при использовании функции open. При создании нового объекта IPC требуется указать разрешения для него, используя те же константы S_xxx, что и для функции open (табл. 2.3). При открытии существующего объекта IPC производится проверка разрешений процесса, аналогичная проверке при открытии файла.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Каким образом биты установки идентификатора пользователя (set-user-ID, SUID) и установки идентификатора группы (set-group-ID) (раздел 4.4 [21]) программы, использующей Posix IPC, влияют на проверку разрешений, описанную в разделе 2.4?</p>
     <p>2. Когда программа открывает объект IPC, как она может определить, был ли создан новый объект IPC или производится обращение к существующему объекту? </p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 3</p>
     <p>System V IPC</p>
    </title>
    <section>
     <title>
      <p>3.1. Введение</p>
     </title>
     <p>Из имеющихся типов IPC следующие три могут быть отнесены к System V IPC, то есть к методам взаимодействия процессов, соответствующим стандарту System V:</p>
     <p>&#9632; очереди сообщений System V (глава 6);</p>
     <p>&#9632; семафоры System V (глава 11);</p>
     <p>&#9632; общая память System V (глава 14).</p>
     <p>Термин «System V IPC» говорит о происхождении этих средств: впервые они появились в Unix System V. У них много общего: схожи функции, с помощью которых организуется доступ к объектам; также схожи формы хранения информации в ядре. В этой главе описываются общие для трех типов IPC черты.</p>
     <p>Информация о функциях сведена в табл. 3.1.</p>
     <empty-line/>
     <p>Таблица 3.1. Функции System V IPC</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Очереди сообщений</th>
       <th align="left" valign="top">Семафоры</th>
       <th align="left" valign="top">Общая память</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Заголовочный файл</td>
       <td align="left" valign="top">&lt;sys/msg.h&gt;</td>
       <td align="left" valign="top">&lt;sys/sem.h&gt;</td>
       <td align="left" valign="top">&lt;sys/shm.h&gt;</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Создание или открытие</td>
       <td align="left" valign="top">msgget</td>
       <td align="left" valign="top">semget</td>
       <td align="left" valign="top">shmget</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Операции управления</td>
       <td align="left" valign="top">msgctl</td>
       <td align="left" valign="top">semctl</td>
       <td align="left" valign="top">shmctl</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Операции IPC</td>
       <td align="left" valign="top">msgsnd msgrcv</td>
       <td align="left" valign="top">semop</td>
       <td align="left" valign="top">shmat shmdt</td>
      </tr>
     </table>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Информация об истории разработки и развития функций System V IPC не слишком легко доступна. [16] предоставляет следующую информацию: очереди сообщений, семафоры и разделяемая память этого типа были разработаны в конце 70-х в одном из филиалов Bell Laboratories в городе Колумбус, штат Огайо, для одной из версий Unix, предназначенной для внутреннего использования. Версия эта называлась Columbus Unix, или CB Unix. Она использовалась в так называемых системах поддержки операций — системах обработки транзакций — для автоматизации управления и ведения записей в телефонной компании. System V IPC были добавлены в коммерческую версию Unix System V. приблизительно в 1983 году.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>3.2. Ключи типа key_t и функция ftok</p>
     </title>
     <section>
      <p>В табл. 1.2 было отмечено, что в именах трех типов System V IPC использовались значения key_t. Заголовочный файл &lt;sys/types.h&gt; определяет тип key_t как целое (по меньшей мере 32-разрядное). Значения переменным этого типа обычно присваиваются функцией ftok.</p>
      <p>Функция ftok преобразовывает существующее полное имя и целочисленный идентификатор в значение типа key_t (называемое ключом IPC — IPC key):</p>
      <p><code>#include &lt;sys/ipc.h&gt;</code></p>
      <p><code>key_t ftok(const char <emphasis>*pathname,</emphasis> int <emphasis>id</emphasis>);</code></p>
      <p><code>//Возвращает ключ IPC либо –1 при возникновении ошибки</code></p>
      <p>На самом деле функция использует полное имя файла и младшие 8 бит идентификатора для формирования целочисленного ключа IPC.</p>
      <p>Эта функция действует в предположении, что для конкретного приложения, использующего IPC, клиент и сервер используют одно и то же полное имя объекта IPC, имеющее какое-то значение в контексте приложения. Это может быть имя демона сервера или имя файла данных, используемого сервером, или имя еще какого-нибудь объекта файловой системы. Если клиенту и серверу для связи требуется только один канал IPC, идентификатору можно присвоить, например, значение 1. Если требуется несколько каналов IPC (например, один от сервера к клиенту и один в обратную сторону), идентификаторы должны иметь разные значения: например, 1 и 2. После того как клиент и сервер договорятся о полном имени и идентификаторе, они оба вызывают функцию ftok для получения одинакового ключа IPC.</p>
      <p>Большинство реализаций ftok вызывают функцию stat, а затем объединяют:</p>
      <p>&#9632; информацию о файловой системе, к которой относится полное имя <emphasis>pathname</emphasis> (поле st_dev структуры stat);</p>
      <p>&#9632; номер узла (i-node) в файловой системе (поле st_ino структуры stat);</p>
      <p>&#9632; младшие 8 бит идентификатора (который не должен равняться нулю).</p>
      <p>Из комбинации этих трех значений обычно получается 32-разрядный ключ. Нет никакой гарантии того, что для двух различных путей с одним и тем же идентификатором получатся разные ключи, поскольку количество бит информации в трех перечисленных элементах (идентификатор файловой системы, номер узла, идентификатор IPC) может превышать число бит в целом (см. упражнение 3.5).</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Номер узла всегда отличен от нуля, поэтому большинство реализаций определяют константу IPC_PRIVATE (раздел 3.4) равной нулю.</p>
      </cite>
      <p>Если указанное полное имя не существует или недоступно вызывающему процессу, ftok возвращает значение –1. Помните, что файл, имя которого используется для вычисления ключа, не должен быть одним из тех, которые создаются и удаляются сервером в процессе работы, поскольку каждый раз при создании заново эти файлы получают, вообще говоря, другой номер узла, а это может изменить ключ, возвращаемый функцией ftok при очередном вызове.</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Программа в листинге 3.1 принимает полное имя в качестве аргумента командной строки, вызывает функции stat и ftok, затем выводит значения полей st_dev и st_ino структуры stat и получающийся ключ IPC. Эти три значения выводятся в шестнадцатеричном формате, поэтому легко видеть, как именно ключ IPC формируется из этих двух значений и идентификатора 0x57.</p>
      <subtitle>Листинг 3.1<a l:href="#n_1" type="note">[1]</a>. Получение и вывод информации о файле и созданного ключа IPC</subtitle>
      <p><code>//svipc/ftok.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   struct stat stat;</code></p>
      <p><code>6   if (argc != 2)</code></p>
      <p><code>7    err_quit("usage: ftok &lt;pathname&gt;");</code></p>
      <p><code>8   Stat(argv[1], &amp;stat);</code></p>
      <p><code>9   printf("st_dev: &amp;lx, st_ino: %Ix, key: %x\n",</code></p>
      <p><code>10   (u_long) stat.st_dev, (u_long) stat.st_ino,</code></p>
      <p><code>11   Ftok(argv[1], 0x57));</code></p>
      <p><code>12  exit(0);</code></p>
      <p><code>13 }</code></p>
      <p>Выполнение этой программы в системе Solaris 2.6 приведет к следующим результатам:</p>
      <p><code>solaris %<strong>ftok /etc/system</strong></code></p>
      <p><code>st_dev: 800018, st_ino: 4a1b, key: 57018a1b</code></p>
      <p><code>solaris %<strong>ftok /usr/tmp</strong></code></p>
      <p><code>st_dev: 800015, st_ino: 10b78, key: 57015b78</code></p>
      <p><code>solaris %<strong>ftok /home/rstevens/Mail.out</strong></code></p>
      <p><code>st_dev: 80001f, st_ino: 3b03, key: 5702fb03</code></p>
      <p>Очевидно, идентификатор определяет старшие 8 бит ключа; младшие 12 бит st_dev определяют следующие 12 бит ключа, и наконец, младшие 12 бит st_ino определяют младшие 12 бит ключа.</p>
      <p>Цель этого примера не в том, чтобы впоследствии рассчитывать на такой способ формирования ключа из перечисленной информации, а в том, чтобы проиллюстрировать алгоритм комбинации полного имени и идентификатора конкретной реализацией. В других реализациях алгоритм может быть другим.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>В FreeBSD используются младшие 8 бит идентификатора, младшие 8 бит st_dev и младшие 16 бит st_ino.</p>
       <p>Учтите, что отображение, производимое функцией ftok, — одностороннее, поскольку часть бит st_dev и st_ino не используются. По данному ключу нельзя определить полное имя файла, заданное для вычислений.</p>
      </cite>
     </section>
    </section>
    <section>
     <title>
      <p>3.3. Структура ipc_perm</p>
     </title>
     <p>Для каждого объекта IPC, как для обычного файла, в ядре хранится набор информации, объединенной в структуру.</p>
     <p><code>struct ipc_perm {</code></p>
     <p><code> uid_t uid; /*идентификатор пользователя владельца*/</code></p>
     <p><code> gid_t gid; /*идентификатор группы владельца */</code></p>
     <p><code> uid_t cuid; /*идентификатор пользователя создателя*/</code></p>
     <p><code> gid_t cgid; /*идентификатор группы создателя*/</code></p>
     <p><code> mode_t mode; /*разрешения чтения-записи*/</code></p>
     <p><code> ulong_t seq; /*последовательный номер канала*/</code></p>
     <p><code> key_t key; /* ключ IPC */</code></p>
     <p><code>}</code></p>
     <p>Эта структура вместе с другими переименованными константами для функций System V IPC определена в файле &lt;sys/ipc.h&gt;. В этой главе мы расскажем о полях структуры ipc_perm более подробно.</p>
     <empty-line/>
    </section>
    <section>
     <title>
      <p>3.4. Создание и открытие каналов IPC</p>
     </title>
     <p>Три функции getXXX, используемые для создания или открытия объектов IPC (табл. 3.1), принимают ключ IPC (типа key_t) в качестве одного из аргументов и возвращают целочисленный идентификатор. Этот идентификатор отличается от того, который передавался функции ftok, как мы вскоре увидим. У приложения есть две возможности задания ключа (первого аргумента функций getXXX):</p>
     <p>1. Вызвать ftok, передать ей полное имя и идентификатор.</p>
     <p>2. Указать в качестве ключа константу IPCPRIVATE, гарантирующую создание нового уникального объекта IPC.</p>
     <p>Последовательность действий иллюстрирует рис. 3.1. </p>
     <image l:href="#Any2FbImgLoader48"/>
     <p>Рис. 3.1. Вычисление идентификаторов IPC по ключам</p>
     <empty-line/>
     <p>Все три функции getXXX (табл. 3.1) принимают в качестве второго аргумента набор флагов <emphasis>oflag,</emphasis> задающий биты разрешений чтения-записи (поле mode структуры ipc_perm) для объекта IPC и определяющий, создается ли новый объект IPC или производится обращение к уже существующему. Для этого имеются следующие правила.</p>
     <p>&#9632; Ключ IPC_PRIVATE гарантирует создание уникального объекта IPC. Никакие возможные комбинации полного имени и идентификатора не могут привести к тому, что функция ftok вернет в качестве ключа значение IPC_PRIVATE.</p>
     <p>&#9632; Установка бита IPC_CREAT аргумента <emphasis>oflag</emphasis> приводит к созданию новой записи для указанного ключа, если она еще не существует. Если же обнаруживается существующая запись, возвращается ее идентификатор. </p>
     <p>Одновременная установка битов IPC_CREAT и IPC_EXCL аргумента <emphasis>oflag </emphasis>приводит к созданию новой записи для указанного ключа только в том случае, если такая запись еще не существует. Если же обнаруживается существующая запись, функция возвращает ошибку EEXIST (объект IPC уже существует).</p>
     <p>Комбинация IPC_CREAT и IPC_EXCL в отношении объектов IPC действует аналогично комбинации O_CREAT и O_EXCL для функции open.</p>
     <p>Установка только бита IPC_EXCL без IPC_CREAT никакого эффекта не дает.</p>
     <p>Логическая диаграмма последовательности действий при открытии объекта IPC изображена на рис. 3.2. В табл. 3.2 показан альтернативный взгляд на этот процесс.</p>
     <image l:href="#Any2FbImgLoader50"/>
     <p>Рис. 3.2. Диаграмма открытия объекта IPC</p>
     <empty-line/>
     <p>Обратите внимание, что в средней строке табл. 3.2 для флага IPC_CREAT без IPC_EXCL мы не получаем никакой информации о том, был ли создан новый объект или получен доступ к существующему. Для большинства приложений характерно создание сервером объекта IPC с указанием IPC_CREAT (если безразлично, существует ли уже объект) или IPC_CREAT | IPC_EXCL (если требуется проверка существования объекта). Клиент вообще не указывает флагов, предполагая, что сервер уже создал объект.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Функции System V IPC в отличие от функций Posix IPC определяют свои собственные константы IРС_ххх вместо использования O_CREAT и OEXCL, принимаемых стандартной функцией open (табл. 2.2).</p>
      <p>Обратите также внимание на то, что функции System V IPC совмещают константы IРС_ххх с битами разрешений (описанными в следующем разделе) в едином аргументе oflag, тогда как для функции open и для Posix IPC характерно наличие двух аргументов: oflag, в котором задаются флаги вида О_ххх, и mode, определяющего биты разрешений доступа.</p>
     </cite>
     <empty-line/>
     <p>Таблица 3.2. Логика создания и открытия объектов IPC</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Аргумент oflag</th>
       <th align="left" valign="top">Ключ не существует</th>
       <th align="left" valign="top">Ключ существует</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Специальные флаги не установлены</td>
       <td align="left" valign="top">Ошибка, errno=ENOENT</td>
       <td align="left" valign="top">OK, открытие существующего объекта</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">IPC_CREAT</td>
       <td align="left" valign="top">OK, создается новая запись</td>
       <td align="left" valign="top">OK, открытие существующего</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">IPC CREAT|IPC_EXCL</td>
       <td align="left" valign="top">OK, создается новая запись</td>
       <td align="left" valign="top">Ошибка, errno=EEXIST</td>
      </tr>
     </table>
    </section>
    <section>
     <title>
      <p>3.5. Разрешения IPC</p>
     </title>
     <p>При создании нового объекта IPC с помощью одной из функций getXXX, вызванной с флагом IPC_CREAT, в структуру ipc_perm заносится следующая информация (раздел 3.3):</p>
     <p>1. Часть битов аргумента <emphasis>oflag</emphasis> задают значение поля mode структуры ipc_perm. В табл. 3.3 приведены биты разрешений для трех типов IPC (запись &gt;&gt;3 означает сдвиг вправо на три бита).</p>
     <p>2. Поля cuid и cgid получают значения, равные действующим идентификаторам пользователя и группы вызывающего процесса. Эти два поля называются идентификаторами создателя.</p>
     <p>3. Поля uid и gid структуры iрс_perm также устанавливаются равными действующим идентификаторам вызывающего процесса. Эти два поля называются идентификаторами владельца.</p>
     <empty-line/>
     <p>Таблица 3.3. Значения mode для разрешений чтения-записи IPC </p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Число (восьмеричное)</th>
       <th align="left" valign="top">Очередь сообщений</th>
       <th align="left" valign="top">Семафор</th>
       <th align="left" valign="top">Разделяемая память</th>
       <th align="left" valign="top">Описание</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">0400</td>
       <td align="left" valign="top">MSG_R</td>
       <td align="left" valign="top">SEM_R</td>
       <td align="left" valign="top">SHM_R</td>
       <td align="left" valign="top">Пользователь — чтение</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">0200</td>
       <td align="left" valign="top">MSG_W</td>
       <td align="left" valign="top">SEM_A</td>
       <td align="left" valign="top">SHM_W</td>
       <td align="left" valign="top">Пользователь — запись</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">0040</td>
       <td align="left" valign="top">MSG R&gt;&gt;3</td>
       <td align="left" valign="top">SEM_R&gt;&gt;3</td>
       <td align="left" valign="top">SHM_R&gt;&gt;3</td>
       <td align="left" valign="top">Группа — чтение</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">0020</td>
       <td align="left" valign="top">MSG_W&gt;&gt;3</td>
       <td align="left" valign="top">SEM_A&gt;&gt;3</td>
       <td align="left" valign="top">SHM_W&gt;&gt;3</td>
       <td align="left" valign="top">Группа — запись</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">0004</td>
       <td align="left" valign="top">MSG_R&gt;&gt;6</td>
       <td align="left" valign="top">SEM_R&gt;&gt;6</td>
       <td align="left" valign="top">SHM_R&gt;&gt;6</td>
       <td align="left" valign="top">Прочие — чтение</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">0002</td>
       <td align="left" valign="top">MSG_W&gt;&gt;6</td>
       <td align="left" valign="top">SEM_A&gt;&gt;6</td>
       <td align="left" valign="top">SHM_W&gt;&gt;6</td>
       <td align="left" valign="top">Прочие — запись</td>
      </tr>
     </table>
     <p>Идентификатор создателя изменяться не может, тогда как идентификатор владельца может быть изменен процессом с помощью вызова функции ctlXXX для данного механизма IPC с командой IPC_SET. Три функции ctlXXX позволяют процессу изменять биты разрешений доступа (поле mode) объекта IPC.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В большинстве реализаций определены шесть констант: MSG_R, MSG_W, SEM_R, SEM_A, SHM_R и SHM_W, показанные в табл. 3.3. Константы эти определяются в заголовочных файлах &lt;sys/msg.h&gt;, &lt;sys/sem.h&gt; и &lt;sys/shm.h&gt;. Однако стандарт Unix 98 не требует их наличия. Суффикс А в SEM_A означает «alter» (изменение).</p>
      <p>Тройка функций getXXX не используют стандартную маску создания файла Unix. Разрешения очереди сообщений, семафора и разделяемой памяти устанавливаются в точности равными аргументу функции.</p>
      <p>Posix IPC не дает создателю IPC возможности изменить владельца объекта. В Posix нет аналогов команды IPC_SET. Однако в Posix IPC имя объекта принадлежит файловой системе, и потому владелец может быть изменен привилегированным пользователем с помощью команды chown.</p>
     </cite>
     <p>Когда какой-либо процесс предпринимает попытку доступа к объекту IPC, производится двухэтапная проверка: первый раз при открытии файла (функция getXXX) и затем каждый раз при обращении к объекту IPC:</p>
     <p>1. При установке доступа к существующему объекту IPC с помощью одной из функций getXXX производится первичная проверка аргумента <emphasis>oflag,</emphasis> вызывающего функцию процесса. Аргумент не должен указывать биты доступа, не установленные в поле mode структуры ipc_perm (нижний квадрат на рис. 3.2). Например, процесс-сервер может установить значение члена mode для своей очереди входящих сообщений, сбросив биты чтения для группы и прочих пользователей. Любой процесс, попытавшийся указать эти биты в аргументе <emphasis>oflag</emphasis> функции msgget, получит ошибку. Надо отметить, что от этой проверки, производимой функциями getXXX, мало пользы. Она подразумевает наличие у вызывающего процесса информации о том, к какой группе пользователей он принадлежит: он может являться владельцем файла, может принадлежать к той же группе или к прочим пользователям. Если создающий процесс сбросит некоторые биты разрешений, а вызывающий процесс попытается их установить, функция getXXX вернет ошибку. Любой процесс может полностью пропустить эту проверку, указав аргумент <emphasis>oflag,</emphasis> равный 0, если заранее известно о существовании объекта IPC.</p>
     <p>2. При любой операции с объектами IPC производится проверка разрешений для процесса, эту операцию запрашивающего. Например, каждый раз когда процесс пытается поместить сообщение в очередь с помощью команды msgsnd, производятся нижеследующие проверки (при получении доступа последующие этапы пропускаются).</p>
     <p> &#9633; Привилегированному пользователю доступ предоставляется всегда.</p>
     <p> &#9633; Если действующий идентификатор пользователя совпадает со значением uid или cuid объекта IPC и установлен соответствующий бит разрешения доступа в поле mode объекта IPC, доступ будет разрешен. Под соответствующим битом разрешения доступа подразумевается бит, разрешающий чтение, если вызывающий процесс запрашивает операцию чтения для данного объекта IPC (например, получение сообщения из очереди), или бит, разрешающий запись, если процесс хочет осуществить ее.</p>
     <p> &#9633; Если действующий идентификатор группы совпадает со значением gid или cgid объекта IPC и установлен соответствующий бит разрешения доступа в поле mode объекта IPC, доступ будет разрешен.</p>
     <p> &#9633; Если доступ не был разрешен на предыдущих этапах, проверяется наличие соответствующих установленных битов доступа для прочих пользователей.</p>
    </section>
    <section>
     <title>
      <p>3.6. Повторное использование идентификаторов</p>
     </title>
     <p>Структура ipc_perm (раздел 3.3) содержит переменную seq, в которой хранится порядковый номер канала. Эта переменная представляет собой счетчик, заводимый ядром для каждого объекта IPC в системе. При удалении объекта IPC номер канала увеличивается, а при переполнении сбрасывается в ноль.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В этом разделе мы описываем характерную для SVR4 реализацию. Стандарт Unix 98 не исключает использование других вариантов.</p>
     </cite>
     <p>В счетчике возникает потребность по двум причинам. Во-первых, вспомним о дескрипторах файлов, хранящихся в ядре для каждого из открытых файлов. Они обычно представляют собой небольшие целые числа, имеющие значение только внутри одного процесса — для каждого процесса создаются собственные дескрипторы. Прочитать из файла с дескриптором 4 можно только в том процессе, в котором есть открытый файл с таким дескриптором. Есть ли открытые файлы с тем же дескриптором в других процессах — значения не имеет. В отличие от дескрипторов файлов идентификаторы System V IPC устанавливаются для всей системы, а не для процесса.</p>
     <p>Идентификатор IPC возвращается одной из функций getXXX: msgget, semget, shmget. Как и дескрипторы файлов, идентификаторы представляют собой целые числа, имеющие в отличие от дескрипторов одинаковое значение для всех процессов. Если два неродственных процесса (клиент и сервер) используют одну очередь сообщений, ее идентификатор, возвращаемый функцией msgget, должен иметь одно и то же целочисленное значение в обоих процессах, чтобы они получили доступ к одной и той же очереди. Такая особенность дает возможность какому-либо процессу, созданному злоумышленником, попытаться прочесть сообщение из очереди, созданной другим приложением, последовательно перебирая различные идентификаторы (если бы они представляли собой небольшие целые числа) и надеясь на существование открытой в текущий момент очереди, доступной для чтения всем. Если бы идентификаторы представляли собой небольшие целые числа (как дескрипторы файлов), вероятность найти правильный идентификатор составляла бы около 1/50 (предполагая ограничение в 50 дескрипторов на процесс).</p>
     <p>Для исключения такой возможности разработчики средств IPC решили расширить возможный диапазон значений идентификатора так, чтобы он включал вообще все целые числа, а не только небольшие. Расширение диапазона обеспечивается путем увеличения значения идентификатора, возвращаемого вызывающему процессу, на количество записей в системной таблице IPC каждый раз, когда происходит повторное использование одной из них. Например, если система настроена на использование не более 50 очередей сообщений, при первом использовании первой записи процессу будет возвращен идентификатор 0. После удаления этой очереди сообщений при попытке повторного использования первой записи в таблице процессу будет возвращен идентификатор 50. Далее он будет принимать значения 100, 150 и т. д. Поскольку seq обычно определяется как длинное целое без знака (ulong — см. структуру ipc_perm в разделе 3.3), возврат к уже использовавшимся идентификаторам происходит, когда запись в таблице будет использована 85899346 раз (2&#179;&#178;/50 в предположении, что целое является 32-разрядным).</p>
     <p>Второй причиной, по которой понадобилось ввести последовательный номер канала, является необходимость исключить повторное использование идентификаторов System V IPC через небольшой срок. Это помогает гарантировать то, что досрочно завершивший работу и впоследствии перезапущенный сервер не станет использовать тот же идентификатор.</p>
     <p>Иллюстрируя эту особенность, программа в листинге 3.2 выводит первые десять значений идентификаторов, возвращаемых msgget.</p>
     <subtitle>Листинг 3.2. Вывод идентификатора очереди сообщений десять раз подряд</subtitle>
     <p><code>//svmsg/slot.c</code></p>
     <p><code>1  #include &lt;unpipc.h&gt;</code></p>
     <p><code>2  int</code></p>
     <p><code>3  main(int argc, char **argv)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   int i, msqid;</code></p>
     <p><code>6   for (i=0;i&lt;10;i++) {</code></p>
     <p><code>7    msqid=Msgget(IPC_PRIVATE, SVMSG_MODE|IPC_CREAT);</code></p>
     <p><code>8    printf("msqid = %d\n", msqid);</code></p>
     <p><code>9    Msgctl(msqid, IPC_RMID, NULL);</code></p>
     <p><code>10  }</code></p>
     <p><code>11  exit(0);</code></p>
     <p><code>12 }</code></p>
     <p>При очередном прохождении цикла msgget создает очередь сообщений, a msgctl с командой IPC_RMID в качестве аргумента удаляет ее. Константа SVMSG_MODE определяется в нашем заголовочном файле unpipc.h (листинг В.1) и задает разрешения по умолчанию для очереди сообщений System V. Вывод программы будет иметь следующий вид:</p>
     <p><code>solaris %<strong>slot</strong></code></p>
     <p><code>msqid = 0</code></p>
     <p><code>msqid = 50</code></p>
     <p><code>msqid = 100</code></p>
     <p><code>msqid = 150</code></p>
     <p><code>msqid = 200</code></p>
     <p><code>msqid = 250</code></p>
     <p><code>msqid = 300</code></p>
     <p><code>msqid = 350</code></p>
     <p><code>msqid = 400</code></p>
     <p><code>msqid = 450</code></p>
     <p>При повторном запуске программы мы увидим наглядную иллюстрацию того, что последовательный номер канала — это переменная, хранящаяся в ядре и продолжающая существовать и после завершения процесса.</p>
     <p><code>solaris % <strong>slot</strong></code></p>
     <p><code>msqid = 500</code></p>
     <p><code>msqid = 550</code></p>
     <p><code>msqid = 600</code></p>
     <p><code>msqid = 650</code></p>
     <p><code>msqid = 700</code></p>
     <p><code>msqid = 750</code></p>
     <p><code>msqid = 800</code></p>
     <p><code>msqid = 850</code></p>
     <p><code>msqid = 900</code></p>
     <p><code>msqid = 950</code></p>
    </section>
    <section>
     <title>
      <p>3.7. Программы ipcs и ipcrm</p>
     </title>
     <p>Поскольку объектам System V IPC не сопоставляются имена в файловой системе, мы не можем просмотреть их список или удалить их, используя стандартные программы ls и rm. Вместо них в системах, поддерживающих эти типы IPC, предоставляются две специальные программы: ipcs, выводящая различную информацию о свойствах System V IPC, и ipcrm, удаляющая очередь сообщений System V, семафор или сегмент разделяемой памяти. Первая из этих функций поддерживает около десятка параметров командной строки, управляющих отображением информации о различных типах IPC. Второй (ipcrm) можно задать до шести параметров. Подробную информацию о них можно получить в справочной системе.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Поскольку System V IPC не стандартизуется Posix, эти команды не входят в Posix.2. Они описаны в стандарте Unix 98.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>3.8. Ограничения ядра</p>
     </title>
     <p>Большинству реализаций System V IPC свойственно наличие внутренних ограничений, налагаемых ядром. Это, например, максимальное количество очередей сообщений или ограничение на максимальное количество семафоров в наборе. Характерные значения этих ограничений приведены в табл. 6.2, 11.1 и 14.1. Большая часть ограничений унаследована от исходной реализации System V. </p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Раздел 11.2 книги [1] и глава 8 [6] описывают реализацию очередей сообщений, семафоров и разделяемой памяти в System V. Некоторые из этих ограничений описаны уже там.</p>
     </cite>
     <p>К сожалению, некоторые из накладываемых ограничений достаточно жестки, поскольку они унаследованы от исходной реализации, базировавшейся на системе с небольшим адресным пространством (16-разрядный PDP-11). К счастью, большинство систем позволяют администратору изменять некоторые из установленных по умолчанию ограничений, но необходимые для этого действия специфичны для каждой версии Unix. В большинстве случаев после внесения изменений требуется перезагрузка ядра. К сожалению, в некоторых реализациях для хранения некоторых параметров до сих пор используются 16-разрядные целые, а это уже устанавливает аппаратные ограничения.</p>
     <p>В Solaris 2.6, например, таких ограничений 20. Их текущие значения можно вывести на экран, используя команду sysdef. Учтите, что вместо реальных значений будут выведены нули, если соответствующий модуль ядра не загружен (то есть средство не было ранее использовано). Это можно исключить, добавив к файлу /etc/system любой из нижеследующих операторов. Файл /etc/system считывается в процессе перезагрузки системы:</p>
     <p><code>set msgsys:msginfo_msgseg = значение</code></p>
     <p><code>set msgsys:msginfo_msgssz = значение</code></p>
     <p><code>set msgsys:msginfo_msgtql = значение</code></p>
     <p><code>set msgsys:msginfo_msgmap = значение</code></p>
     <p><code>set msgsys:msginfo_msgmax = значение</code></p>
     <p><code>set msgsys:msginfo_msgmnb = значение</code></p>
     <p><code>set msgsys:msginfo_msgmni = значение</code></p>
     <empty-line/>
     <p><code>set semsys:seminfo_semopm = значение</code></p>
     <p><code>set semsys:seminfo_semume = значение</code></p>
     <p><code>set semsys:seminfo_semaem = значение</code></p>
     <p><code>set semsys:seminfo_semmap = значение</code></p>
     <p><code>set semsys:seminfo_semvmx = значение</code></p>
     <p><code>set semsys:seminfo_semmsl = значение</code></p>
     <p><code>set semsys:seminfo_semmni = значение</code></p>
     <p><code>set semsys:seminfo_semmns = значение</code></p>
     <p><code>set semsys:seminfo_semmnu = значение</code></p>
     <empty-line/>
     <p><code>set shmsys:shminfo_shmmin = значение</code></p>
     <p><code>set shmsys:shminfo_shmseg = значение</code></p>
     <p><code>set shmsys:shminfo_shmmax = значение</code></p>
     <p><code>set shmsys:shminfo_shmmni = значение</code></p>
     <p>Последние шесть символов имени слева от знака равенства представляют собой переменные, перечисленные в табл. 6.2, 11.1 и 14.1.</p>
     <p>В Digital Unix 4.0B программа sysconfig позволяет узнать или изменить множество параметров и ограничений ядра. Ниже приведен вывод этой команды, запущенной с параметром –q. Команда выводит текущие ограничения для подсистемы ipc. Некоторые строки в выводе, не имеющие отношения к средствам IPC System V, были опущены:</p>
     <p><code>alpha % <strong>/sbin/sysconfig –q ipc</strong></code></p>
     <p><code>ipc:</code></p>
     <p><code>msg-max = 8192</code></p>
     <p><code>msg-mnb = 16384</code></p>
     <p><code>msg-mni = 64</code></p>
     <p><code>msg-tql = 40</code></p>
     <empty-line/>
     <p><code>shm-max = 4194304</code></p>
     <p><code>shm-min = 1</code></p>
     <p><code>shm-mni = 128</code></p>
     <p><code>shm-seg = 32</code></p>
     <empty-line/>
     <p><code>sem-mni = 16</code></p>
     <p><code>sem-msl = 25</code></p>
     <p><code>sem-opm = 10</code></p>
     <p><code>sem-ume = 10</code></p>
     <p><code>sem-vmx = 32767</code></p>
     <p><code>sem-aem = 16384</code></p>
     <p><code>num-of-sems = 60</code></p>
     <p>Для этих параметров можно указать другие значения по умолчанию, изменив файл /etc/sysconfigtab. Делать это следует с помощью программы sysconfigdb. Этот файл также считывается в процессе начальной загрузки системы.</p>
    </section>
    <section>
     <title>
      <p>3.9. Резюме</p>
     </title>
     <p>Первым аргументом функций msgget, semget и shmget является ключ IPC System V. Эти ключи вычисляются по полному имени файла с помощью системной функции ftok. В качестве ключа можно также указать значение IPCPRIVATE. Эти три функции создают новый объект IPC или открывают существующий и возвращают идентификатор System V IPC — целое число, которое потом используется для распознавания объекта в прочих функциях, имеющих отношение к IPC. Эти идентификаторы имеют смысл не только в рамках одного процесса (как дескрипторы файлов), но и в рамках всей системы. Они могут повторно использоваться ядром, но лишь спустя некоторое время.</p>
     <p>С каждым объектом System V IPC связана структура ipc_perm, содержащая информацию о нем, такую как идентификатор пользователя владельца, идентификатор группы, разрешения чтения и записи и др. Одним из отличий между System V и Posix IPC является то, что для объекта IPC System V эта информация доступна всегда (доступ к ней можно получить с помощью одной из функций XXXctl с аргументом IPC_STAT), а в Posix IPC доступ к ней зависит от реализации. Если объект Posix IPC хранится в файловой системе и мы знаем его имя в ней, мы можем получить доступ к этой информации, используя стандартные средства файловой системы.</p>
     <p>При создании нового или открытии существующего объекта System V IPC функции getXXX передаются два флага (IPC_CREAT и IPC_EXCL) и 9 бит разрешений.</p>
     <p>Без сомнения, главнейшей проблемой в использовании System V IPC является наличие искусственных ограничений в большинстве реализаций. Ограничения накладываются на размер объектов, причем они берут свое начало от самых первых реализаций. Это означает, что для интенсивного использования средств System V IPC приложениями требуется изменение ограничений ядра, а внесение этих изменений в каждой системе осуществляется по-разному. </p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Прочитайте о функции msgctl в разделе 6.5 и измените программу в листинге 3.2 так, чтобы выводился не только идентификатор, но и поле seq структуры ipc_perm.</p>
     <p>2. Непосредственно после выполнения программы листинга 3.2 мы запускаем программу, создающую две очереди сообщений. Предполагая, что никакие другие приложения не использовали очереди сообщений с момента загрузки системы, определите, какие значения будут возвращены функцией msgget в качестве идентификаторов очередей сообщений.</p>
     <p>3. В разделе 3.5 было отмечено, что функции getXXX System V IPC не используют маску создания файла. Напишите тестовую программу, создающую канал FIFO (с помощью функции mkfifо, описанной в разделе 4.6) и очередь сообщений System V, указав для обоих разрешение 666 (в восьмеричном формате). Сравните разрешения для созданных объектов (FIFO и очереди сообщений). Перед запуском программы удостоверьтесь, что значение umask отлично от нуля.</p>
     <p>4. Серверу нужно создать уникальную очередь сообщений для своих клиентов. Что предпочтительнее: использовать какое-либо постоянное имя файла (например, имя сервера) в качестве аргумента функции ftok или использовать ключ IPC_PRIVATE?</p>
     <p>5. Измените листинг 3.1 так, чтобы выводился только ключ IPC и путь к файлу. Запустите программу find, чтобы вывести список всех файлов вашей файловой системы, и передайте вывод вашей только что созданной программе. Скольким именам файлов будет соответствовать один и тот же ключ?</p>
     <p>6. Если в вашей системе есть программа sar (system activity reporter — информация об активности системы), запустите команду</p>
     <p><code>sar –m 5 6</code></p>
     <p>На экран будет выведено количество операций в секунду с очередями сообщений и семафорами, замеряемыми каждые 5 секунд 6 раз. </p>
    </section>
   </section>
  </section>
  <section>
   <title>
    <p>ЧАСТЬ 2</p>
    <p>ОБМЕН СООБЩЕНИЯМИ</p>
   </title>
   <section>
    <title>
     <p>ГЛАВА 4</p>
     <p>Именованные и неименованные каналы</p>
    </title>
    <section>
     <title>
      <p>4.1. Введение</p>
     </title>
     <p>Неименованные каналы — это самая первая форма IPC в Unix, появившаяся еще в 1973 году в третьей версии (Third Edition [17]). Несмотря на полезность во многих случаях, главным недостатком неименованных каналов является отсутствие имени, вследствие чего они могут использоваться для взаимодействия только родственными процессами. Это было исправлено в Unix System III (1982) добавлением каналов FIFO, которые иногда называются именованными каналами. Доступ и к именованным каналам, и к неименованным организуется с помощью обычных функций read и write.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Программные (неименованные) каналы в принципе могут использоваться неродственными процессами, если предоставить им возможность передавать друг другу дескрипторы (см. раздел 15.8 этой книги или раздел 13.7 [24]). Однако на практике эти каналы обычно используются для осуществления взаимодействия между процессами, у которых есть общий предок.</p>
     </cite>
     <p>В этой главе описываются детали, касающиеся создания и использования программных каналов и каналов FIFO. Мы рассмотрим пример простейшего сервера файлов, а также обратим внимание на некоторые детали модели клиент-сервер, в частности постараемся определить количество требуемых каналов IPC, сравним последовательные серверы с параллельными и неструктурированные потоки байтов с сообщениями.</p>
    </section>
    <section>
     <title>
      <p>4.2. Приложение типа клиент-сервер</p>
     </title>
     <p>Пример приложения модели клиент-сервер приведен на рис. 4.1. Именно на него мы будем ссылаться в тексте этой главы и главы 6 при необходимости проиллюстрировать использование программных каналов, FIFO и очередей сообщений System V.</p>
     <p>Клиент считывает полное имя (файла) из стандартного потока ввода и записывает его в канал IPC. Сервер считывает это имя из канала IPC и производит попытку открытия файла на чтение. Если попытка оказывается успешной, сервер считывает файл и записывает его в канал IPC. В противном случае сервер возвращает клиенту сообщение об ошибке. Клиент считывает данные из канала IPC и записывает их в стандартный поток вывода. Если сервер не может считать файл, из канала будет считано сообщение об ошибке. В противном случае будет принято содержимое файла. Две штриховые линии между клиентом и сервером на рис. 4.1 представляют собой канал IPC. </p>
     <image l:href="#Any2FbImgLoader58"/>
     <p>Рис. 4.1. Пример приложения типа клиент-сервер</p>
    </section>
    <section>
     <title>
      <p>4.3. Программные каналы</p>
     </title>
     <section>
      <p>Программные каналы имеются во всех существующих реализациях и версиях Unix. Канал создается вызовом pipe и предоставляет возможность однонаправленной (односторонней) передачи данных:</p>
      <p><code>#include &lt;unistd.h&gt;</code></p>
      <p><code>int pipe(int fd[2]);</code></p>
      <p><code>/* возвращает 0 в случае успешного завершения. –1 – в случае ошибки:*/</code></p>
      <p>Функция возвращает два файловых дескриптора: fd[0] и fd[1], причем первый открыт для чтения, а второй — для записи.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Некоторые версии Unix, в частности SVR4, поддерживают двусторонние каналы (full-duplex pipes). В этом случае канал открыт на запись и чтение с обоих концов. Другой способ создания двустороннего канала IPC заключается в вызове функции socketpair, описанной в разделе 14.3 [24]. Его можно использовать в большинстве современных версий Unix. Однако чаще всего каналы используются при работе с интерпретатором команд, где уместно использование именно односторонних каналов.</p>
       <p>Стандарты Posix.1 и Unix 98 требуют только односторонних каналов, и мы будем исходить из этого.</p>
      </cite>
      <p>Для определения типа дескриптора (файла, программного канала или FIFO) можно использовать макрос S_ISFIFO. Он принимает единственный аргумент: поле st_mode структуры stat и возвращает значение «истина» (ненулевое значение) или «ложь» (ноль). Структуру stat для канала возвращает функция fstat. Для FIFO структура возвращается функциями fstat, lstat и stat.</p>
      <p>На рис. 4.2 изображен канал при использовании его единственным процессом.</p>
      <image l:href="#Any2FbImgLoader60"/>
      <p>Рис. 4.2. Канал в одиночном процессе</p>
      <empty-line/>
      <p>Хотя канал создается одним процессом, он редко используется только этим процессом (пример канала в одиночном процессе приведен в листинге 5.12). Каналы обычно используются для связи между двумя процессами (родительским и дочерним) следующим образом: процесс создает канал, а затем вызывает fork, создавая свою копию — дочерний процесс (рис. 4.3). Затем родительский процесс закрывает открытый для чтения конец канала, а дочерний, в свою очередь, — открытый на запись конец канала. Это обеспечивает одностороннюю передачу данных между процессами, как показано на рис. 4.4.</p>
      <image l:href="#Any2FbImgLoader61"/>
      <p>Рис. 4.3. Канал после вызова fork</p>
      <image l:href="#Any2FbImgLoader62"/>
      <p>Рис. 4.4. Канал между двумя процессами </p>
      <empty-line/>
      <p>При вводе команды наподобие</p>
      <p><code>who|sort|lp</code></p>
      <p>в интерпретаторе команд Unix интерпретатор выполняет вышеописанные действия для создания трех процессов с двумя каналами между ними. Интерпретатор также подключает открытый для чтения конец каждого канала к стандартному потоку ввода, а открытый на запись — к стандартному потоку вывода. Созданный таким образом канал изображен на рис. 4.5.</p>
      <image l:href="#Any2FbImgLoader64"/>
      <p>Рис. 4.5. Каналы между тремя процессами при конвейерной обработке </p>
      <empty-line/>
      <p>Все рассмотренные выше каналы были однонаправленными (односторонними), то есть позволяли передавать данные только в одну сторону. При необходимости передачи данных в обе стороны нужно создавать пару каналов и использовать каждый из них для передачи данных в одну сторону. Этапы создания двунаправленного канала IPC следующие:</p>
      <p>1. Создаются каналы 1 (fd1[0] и fd1[1]) и 2 (fd2[0] и fd2[1]).</p>
      <p>2. Вызов fork.</p>
      <p>3. Родительский процесс закрывает доступный для чтения конец канала 1 (fd1[0]).</p>
      <p>4. Родительский процесс закрывает доступный для записи конец канала 2 (fd2[1]).</p>
      <p>5. Дочерний процесс закрывает доступный для записи конец канала 1 (fd1[1]).</p>
      <p>6. Дочерний процесс закрывает доступный для чтения конец канала 2 (fd2[0]).</p>
      <p>Текст программы, выполняющей эти действия, приведен в листинге 4.1. При этом создается структура каналов, изображенная на рис. 4.6.</p>
      <image l:href="#Any2FbImgLoader65"/>
      <p>Рис. 4.6. Двусторонняя передача данных по двум каналам</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Давайте напишем программу, описанную в разделе 4.2, с использованием каналов. Функция main создает два канала и вызывает fork для создания копии процесса. Родительский процесс становится клиентом, а дочерний — сервером. Первый канал используется для передачи полного имени от клиента серверу, а второй — для передачи содержимого файла (или сообщения об ошибке) от сервера клиенту. Таким образом мы получаем структуру, изображенную на рис. 4.7. </p>
      <image l:href="#Any2FbImgLoader67"/>
      <p>Рис. 4.7. Реализация рис. 4.1 с использованием двух каналов</p>
      <empty-line/>
      <p>Обратите внимание на то, что мы изображаем на рис. 4.7 два канала, соединяющих сервер с клиентом, но оба канала проходят через ядро, поэтому каждый передаваемый байт пересекает интерфейс ядра дважды: при записи в канал и при считывании из него.</p>
      <p>В листинге 4.1<a l:href="#n_1" type="note">[1]</a> приведена функция main для данного примера.</p>
      <subtitle>Листинг 4.1. Функция main для приложения клиент-сервер, использующего два канала</subtitle>
      <p><code>//pipe/mainpipe.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  void client(int, int), server(int, int);</code></p>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int pipe1[2], pipe2[2]:</code></p>
      <p><code>7   pid_t childpid;</code></p>
      <p><code>8   Pipe(pipe1); /* создание двух каналов */</code></p>
      <p><code>9   Pipe(pipe2);</code></p>
      <p><code>10  if ((childpid = Fork()) == 0) { /* child */</code></p>
      <p><code>11   Close(pipe1[1]);</code></p>
      <p><code>12   Close(pipe2[0]);</code></p>
      <p><code>13   server(pipe1[0], pipe2[1]);</code></p>
      <p><code>14   exit(0);</code></p>
      <p><code>15  }</code></p>
      <p><code>16  /* родитель */</code></p>
      <p><code>17  Close(pipel[0]);</code></p>
      <p><code>18  Close(pipe2[1]);</code></p>
      <p><code>19  client(pipe2[0], pipel[1]);</code></p>
      <p><code>20  Waitpid(childpid, NULL, 0); /* ожидание завершения дочернего процесса */</code></p>
      <p><code>21  exit(0);</code></p>
      <p><code>22 }</code></p>
      <subtitle>Создание каналов, вызов fork</subtitle>
      <p>8-19 Создаются два канала и выполняются шесть шагов, уже упоминавшиеся в отношении рис. 4.6. Родительский процесс вызывает функцию client (листинг 4.2), а дочерний — функцию server (листинг 4.3).</p>
      <subtitle>Использование waitpid дочерним процессом</subtitle>
      <p>20 Процесс-сервер (дочерний процесс) завершает свою работу первым, вызывая функцию exit после завершения записи данных в канал. После этого он становится процессом-зомби. Процессом-зомби называется дочерний процесс, завершивший свою работу, родитель которого еще функционирует, но не получил сигнал о завершении работы дочернего процесса. При завершении работы дочернего процесса ядро посылает его родителю сигнал SIGCHLD, но родитель его не принимает и этот сигнал по умолчанию игнорируется. После этого функция client родительского процесса возвращает управление функции main, закончив Считывание данных из канала. Затем родительский процесс вызывает waitpid для получения информации о статусе дочернего процесса (зомби). Если родительский процесс не вызовет waitpid, а просто завершит работу, клиент будет унаследован процессом init, которому будет послан еще один сигнал SIGCHLD.</p>
      <p>Функция client приведена в листинге 4.2.</p>
      <subtitle>Листинг 4.2. Функция client для приложения типа клиент-сервер с двумя каналами</subtitle>
      <p><code>//pipe/client.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  void</code></p>
      <p><code>3  client(int readfd, int writefd)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   size_t len;</code></p>
      <p><code>6   ssize_t n;</code></p>
      <p><code>7   char buff[MAXLINE];</code></p>
      <p><code>8   /* получение полного имени файла */</code></p>
      <p><code>9   Fgets(buff, MAXLINE, stdin);</code></p>
      <p><code>10  len = strlen(buff); /* fgets() гарантирует завершающий нулевой байт */</code></p>
      <p><code>11  if (buff[Len-l] == <emphasis>'</emphasis> \n<emphasis>'</emphasis> )</code></p>
      <p><code>12   len--; /* удаление перевода строки из fgets() */</code></p>
      <p><code>13  /* запись полного имени в канал IPC */</code></p>
      <p><code>14  Write(writefd, buff, len);</code></p>
      <p><code>15  /* считывание из канала, вывод в stdout */</code></p>
      <p><code>16  while ((n = Read(readfd, buff, MAXLINE)) &gt; 0)</code></p>
      <p><code>17   Write(STDOUT_FILENO, buff, n);</code></p>
      <p><code>18 }</code></p>
      <subtitle>Считывание полного имени из стандартного потока ввода</subtitle>
      <p>8-14 Полное имя файла считывается из стандартного потока ввода и записывается в канал после удаления завершающего символа перевода строки, возвращаемого функцией fgets.</p>
      <subtitle>Копирование из канала в стандартный поток вывода</subtitle>
      <p>15-17 Затем клиент считывает все, что сервер направляет в канал, и записывает эти данные в стандартный поток вывода. Ожидается, что это будет содержимое файла, но в случае его отсутствия будет принято и записано в стандартный поток вывода сообщение об ошибке.</p>
      <p>В листинге 4.3 приведена функция server.</p>
      <subtitle>Листинг 4.3. Функция server для приложения клиент-сервер с двумя каналами</subtitle>
      <p><code>//pipe/server.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  void</code></p>
      <p><code>3  server(int readfd, int writefd)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int fd;</code></p>
      <p><code>6   ssize_t n;</code></p>
      <p><code>7   char buff[MAXLINE+1];</code></p>
      <p><code>8   /* получение полного имени из канала IPC */</code></p>
      <p><code>9   if ((n = Read(readfd, buff, MAXLINE)) == 0)</code></p>
      <p><code>10   err_quit("end-of-file while reading pathname"):</code></p>
      <p><code>11  buff[n] = '\0'; /* полное имя завершается 0 */</code></p>
      <p><code>12  if ((fd = open(buff, O_RDONLY)) &lt; 0) {</code></p>
      <p><code>13   /* 4error: must tell client */</code></p>
      <p><code>14   snprintf(buff + n, sizeof(buff) – n, ": can't open. %s\n".</code></p>
      <p><code>15   strerror(errno)):</code></p>
      <p><code>16   n = strlen(buff);</code></p>
      <p><code>17   Write(writefd, buff, n);</code></p>
      <p><code>18  } else {</code></p>
      <p><code>19   /* файл успешно открыт и копируется в канал */</code></p>
      <p><code>20   while ( (n = Read(fd, buff, MAXLINE)) &gt; 0)</code></p>
      <p><code>21    Write(writefd, buff, n);</code></p>
      <p><code>22   Close(fd);</code></p>
      <p><code>23  }</code></p>
      <p><code>24 }</code></p>
      <subtitle>Считывание полного имени файла из канала</subtitle>
      <p>8-11 Записанное в канал клиентом имя файла считывается сервером и дополняется завершающим символом с кодом 0 (null-terminated). Обратите внимание, что функция read возвращает данные, как только они помещаются в поток, не ожидая накопления некоторого их количества (MAXLINE в данном примере).</p>
      <subtitle>Открытие файла, обработка возможной ошибки</subtitle>
      <p>12-17 Файл открывается для чтения и при возникновении ошибки сообщение о ней возвращается клиенту с помощью канала. Для получения строки с соответствующим значению переменной errno сообщением об ошибке вызывается функция strerror (в книге [24, с. 690-691] вы найдете более подробный рассказ об этой функции).</p>
      <subtitle>Копирование из файла в канал</subtitle>
      <p>18-23 При успешном завершении работы функции open содержимое файла копируется в канал.</p>
      <p>Ниже приведен результат работы программы в случае наличия файла с указанным полным именем и в случае возникновения ошибок:</p>
      <p><code>solaris % <strong>mainpipe /etc/inet/ntp.conf</strong> <emphasis>файл, состоящий из двух строк</emphasis></code></p>
      <p><code>multicastclient 224.0.1.1</code></p>
      <p><code>driftfile /etc/inet/ntp.drift</code></p>
      <p><code>solaris % <strong>mainpipe /etc/shadow</strong>          <emphasis>фaйл, на чтение которого нет разрешения</emphasis></code></p>
      <p><code>/etc/shadow: can't open. Permission denied</code></p>
      <p><code>solaris % <strong>mainpipe /no/such/file</strong>        <emphasis>несуществующий файл</emphasis></code></p>
      <p><code>/no/such/file: can't open. No such file or directory</code></p>
     </section>
    </section>
    <section>
     <title>
      <p>4.4. Двусторонние каналы</p>
     </title>
     <p>В предыдущем разделе мы отметили, что во многих системах реализованы двусторонние каналы. В Unix SVR4 это обеспечивается самой функцией pipe, а во многих других ядрах — функцией socketpair. Но что в действительности представляет собой двусторонний канал? Представим себе сначала однонаправленный канал, изображенный на рис. 4.8.</p>
     <image l:href="#Any2FbImgLoader72"/>
     <p>Рис. 4.8. Односторонний канал</p>
     <empty-line/>
     <p>Двусторонний канал мог бы быть реализован так, как это изображено на рис. 4.9. В этом случае неявно предполагается существование единственного буфера, в который помещается все, что записывается в канал (с любого конца, то есть дескриптора), и при чтении из канала данные просто считываются из буфера.</p>
     <image l:href="#Any2FbImgLoader74"/>
     <p>Рис. 4.9. Одна из возможных реализаций двустороннего канала (неправильная)</p>
     <empty-line/>
     <p>Такая реализация вызовет проблемы, например, в программе листинга А.14. Здесь требуется двусторонняя передача информации, причем потоки данных должны быть независимы. В противном случае некоторый процесс, записав данные в канал и перейдя затем в режим чтения из этого же канала, рискует считать обратно те же данные, которые были им только что туда записаны.</p>
     <p>На рис. 4.10 изображена правильная реализация двустороннего канала.</p>
     <image l:href="#Any2FbImgLoader75"/>
     <p>Рис. 4.10. Правильная реализация двустороннего канала</p>
     <empty-line/>
     <p>Здесь двусторонний канал получается из объединения двух односторонних. Все данные, записываемые в fd[1], будут доступны для чтения из fd[0], а данные, записываемые в fd[0], будут доступны для чтения из fd[1].</p>
     <p>Программа в листинге 4.4 иллюстрирует использование одного двустороннего канала для двусторонней передачи информации.</p>
     <subtitle>Листинг 4.4. Двусторонняя связь через двусторонний канал</subtitle>
     <p><code>//pipe/fduplex.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  int</code></p>
     <p><code>3  main(int argc, char **argv)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   int fd[2], n;</code></p>
     <p><code>6   char c;</code></p>
     <p><code>7   pid_t childpid;</code></p>
     <p><code>8   Pipe(fd); /* предполагается двусторонний канал (напр., SVR4) */</code></p>
     <p><code>9   if ((childpid = Fork()) == 0) { /* child */</code></p>
     <p><code>10   sleep(3):</code></p>
     <p><code>11   if ((n = Read(fd[0], &amp;c, 1)) != 1)</code></p>
     <p><code>12    err_quit("child: read returned %d", n);</code></p>
     <p><code>13   printf("child read %c\n", c):</code></p>
     <p><code>14   Write(fd[0], "c", 1);</code></p>
     <p><code>15   exit(0);</code></p>
     <p><code>16  }</code></p>
     <p><code>17  /* родитель */</code></p>
     <p><code>18  Write(fd[1], "p", 1);</code></p>
     <p><code>19  if ((n = Read(fd[1], &amp;c, 1)) != 1)</code></p>
     <p><code>20   err_quit("parent: read returned %d", n):</code></p>
     <p><code>21  printf("parent read %c\n", c);</code></p>
     <p><code>22  exit(0);</code></p>
     <p><code>23 }</code></p>
     <p>В этой программе сначала создается двусторонний канал, затем делается системный вызов fork. Породивший процесс записывает символ р в канал, а затем считывает из канала данные. Дочерний процесс ждет три секунды, считывает символ из канала, а потом записывает туда символ с. Задержка чтения для дочернего процесса позволяет породившему процессу вызвать read первым — таким образом мы можем узнать, не будет ли им считан обратно только что записанный символ.</p>
     <p>При запуске этой программы в Solaris 2.6, в которой организована поддержка двусторонних каналов, мы получим ожидаемый результат:</p>
     <p><code>solaris % <strong>fduplex</strong></code></p>
     <p><code>child read p</code></p>
     <p><code>parent read с</code></p>
     <p>Символ р передается по одному из двух односторонних каналов, изображенных на рис. 4.10, а именно по верхнему каналу. Символ с передается по нижнему одностороннему каналу. Родительский процесс не считывает обратно записанный им в канал символ р (что и требуется).</p>
     <p>При запуске этой программы в Digital Unix 4.0B, в которой по умолчанию создаются односторонние каналы (двусторонние каналы — как в SVR4 — будут создаваться в том случае, если при компиляции указать специальные параметры), мы увидим результат, ожидаемый для одностороннего канала:</p>
     <p><code>alpha % <strong>fduplex</strong></code></p>
     <p><code>read error: Bad file number</code></p>
     <p><code>alpha % child read p</code></p>
     <p><code>write error: Bad file number</code></p>
     <p>Родительский процесс записывает символ р, который успешно считывается дочерним процессом, однако при попытке считывания из канала (дескриптор fd[l]) родительский процесс прерывается с ошибкой, как и дочерний процесс, при попытке записи в канал (дескриптор fd[0]). Вспомните рис. 4.8. Функция read возвращает код ошибки EBADF, означающий, что дескриптор не открыт для чтения. Аналогично write возвращает тот же код ошибки, если дескриптор не был открыт на запись.</p>
    </section>
    <section>
     <title>
      <p>4.5. Функции popen и pclose</p>
     </title>
     <section>
      <p>Другим примером использования каналов является имеющаяся в стандартной библиотеке ввода-вывода функция popen, которая создает канал и запускает другой процесс, записывающий данные в этот канал или считывающий их из него:</p>
      <p><code>#include &lt;stdio.h&gt;</code></p>
      <p><code>FILE *popen(const char *<emphasis>соmmаnd,</emphasis> const char <emphasis>*tуре</emphasis>);</code></p>
      <p><code>/* Возвращает указатель FILE * в случае успешного выполнения, NULL – в случае ошибки */</code></p>
      <p><code>int pclose(FILE *s<emphasis>trеаm</emphasis>);</code></p>
      <p><code>/* Возвращает код завершения команды интерпретатора или –1 – в случае ошибки */</code></p>
      <p>Аргумент <emphasis>command</emphasis> представляет собой команду интерпретатора. Он обрабатывается программой sh (обычно это интерпретатор Bourne shell), поэтому для поиска исполняемого файла, вызываемого командой <emphasis>command</emphasis>, используется переменная PATH. Канал создается между вызывающим процессом и указанной командой. Возвращаемое функцией popen значение представляет собой обычный указатель на тип FILE, который может использоваться для ввода или для вывода в зависимости от содержимого строки <emphasis>type</emphasis>:</p>
      <p>&#9632; если <emphasis>type</emphasis> имеет значение r, вызывающий процесс считывает данные, направляемые командой <emphasis>command</emphasis> в стандартный поток вывода;</p>
      <p>&#9632; если <emphasis>type</emphasis> имеет значение w, вызывающий процесс записывает данные в стандартный поток ввода команды <emphasis>command</emphasis>.</p>
      <p>Функция pclose закрывает стандартный поток ввода-вывода stream, созданный командой popen, ждет завершения работы программы и возвращает код завершения, принимаемый от интерпретатора.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Информацию о реализациях popen и pclose можно найти в разделе 14.3 [21].</p>
      </cite>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>В листинге 4.5 изображено еще одно решение задачи с клиентом и сервером, использующее функцию popen и программу (утилиту Unix) cat.</p>
      <subtitle>Листинг 4.5. Клиент-сервер с использованием popen</subtitle>
      <p><code>//pipe/mainpopen.c </code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   size_t n;</code></p>
      <p><code>6   char buff[MAXLINE], command[MAXLINE];</code></p>
      <p><code>7   FILE *fp;</code></p>
      <p><code>8   /* считывание полного имени */</code></p>
      <p><code>9   Fgets(buff, MAXLINE, stdin);</code></p>
      <p><code>10  n = strlen(buff); /* fgets() гарантирует завершающий ноль */</code></p>
      <p><code>11  if (buff[n-1] == '\n')</code></p>
      <p><code>12   n--; /* удаление перевода строки из возврата fgets() */</code></p>
      <p><code>13  snprintf(command, sizeof(command), "cat %s", buff);</code></p>
      <p><code>14  fp = Popen(command, "r");</code></p>
      <p><code>15  /* копирование из канала в стандартный вывод */</code></p>
      <p><code>16  while(Fgets(buff, MAXLINE, fp) != NULL)</code></p>
      <p><code>17   Fputs(buff, stdout);</code></p>
      <p><code>18  Pclose(fp);</code></p>
      <p><code>19  exit(0);</code></p>
      <p><code>20 }</code></p>
      <p>8-17 Полное имя файла считывается из стандартного потока ввода, как и в программе в листинге 4.2. Формируется командная строка, которая передается popen. Вывод интерпретатора команд или команды cat копируется в стандартный поток вывода.</p>
      <p>Одним из отличий этой реализации от приведенной в листинге 4.1 является отсутствие возможности формировать собственные сообщения об ошибках. Теперь мы целиком зависим от программы cat, а выводимые ею сообщения не всегда адекватны. Например, в системе Solaris 2.6 при попытке считать данные из файла, доступ на чтение к которому для нас запрещен, будет выведена следующая ошибка:</p>
      <p><code>solaris % <strong>cat/etc/shadow</strong></code></p>
      <p><code>cat: cannot open /etc/shadow</code> </p>
      <p>А в BSD/OS 3.1 мы получим более информативное сообщение в аналогичной ситуации:</p>
      <p><code>bsdi % <strong>cat /etc/master.passwd</strong></code></p>
      <p><code>cat: /etc/master.passwd: cannot open [Permission denied]</code></p>
      <p>Обратите также внимание на тот факт, что вызов popen в данном случае оказывается успешным, однако при первом же вызове fgets будет возвращен символ конца файла (EOF). Программа cat записывает сообщение об ошибке в стандартный поток сообщений об ошибках (stderr), а popen с этим потоком не связывается — к создаваемому каналу подключается только стандартный поток вывода.</p>
     </section>
    </section>
    <section>
     <title>
      <p>4.6. Именованные каналы (FIFO)</p>
     </title>
     <section>
      <p>Программные каналы не имеют имен, и их главным недостатком является невозможность передачи информации между неродственными процессами. Два неродственных процесса не могут создать канал для связи между собой (если не передавать дескриптор).</p>
      <p>Аббревиатура FIFO расшифровывается как «first in, first out» — «первым вошел, первым вышел», то есть эти каналы работают как очереди. Именованные каналы в Unix функционируют подобно неименованным — они позволяют передавать данные только в одну сторону. Однако в отличие от программных каналов каждому каналу FIFO сопоставляется полное имя в файловой системе, что позволяет двум неродственным процессам обратиться к одному и тому же FIFO.</p>
      <p>FIFO создается функцией mkfifо:</p>
      <p><code>#include &lt;sys/types.h&gt;</code></p>
      <p><code>#include &lt;sys/stat.h&gt;</code></p>
      <p><code>int mkfifo(const char *<emphasis>раthnаme</emphasis>, mode_t <emphasis>mоdе</emphasis>);</code></p>
      <p><code>/* Возвращает 0 при успешном выполнении, –1 – при возникновении ошибок */</code></p>
      <p>Здесь <emphasis>pathname</emphasis> — обычное для Unix полное имя файла, которое и будет именем FIFO.</p>
      <p>Аргумент mode указывает битовую маску разрешений доступа к файлу, аналогично второму аргументу команды open. В табл. 2.3 приведены шесть констант, определенных в заголовке &lt;sys/stat.h&gt;. Эти константы могут использоваться для задания разрешений доступа и к FIFO.</p>
      <p>Функция mkfifo действует как open, вызванная с аргументом O_CREAT | O_EXCL. Это означает, что создается новый канал FIFO или возвращается ошибка EEXIST, в случае если канал с заданным полным именем уже существует. Если не требуется создавать новый канал, вызывайте open вместо mkfifo. Для открытия существующего канала или создания нового в том случае, если его еще не существует, вызовите mkfifo, проверьте, не возвращена ли ошибка EEXIST, и если такое случится, вызовите функцию open.</p>
      <p>Команда mkfifо также создает канал FIFO. Ею можно пользоваться в сценариях интерпретатора или из командной строки.</p>
      <p>После создания канал FIFO должен быть открыт на чтение или запись с помощью либо функции open, либо одной из стандартных функций открытия файлов из библиотеки ввода-вывода (например, fopen). FIFO может быть открыт либо только на чтение, либо только на запись. Нельзя открывать канал на чтение и запись, поскольку именованные каналы могут быть только односторонними. </p>
      <p>При записи в программный канал или канал FIFO вызовом write данные всегда добавляются к уже имеющимся, а вызов read считывает данные, помещенные в программный канал или FIFO первыми. При вызове функции lseek для программного канала или FIFO будет возвращена ошибка ESPIPE.</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Переделаем программу, приведенную в листинге 4.1, таким образом, чтобы использовать два канала FIFO вместо двух программных каналов. Функции client и server останутся прежними; отличия появятся только в функции main, новый текст которой приведен в листинге 4.6.</p>
      <subtitle>Листинг 4.6. Функция main приложения клиент-сервер, использующего две очереди</subtitle>
      <p><code>//pipe/mainfifo.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #define FIFO1 "/tmp/fifo.1"</code></p>
      <p><code>3  #define FIFO2 "/tmp/fifo.2"</code></p>
      <p><code>4  void client(int, int), server(int. int);</code></p>
      <p><code>5  int</code></p>
      <p><code>6  main(int argc, char **argv)</code></p>
      <p><code>7  {</code></p>
      <p><code>8   int readfd, writefd;</code></p>
      <p><code>9   pid_t childpid;</code></p>
      <p><code>10  /* создание двух FIFO, если существуют – OK */</code></p>
      <p><code>11  if ((mkfifo(FIF01, FILE_MODE) &lt; 0) &amp;&amp; (errno != EEXIST))</code></p>
      <p><code>12   err_sys("can't create %s", FIF01);</code></p>
      <p><code>13  if ((mkfifo(FIF02, FILE_MODE) &lt; 0) &amp;&amp; (errno != EEXIST)) {</code></p>
      <p><code>14   unlink(FIF01);</code></p>
      <p><code>15   err_sys("can't create %s", FIF02);</code></p>
      <p><code>16  }</code></p>
      <p><code>17  if ((childpid = Fork()) == 0) { /* child */</code></p>
      <p><code>18   readfd = Open(FIF01, O_RDONLY, 0);</code></p>
      <p><code>19   writefd = Open(FIF02, O_WRONLY, 0);</code></p>
      <p><code>20   server(readfd, writefd);</code></p>
      <p><code>21   exit(0);</code></p>
      <p><code>22  }</code></p>
      <p><code>23  /* родительский процесс */</code></p>
      <p><code>24  writefd = Open(FIF01, O_WRONLY, 0);</code></p>
      <p><code>25  readfd = Open(FIF02, O_RDONLY, 0);</code></p>
      <p><code>26  client(readfd, writefd);</code></p>
      <p><code>27  waitpid(childpid, NULL, 0); /* ожидание завершения дочернего процесса */</code></p>
      <p><code>28  Close(readfd):</code></p>
      <p><code>29  Close(writefd);</code></p>
      <p><code>30  Unlink(FIF01);</code></p>
      <p><code>31  Unlink(FIF02);</code></p>
      <p><code>32  exit(0);</code></p>
      <p><code>33 }</code></p>
      <subtitle>Создание двух FIFO</subtitle>
      <p>10-16 В файловой системе в каталоге /tmp создается два канала. Если какой-либо из них уже существует — ничего страшного. Константа FILE_MODE определена в нашем заголовке unpiрс.h (листинг В.1) как</p>
      <p><code>#define FILEMODE(S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)</code></p>
      <p><code>/* разрешения по умолчанию для вновь создаваемых файлов */</code></p>
      <p>При этом владельцу файла разрешается чтение и запись в него, а группе и прочим пользователям — только чтение. Эти биты разрешений накладываются на маску режима доступа создаваемых файлов (file mode creation mask) процесса.</p>
      <p>17-27 Далее происходит вызов fork, дочерний процесс вызывает функцию server (листинг 4.3), а родительский процесс вызывает функцию client (листинг 4.2). Перед вызовом этих функций родительский процесс открывает первый канал на запись, а второй на чтение, в то время как дочерний процесс открывает первый канал на чтение, а второй — на запись. Картина аналогична примеру с каналами и иллюстрируется рис. 4.11. </p>
      <image l:href="#Any2FbImgLoader81"/>
      <p>Рис. 4.11. Приложение клиент-сервер, использующее две очереди</p>
      <empty-line/>
      <p>Изменения по сравнению с примером, в которым использовались программные каналы, следующие:</p>
      <p>&#9632; Для создания и открытия программного канала требуется только один вызов — pipe. Для создания и открытия FIFO требуется вызов mkfifo и последующий вызов open.</p>
      <p>&#9632; Программный канал автоматически исчезает после того, как будет закрыт последним использующим его процессом. Канал FIFO удаляется из файловой системы только после вызова unlink. Польза от лишнего вызова, необходимого для создания FIFO, следующая: канал FIFO получает имя в файловой системе, что позволяет одному процессу создать такой канал, а другому открыть его, даже если последний не является родственным первому. С программными каналами это неосуществимо.</p>
      <p>В программах, некорректно использующих каналы FIFO, могут возникать неочевидные проблемы. Рассмотрим, например, листинг 4.6: если поменять порядок двух вызовов функции open в породившем процессе, программа перестанет работать. Причина в том, что чтение из FIFO блокирует процесс, если канал еще не открыт на запись каким-либо другим процессом. Действительно, если мы меняем порядок вызовов open в породившем процессе, и породивший, и порожденный процессы открывают канал на чтение, притом что на запись он еще не открыт, так что оба процесса блокируются. Такая ситуация называется блокированием, или зависанием (deadlock). Она будет рассмотрена подробно в следующем разделе.</p>
     </section>
     <section>
      <title>
       <p>Пример: неродственные клиент и сервер</p>
      </title>
      <p>В листинге 4.6 клиент и сервер все еще являлись родственными процессами. Переделаем этот пример так, чтобы родство между ними отсутствовало. В листинге 4.7 приведен текст программы-сервера. Текст практически идентичен той части программы из листинга 4.6, которая относилась к серверу.</p>
      <p>Содержимое заголовка fifо.h приведено в листинге 4.8. Этот файл определяет имена двух FIFO, которые должны быть известны как клиенту, так и серверу.</p>
      <p>В листинге 4.9 приведен текст программы-клиента, которая не слишком отличается от части программы из листинга 4.6, относящейся к клиенту. Обратите внимание, что именно клиент, а не сервер удаляет канал FIFO по завершении работы, потому что последние операции с этим каналом выполняются им.</p>
      <subtitle>Листинг 4.7. Функция main независимого сервера</subtitle>
      <p><code>//pipe/server_main.c</code></p>
      <p><code>1  #include "fifo.h"</code></p>
      <p><code>2  void server(int, int);</code></p>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int readfd, writefd;</code></p>
      <p><code>7   /* создание двух FIFO. OK, если они существуют */</code></p>
      <p><code>8   if ((mkfifo(FIF01, FILE_MODE) &lt; 0) &amp;&amp; (errno != EEXIST))</code></p>
      <p><code>9    err_sys("can't create %s", FIF01);</code></p>
      <p><code>10  if ((mkfifo(FIF02, FILE MODE) &lt; 0) &amp;&amp; (errno != EEXIST)) {</code></p>
      <p><code>11   unlink(FIF01);</code></p>
      <p><code>12   err_sys("can't create %s", FIF02);</code></p>
      <p><code>13  }</code></p>
      <p><code>14  readfd = Open(FIF01, O_RDONLY, 0);</code></p>
      <p><code>15  writefd = Open(FIFO2, O_WRONLY, 0);</code></p>
      <p><code>16  server(readfd, writefd);</code></p>
      <p><code>17  exit(0);</code></p>
      <p><code>18 }</code> </p>
      <subtitle>Листинг 4.8. Заголовочный файл fifo.h, используемый и клиентом, и сервером</subtitle>
      <p><code>//pipe/fifo.h</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <p><code>2 #define FIFO1 "/tmp/fifo.1"</code></p>
      <p><code>3 #define FIFO2 "/tmp/fifo.2"</code></p>
      <subtitle>Листинг 4.9. Функция main независимого клиента</subtitle>
      <p><code>//pipe/client_main.c</code></p>
      <p><code>1  #include "fifo.h"</code></p>
      <p><code>2  void client(int, int);</code></p>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int readfd, writefd;</code></p>
      <p><code>7   writefd = Open(FIFO1, O_WRONLY, 0);</code></p>
      <p><code>8   readfd = Open(FIFO2, O_RDONLY, 0);</code></p>
      <p><code>9   client(readfd, writefd);</code></p>
      <p><code>10  Close(readfd);</code></p>
      <p><code>11  Close(writefd);</code></p>
      <p><code>12  Unlink(FIFO1);</code></p>
      <p><code>13  UnLink(FIFO2);</code></p>
      <p><code>14  exit(0);</code></p>
      <p><code>15 }</code></p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Для программных каналов и каналов FIFO ядро ведет подсчет числа открытых дескрипторов, относящихся к ним, поэтому безразлично, кто именно вызовет unlink — клиент или сервер. Хотя эта функция и удаляет файл из файловой системы, она не влияет на открытые в момент ее выполнения дескрипторы. Однако для других форм IPC, таких как очереди сообщений стандарта System V, счетчик отсутствует, и если сервер удалит очередь после записи в нее последнего сообщения, она может быть удалена еще до того, как клиент это сообщение считает.</p>
      </cite>
      <p>Для запуска клиента и сервера запустите сервер в фоновом режиме:</p>
      <p><code>% server_fifo &amp;</code></p>
      <p>а затем запустите клиент. Можно было сделать и по-другому: запускать только программу-клиент, которая запускала бы сервер с помощью fork и exec. Клиент мог бы передавать серверу имена FIFO в качестве аргументов командной строки в команде exec, вместо того чтобы обе программы считывали их из заголовка. Но в этом случае сервер являлся бы дочерним процессом и проще было бы обойтись программным каналом.</p>
     </section>
    </section>
    <section>
     <title>
      <p>4.7. Некоторые свойства именованных и неименованных каналов</p>
     </title>
     <p>Некоторые свойства именованных и неименованных каналов, относящиеся к их открытию, а также чтению и записи данных, заслуживают более пристального внимания. Прежде всего можно сделать дескриптор неблокируемым двумя способами. </p>
     <p>1. При вызове open указать флаг O_NONBLOCK. Например, первый вызов open в листинге 4.9 мог бы выглядеть так:</p>
     <p><code>writefd = Open(FIFO1, O_WRONLY | O_NONBLOCK, 0);</code></p>
     <p>2. Если дескриптор уже открыт, можно использовать fcntl для включения флага O_NONBLOCK. Этот прием нужно применять для программных каналов, поскольку для них не вызывается функция open и нет возможности указать флаг O_NONBLOCK при ее вызове. Используя fcntl, мы сначала получаем текущий статус файла с помощью F_GETFL, затем добавляем к нему с помощью побитового логического сложения (OR) флаг O_NONBLOCK и записываем новый статус с помощью команды F_SETFL:</p>
     <p><code>int flags;</code></p>
     <p><code>if ((flags = fcntl(fd, F_GETFL, 0)) &lt; 0) err_sys("F_GETFL error");</code></p>
     <p><code>flags |= O_NONBLOCK;</code></p>
     <p><code>if (fcntl(fd, F_SETFL, flags) &lt; 0) err_sys("F_SETFL error");</code></p>
     <p>Будьте аккуратны с программами, которые просто устанавливают требуемый флаг, поскольку при этом сбрасываются все прочие флаги состояния:</p>
     <p><code>/* Неправильное отключение блокировки */</code></p>
     <p><code>if (fcntl(fd, F_SETFL, O_NONBLOCK) &lt; 0) err_sys("F_SETFL error");</code></p>
     <p>Таблица 4.1 иллюстрирует действие флага, отключающего блокировку, при открытии очереди и при чтении данных из пустого программного канала или канала FIFO.</p>
     <empty-line/>
     <p>Таблица 4.1. Действие флага O_NONBLOCK на именованные и неименованные каналы </p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Операция</th>
       <th align="left" valign="top">Наличие открытых каналов</th>
       <th align="left" valign="top">Блокировка включена (по умолчанию)</th>
       <th align="left" valign="top">Флаг O_NONBLOCK установлен</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Открытие (open) FIFO только для чтения</td>
       <td align="left" valign="top">FIFO открыт на запись</td>
       <td align="left" valign="top">Возвращается код успешного завершения операции</td>
       <td align="left" valign="top">Возвращается код успешного завершения операции</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Открытие (open) FIFO только для чтения</td>
       <td align="left" valign="top">FIFO не открыт на запись</td>
       <td align="left" valign="top">Процесс блокируется, пока FIFO не будет открыт на запись</td>
       <td align="left" valign="top">Возвращается код успешного завершения операции</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Открытие (open) FIFO только для записи</td>
       <td align="left" valign="top">FIFO открыт на чтение</td>
       <td align="left" valign="top">Возвращает код успешного завершения операции</td>
       <td align="left" valign="top">Возвращает код успешного завершения операции</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Открытие (open) FIFO только для записи</td>
       <td align="left" valign="top">FIFO не открыт на чтение</td>
       <td align="left" valign="top">Блокируется до тех пор, пока FIFO не будет открыт на чтение</td>
       <td align="left" valign="top">Возвращает ошибку с кодом ENXIO</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Чтение (read) из пустого программного канала или FIFO</td>
       <td align="left" valign="top">Программный канал или FIFO открыт на запись</td>
       <td align="left" valign="top">Блокируется до тех пор, пока в программный канал или FIFO не будут помещены данные или они не будут закрыты всеми процессами, которыми они были открыты на запись</td>
       <td align="left" valign="top">Возвращает ошибку с кодом EAGAIN</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Чтение (read) из пустого программного канала или FIFO</td>
       <td align="left" valign="top">Программный канал или FIFO не открыт на запись</td>
       <td align="left" valign="top">read возвращает 0 (конец файла)</td>
       <td align="left" valign="top">read возвращает 0 (конец файла)</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Запись (write) в программный канал или FIFO</td>
       <td align="left" valign="top">Программный канал или FIFO открыт на чтение</td>
       <td align="left" valign="top">(См. в тексте)</td>
       <td align="left" valign="top">(См. в тексте)</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Запись (write) в программный канал или FIFO</td>
       <td align="left" valign="top">Программный канал или FIFO не открыт на чтение</td>
       <td align="left" valign="top">Программному потоку посылается сигнал SIGPIPE</td>
       <td align="left" valign="top">Программному потоку посылается сигнал SIGPIPE </td>
      </tr>
     </table>
     <p>Запомните несколько дополнительных правил, действующих при чтении и записи данных в программные каналы и FIFO.</p>
     <p>&#9632; При попытке считать больше данных, чем в данный момент содержится в программном канале или FIFO, возвращается только имеющийся объем данных. Нужно предусмотреть обработку ситуации, в которой функция read возвращает меньше данных, чем было запрошено.</p>
     <p>&#9632; Если количество байтов, направленных на запись функции write, не превышает значения PIPE_BUF (ограничение, устанавливаемое стандартом Posix, о котором более подробно рассказывается в разделе 4.11), то ядро гарантирует <emphasis>атомарность</emphasis> операции записи. Это означает, что если два процесса запишут данные в программный канал или FIFO приблизительно одновременно, то в буфер будут помещены сначала все данные от первого процесса, а затем от второго, либо наоборот. Данные от двух процессов при этом не будут смешиваться. Однако если количество байтов превышает значение PIPEBUF, атомарность операции записи не гарантируется.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Posix.1 требует, чтобы значение PIPE_BUF равнялось по меньшей мере 512. Характерные значения, встречающиеся на практике, лежат в диапазоне от 1024 (BSD/OS 3.1) до 5120 байт (Solaris 2.6). В разделе 4.11 приведен текст программы, выводящей значение этой константы.</p>
     </cite>
     <p>&#9632; Установка флага O_NONBLOCK не влияет на атомарность операции записи в про-грaммный канал или FIFO — она определяется исключительно объемом посылаемых данных в сравнении с величиной PIPE_BUF. Однако если для прогрaммнoгo канала или FIFO отключена блокировка, возвращаемое функцией write значение зависит от количества байтов, отправленных на запись, и наличия свободного места в пpoгрaммнoм канале или FIFO. Если количество байтов не превышает величины PIPE_BUF, то:</p>
     <p> &#9633; Если в канале достаточно места для записи требуемого количества данных, они будут переданы все сразу.</p>
     <p> &#9633; Если места в пpoгрaммнoм канале или FIFO недостаточно для записи требуемого объема данных, происходит немедленное завершение работы функции с возвратом ошибки EAGAIN. Поскольку установлен флаг O_NONBLOCK, процесс не может быть заблокирован, но в то же время ядро не может принять лишь часть данных, так как при этом невозможно гарантировать атомарность операции записи. Поэтому ядро возвращает ошибку, сообщающую процессу о необходимости попытаться произвести запись еще раз.</p>
     <p>&#9632; Если количество байтов превышает значение PIPE_BUF, то:</p>
     <p> &#9633; Если в программном канале или FIFO есть место хотя бы для одного байта, ядро передает в буфер ровно столько данных, сколько туда может поместиться, и это переданное количество возвращается функцией write.</p>
     <p> &#9633; Если в программном канале или FIFO свободное место отсутствует, происходит немедленное завершение работы с возвратом ошибки EAGAIN.</p>
     <p>&#9632; При записи в программный канал или FIFO, не открытый для чтения, ядро посылает сигнал SIGPIPE:</p>
     <p> &#9633; Если процесс не принимает (catch) и не игнорирует SIGPIPE, выполняется действие по умолчанию — завершение работы процесса.</p>
     <p> &#9633; Если процесс игнорирует сигнал SIGPIPE или перехватывает его и возвращается из подпрограммы его обработки, write возвращает ошибку с кодом EPIPE.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>SIGPIPE считается синхронным сигналом, что означает, что он привязан к конкретному программному потоку, а именно тому, который вызвал функцию write. Простейшим способом обработки сигнала является его игнорирование (установка SIG_IGN) и предоставление функции write возможности вернуть ошибку с кодом EPIPE. В приложении всегда должна быть предусмотрена обработка ошибок, возвращаемых функцией write, а вот определить, что процесс был завершен сигналом SIGPIPE, сложнее. Если сигнал не перехватывается, придется посмотреть на статус завершения работы процесса (termination status) из интерпретатора команд, чтобы узнать, что процесс был принудительно завершен сигналом и каким именно сигналом. В разделе 5.13 [24] о сигнале SIGPIPE рассказывается более подробно.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>4.8. Один сервер, несколько клиентов</p>
     </title>
     <section>
      <p>Преимущества канала FIFO проявляются более явно в том случае, когда сервер представляет собой некоторый длительно функционирующий процесс (например, демон, наподобие описанного в главе 12 [24]), не являющийся родственным клиенту. Демон создает именованный канал с вполне определенным известным именем, открывает его на чтение, а запускаемые впоследствии клиенты открывают его на запись и отправляют демону команды и необходимые данные. Односторонняя связь в этом направлении (от клиента к серверу) легко реализуется с помощью FIFO, однако необходимость отправки данных в обратную сторону (от сервера к клиенту) усложняет задачу. Рисунок 4.12 иллюстрирует прием, применяемый в этом случае. </p>
      <image l:href="#Any2FbImgLoader85"/>
      <p>Рис. 4.12. Один сервер, несколько клиентов</p>
      <empty-line/>
      <p>Сервер создает канал с известным полным именем, в данном случае /tmp/fifо.serv. Из этого канала он считывает запросы клиентов. Каждый клиент при запуске создает свой собственный канал, полное имя которого определяется его идентификатором процесса. Клиент отправляет свой запрос в канал сервера с известным именем, причем запрос этот содержит идентификатор процесса клиента и имя файла, отправку которого клиент запрашивает у сервера. В листинге 4.10 приведен текст программы сервера.</p>
      <subtitle>Листинг 4.10. Сервер, обслуживающий несколько клиентов с помощью канала FIFO</subtitle>
      <p><code>//fifocliserv/mainserver.с</code></p>
      <p><code>1  #include "fifo.h"</code></p>
      <p><code>2  void server(int, int);</code></p>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int readfifo, writefifo, dummyfd, fd;</code></p>
      <p><code>7   char *ptr, buff[MAXLINE], fifoname[MAXLINE];</code></p>
      <p><code>8   pid_t pid;</code></p>
      <p><code>9   ssize_t n;</code></p>
      <p><code>10  /* создание FIFO сервера с известным именем. ОК, если уже существует */</code></p>
      <p><code>11  if ((mkfifo(SERV_FIFO, FILE_MODE) &lt; 0) &amp;&amp; (errno != EEXIST))</code></p>
      <p><code>12   err_sys("can't create %s", SERV_FIFO);</code></p>
      <p><code>13  /* открытие FIFO-cepвepa на чтение */</code></p>
      <p><code>14  readfifo = Open(SERV_FIFO, O_RDONLY, 0);</code></p>
      <p><code>15  dummyfd = Open(SERV_FIFO, O_WRONLY, 0); /* не используется */</code></p>
      <p><code>16  while ((n = Readline(readfifo, buff, MAXLINE)) &gt; 0) {</code></p>
      <p><code>17   if (buff[n-1] == '\n')</code></p>
      <p><code>18    n--; /* delete newline from readline() */</code></p>
      <p><code>19   buff[n] = '\0'; /* полное имя, завершаемое 0 */</code></p>
      <p><code>20   if ((ptr = strchr(buff, ' ')) == NULL) {</code></p>
      <p><code>21    err_msg("bogus request: ls", buff);</code></p>
      <p><code>22    continue;</code></p>
      <p><code>23   }</code></p>
      <p><code>24   *ptr++ = 0; /* идентификатор процесса, указатель на имя файла */</code></p>
      <p><code>25   pid = atol(buff);</code></p>
      <p><code>26   snprintf(fifoname, sizeof(fifoname), "/tmp/fifo.%ld", (long) pid);</code></p>
      <p><code>27   if ( (writefifo = open(fifoname, O_WRONLY, 0)) &lt; 0) {</code></p>
      <p><code>28    err_msg("cannot open: ls", fifoname);</code></p>
      <p><code>29    continue;</code></p>
      <p><code>30   }</code></p>
      <p><code>31   if ((fd = open(ptr, O_RDONLY)) &lt; 0) {</code></p>
      <p><code>32    /* ошибка, нужно сообщить клиенту */</code></p>
      <p><code>33    snprintf(buff + n, sizeof(buff) – n, ": can't open, %s\n",</code></p>
      <p><code>34     strerror(errno));</code></p>
      <p><code>35    n = strlen(ptr);</code></p>
      <p><code>36    Write(writefifo, ptr, n);</code></p>
      <p><code>37    Close(writefifo);</code></p>
      <p><code>38</code></p>
      <p><code>39   } else {</code></p>
      <p><code>40    /* успешное открытие, копируем файл */</code></p>
      <p><code>41    while ((n = Read(fd, buff, MAXLINE)) &gt; 0)</code></p>
      <p><code>42     Write(writefifo, buff, n);</code></p>
      <p><code>43    Close(fd);</code></p>
      <p><code>44    Close(writefifo);</code></p>
      <p><code>45   }</code></p>
      <p><code>46  }</code></p>
      <p><code>47 }</code></p>
      <subtitle>Создание канала и открытие его только для записи и только для чтения</subtitle>
      <p>10-15 Сервер создает канал FIFO с известным именем, обрабатывая ситуацию, когда такой канал уже существует. Затем этот канал открывается дважды: один раз только для чтения, а второй — только для записи. Дескриптор readfifo используется для приема запросов от клиентов, а дескриптор dummyfd не используется вовсе. Причина, по которой нужно открыть канал для записи, видна из табл. 4.1. Если канал не открыть на запись, то при завершении работы очередного клиента этот канал будет опустошаться и сервер будет считывать 0, означающий конец файла. Пришлось бы каждый раз закрывать канал вызовом close, а затем заново открывать его с флагом O_RDONLY, что приводило бы к блокированию демона до подключения следующего клиента. Мы же всегда будем иметь дескриптор, открытый на запись, поэтому функция read не будет возвращать 0, означающий конец файла, при отсутствии клиентов. Вместо этого сервер просто будет блокироваться при вызове read, ожидая подключения следующего клиента. Этот трюк упрощает код программы-сервера и уменьшает количество вызовов open для канала сервера.</p>
      <p>При запуске сервера первый вызов open (с флагом O_RDONLY) приводит к блокированию процесса до появления первого клиента, открывающего канал сервера на запись (см. табл. 4.1). Второй вызов open (с флагом O_WRONLY) не приводит к блокированию, поскольку канал уже открыт на запись. </p>
      <subtitle>Считывание запроса от клиента</subtitle>
      <p>16 Каждый запрос, принимаемый от клиента, представляет собой одну строку, состоящую из идентификатора процесса, пробела и полного имени требуемого файла. Эта строка считывается функцией readline (приведенной в [24, с.79]).</p>
      <subtitle>Анализ запроса клиента</subtitle>
      <p>17-26 Символ перевода строки, возвращаемый функцией readline, удаляется. Этот символ может отсутствовать только в том случае, если буфер был заполнен, прежде чем был обнаружен символ перевода строки, либо если последняя введенная строка не была завершена этим символом. Функция strchr возвращает указатель на первый пробел в этой строке, который затем увеличивается на единицу, чтобы он указывал на первый символ полного имени файла, следующего за пробелом. Полное имя канала клиента формируется из его идентификатора процесса, и этот канал открывается сервером на запись.</p>
     </section>
     <section>
      <title>
       <p>Открытие файла и отправка его в FIFO клиента</p>
      </title>
      <p>27-44 Оставшаяся часть кода пpoгрaммы-cepвepa аналогична функции server из листинга 4.3. Программа открывает файл; если при этом возникает ошибка — клиенту отсылается сообщение о ней. Если открытие файла завершается успешно, его содержимое копируется в канал клиента. После завершения копирования открытый сервером «конец» (дескриптор) канала клиента должен быть закрыт с помощью функции close, чтобы функция read вернула пpoгрaммe-клиeнтy значение 0 (конец файла). Сервер не удаляет канал клиента; клиент должен самостоятельно позаботиться об этом после приема от сервера символа конца файла. Текст пpoгрaммы-клиeнтa приведен в листинге 4.11.</p>
      <subtitle>Листинг 4.11. Клиент, связывающийся с сервером (листинг 4.10) с помощью канала FIFO</subtitle>
      <p><code>//fifocliserv/mainclient.с</code></p>
      <p><code>1  #include "fifo.h"</code></p>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int readfifo, writefifo;</code></p>
      <p><code>6   size_t len;</code></p>
      <p><code>7   ssize_t n;</code></p>
      <p><code>8   char *ptr, fifoname[MAXLINE], buff[MAXLINE];</code></p>
      <p><code>9   pid_t pid;</code></p>
      <p><code>10  /* создание FIFO с включением в его имя PID */</code></p>
      <p><code>11  pid = getpid();</code></p>
      <p><code>12  snprintf(fifoname, sizeof(fifoname), "/tmp/fifo,%ld", (long) pid):</code></p>
      <p><code>13  if ((mkfifo(fifoname, FILE_MODE) &lt; 0) &amp;&amp; (errno != EEXIST))</code></p>
      <p><code>14   err_sys("can't create %s", fifoname);</code></p>
      <p><code>15  /* инициализация буфера PID и пробелом */</code></p>
      <p><code>16  snprintf(buff, sizeof(buff), "%ld ", (long) pid);</code></p>
      <p><code>17  len = strlen(buff);</code></p>
      <p><code>18  ptr = buff + len;</code></p>
      <p><code>19  /* считывание полного имени */</code></p>
      <p><code>20  Fgets(ptr, MAXLINE – len, stdin);</code></p>
      <p><code>21  len = strlen(buff); /* fgets() гарантирует завершающий 0 */</code></p>
      <p><code>22  /* открытие FIFO сервера и запись в него полного имени и PID */</code></p>
      <p><code>23  writefifo = Open(SERV_FIFO, O_WRONLY, 0);</code></p>
      <p><code>24  Write(writefifo, buff, len);</code></p>
      <p><code>25  /* открытие созданного FIFO; блокирование до открытия его сервером */</code></p>
      <p><code>26  readfifo = Open(fifoname, O_RDONLY; 0);</code></p>
      <p><code>27  /* считывание из канала IPC, запись в stdout */</code></p>
      <p><code>28  while ((n = Read(readfifo, buff, MAXLINE)) &gt; 0)</code></p>
      <p><code>29   Write(STDOUT_FILENO, buff, n);</code></p>
      <p><code>30  Close(readfifo);</code></p>
      <p><code>31  Unlink(fifoname);</code></p>
      <p><code>32  exit(0);</code></p>
      <p><code>33 }</code></p>
      <subtitle>Создание канала</subtitle>
      <p>10-14 Идентификатор процесса клиента содержится в имени создаваемого им канала.</p>
      <subtitle>Формирование строки запроса</subtitle>
      <p>15-21 Запрос клиента состоит из его идентификатора процесса, одного пробела, полного имени запрашиваемого им файла и символа перевода строки. Строка запроса формируется в массиве buff, причем имя файла считывается из стандартного потока ввода.</p>
      <subtitle>Открытие канала сервера и отправка запроса</subtitle>
      <p>22-24 Клиент открывает канал сервера и записывает в него строку запроса. Если клиент окажется первым с момента запуска сервера, вызов open разблокирует сервер, заблокированный после сделанного им вызова open (с флагом O_RDONLY).</p>
      <subtitle>Прием содержимого файла или сообщения об ошибке от сервера</subtitle>
      <p>25-31 Ответ сервера считывается из канала и записывается в стандартный поток вывода, после чего канал клиента закрывается и* удаляется.</p>
      <p>Сервер может быть запущен в одном из окон, а клиент — в другом, и программа будет работать так, как мы и рассчитывали. Ниже мы приводим только текст, выводимый клиентом:</p>
      <p><code>solaris % <strong>mainclient /etc/shadow</strong>          <emphasis>файл, который нам нельзя читать</emphasis></code></p>
      <p><code>/etc/shadow: can't open. Permission denied</code></p>
      <p><code>solaris % <strong>mainclient /etc/inet/ntp.conf</strong>  <emphasis>файл из двух строк</emphasis></code></p>
      <p><code>multicastclient 224.0.1.1</code></p>
      <p><code>driftfile /etc/inet/ntp.drift</code> </p>
      <p>Мы можем также связаться с сервером из интерпретатора команд, поскольку каналы FIFO обладают именами в файловой системе.</p>
      <p><code>solaris % <strong>Pid=$$</strong></code></p>
      <p><code>solaris % <strong>mkfifo /tmp/fifo.$Pid</strong></code></p>
      <p><code>solaris % <strong>echo "$Pid /etc/inet/ntp.conf" &gt; /tmp/fifo.serv</strong></code></p>
      <p><code>solaris % <strong>cat &lt; /tmp/fifo.$Pid</strong></code></p>
      <p><code>multicastclient 224.0.1.1</code></p>
      <p><code>driftfile /etc/inet/ntp.drift</code></p>
      <p><code>solaris % <strong>rm /tmp/fifo.$Pid</strong></code></p>
      <p>Мы отсылаем серверу идентификатор процесса текущей копии интерпретатора и полное имя файла одной командой интерпретатора (echo) и считываем из канала сервера результат с помощью другой команды (cat). Между выполнением этих двух команд может пройти произвольный промежуток времени. Таким образом, сервер помещает содержимое файла в канал, а клиент затем запускает команду cat, чтобы считать оттуда данные. Может показаться, что данные каким-то образом хранятся в канале, хотя он не открыт ни одним процессом. На самом деле все не так. После закрытия пpoгрaммнoгo канала или FIFO последним процессом с помощью команды close все данные, в нем находящиеся, теряются. В нашем примере сервер, считав строку запроса от клиента, блокируется при попытке открыть канал клиента, потому что клиент (наша копия интерпретатора) еще не открыл его на чтение (вспомним табл. 4.1). Только после вызова cat некоторое время спустя канал будет открыт на чтение, и тогда сервер разблокируется. Кстати, таким образом осуществляется атака типа «отказ в обслуживании» (denial-of-service attack), которую мы обсудим в следующем разделе.</p>
      <p>Использование интерпретатора позволяет провести простейшую проверку способности сервера обрабатывать ошибки. Мы можем отправить серверу строку без идeнтификaтopa процесса или отослать ему такой идентификатор, которому не соответствует никакой канал FIFO в каталоге /tmp. Например, если мы запустим сервер и введем нижеследующие строки:</p>
      <p><code>solaris % <strong>cat &gt; /tmp/fifo.serv /no/process/id</strong></code></p>
      <p><code>999999 /invalid/process/id</code></p>
      <p>то сервер выдаст текст:</p>
      <p><code>solaris % <strong>server</strong></code></p>
      <p><code>bogus request: /no/process/id</code></p>
      <p><code>cannot open: /tmp/fifo.999999</code></p>
     </section>
     <section>
      <title>
       <p>Атомарность записи в FIFO</p>
      </title>
      <p>Наша простейшая пара клиент-сервер позволяет наглядно показать важность наличия свойства атомарности записи в пpoгрaммныe каналы и FIFO. Предположим, что два клиента посылают серверу запрос приблизительно в один и тот же момент. Первый клиент отправляет следующую строку:</p>
      <p><code>1234 /etc/inet/ntp.conf</code></p>
      <p>второй:</p>
      <p><code>9876 /etc/passwd</code></p>
      <p>Предполагая, что каждый клиент помещает данные в FIFO за один вызов write и кaждая строка имеет размер, не превышающий величины PIPE_BUF (что чаще всего заведомо выполняется, поскольку PIPE_BUF обычно лежит в диапазоне 1024-5120, а длина полного имени обычно oгрaничeнa 1024 байт), мы можем гарантировать, что в FIFO данные будут иметь следующий вид:</p>
      <p><code>1234 /etc/inet/ntp.conf</code></p>
      <p><code>9876 /etc/passwd</code></p>
      <p>либо</p>
      <p><code>9876 /etc/passwd</code></p>
      <p><code>1234 /etc/inet/ntp.conf</code></p>
      <p>Данные в канале не могут смешаться в «кашу», наподобие:</p>
      <p><code>1234 /etc/inet9876 /etc/passwd</code></p>
      <p><code>/ntp.conf</code></p>
     </section>
     <section>
      <title>
       <p>FIFO и NFS</p>
      </title>
      <p>Каналы FIFO представляют собой вид IPC, который может использоваться только в пределах одного узла. Хотя FIFO и обладают именами в файловой системе, они могут применяться только в локальных файловых системах, но не в присоединенных сетевых (NFS).</p>
      <p><code>solaris % <strong>mkfifo /nsf/bsdi/usr/rstevens/fifo.temp</strong></code></p>
      <p><code>mkfifo: I/O error</code></p>
      <p>В этом примере файловая система /nfs/bsdi/usr — это файловая система /usr нa yзлe bsdi.</p>
      <p>Некоторые системы (например, BSD/OS) позволяют создавать FIFO в присоединенных файловых системах, но по ним нельзя передавать данные между узлами. В этом случае такой канал может использоваться лишь как «точка рандеву» в файловой системе между клиентами и серверами на одном и том же узле. Процесс, выполняемый на одном узле, <emphasis>нe мoжem</emphasis> послать данные через FIFO процессу, выполняемому на другом узле, даже если оба процесса смогут открыть этот канал, доступный обоим узлам через сетевую файловую систему.</p>
     </section>
    </section>
    <section>
     <title>
      <p>4.9. Последовательные и параллельные серверы</p>
     </title>
     <section>
      <p>Сервер в нашем простом примере из предыдущего раздела являлся последовательным сервером (iterative server). Он последовательно обрабатывал запросы клиентов, переходя к следующему только после полного завершения работы с предыдущим. Например, если два клиента пошлют запрос такому серверу приблизительно одновременно, причем один из них запросит 10-мегабайтный файл, отправка которого займет, например, 10 секунд, а второй — 10-байтный файл, то второму придется ждать по меньшей мере 10 секунд, пока не будет обслужен первый клиент.</p>
      <p>Альтернативой является параллельный сервер (concurrent server). Наиболее часто встречаемый в Unix вид такого сервера называется one-child-per-client (каждому клиенту — один дочерний процесс). Сервер вызывает fork для создания нового процесса каждый раз, когда появляется новый клиент. Дочерний процесс полностью обрабатывает запрос клиента, а поддержка многозадачности в Unix обеспечивает параллельность выполнения всех этих процессов. Однако существуют и другие методы решения задачи, подробно описанные в главе 27 [24]:</p>
      <p>&#9632; создание пула дочерних процессов и передача нового клиента свободному дочернему процессу;</p>
      <p>&#9632; создание одного пpoгрaммнoгo потока для каждого клиента;</p>
      <p>&#9632; создание пула потоков и передача нового клиента свободному потоку.</p>
      <p>Хотя в [24] обсуждаются проблемы создания сетевых серверов, те же методы применимы и к серверам межпроцессного взаимодействия (IPC server), клиенты которых находятся на одном узле.</p>
     </section>
     <section>
      <title>
       <p>Атака типа «отказ в обслуживании»</p>
      </title>
      <p>Один из недостатков последовательных серверов был уже отмечен выше — некоторым клиентам приходится ждать дольше чем нужно, потому что их запросы приходят после запросов других клиентов, запрашивающих большие файлы. Существует и другая проблема. Вспомним наш пример с интерпретатором команд, приведенный после листинга 4.11, и относящееся к нему обсуждение того, что сервер блокируется при вызове open для FIFO клиента, если клиент еще не открыл этот канал (чего не происходит до выполнения cat). Это дает возможность злоумышленнику «подвесить» сервер, послав ему запрос, не открывая канала. Этот тип атаки называется «отказ в обслуживании» (Denial of Service — DoS). Чтобы исключить возможность такой атаки, нужно быть аккуратным при написании последовательной части любого сервера, учитывая возможность и потенциальную продолжительность его блокирования. Одним из методов решения проблемы является установка максимального времени ожидания для некоторых операций, однако обычно проще сделать сервер параллельным, а не последовательным, поскольку в данном случае атака будет действовать лишь на один из дочерних процессов, а не на весь сервер. Однако даже параллельный сервер не защищен от атаки полностью: злоумышленник все еще может послать множество запросов, что приведет к превышению предела количества порожденных сервером процессов и невозможности выполнения последующих вызовов fork.</p>
     </section>
    </section>
    <section>
     <title>
      <p>4.10. Потоки и сообщения</p>
     </title>
     <p>Приведенные примеры пpoгрaммныx каналов и каналов FIFO использовали потоковую модель ввода-вывода, что естественно для Unix. При этом отсутствуют грaницы записей — данные при операциях чтения и записи не проверяются вовсе. Процесс, считывающий 100 байт из FIFO, не может определить, записал ли другой процесс в FIFO все 100 байт за 1 раз, или за 5 раз по 20 байт, или в любой другой комбинации общим объемом 100 байт. Возможно, один процесс записал в FIFO 55 байт, а потом другой — 45. Данные представляют собой просто поток байтов, никак не интерпретируемых системой. Если же требуется какая-либо интерпретация данных, пишущий и читающий процессы должны заранее «договориться» о ее правилах и выполнять всю работу самостоятельно.</p>
     <p>Иногда приложению может потребоваться передавать данные, обладающие некоторой внутренней структурой. Это могут быть, например, сообщения переменной длины: в этом случае читающий процесс должен знать, где заканчивается одно сообщение и начинается следующее. Для разграничения сообщений широко используются три метода:</p>
     <p>1. Специальная внутриполосная завершающая последовательность: множество приложений под Unix используют в качестве разделителя сообщений символ перевода строки. Пишущий процесс добавляет к каждому сообщению этот символ, а считывающий процесс производит построчное считывание. Так работают клиент и сервер из листингов 4.10 и 4.11, чтобы разделить запросы клиентов. Этот метод требует исключения символа-разделителя из самих передаваемых данных (в случае необходимости его передать он должен предваряться другим специальным символом).</p>
     <p>2. Явное указание длины: каждой записи предшествует информация об ее длине. Мы вскоре воспользуемся этим методом. Он также применяется в Sun RPC при использовании совместно с TCP. Одним из преимуществ этого метода является отсутствие необходимости исключать разделитель из передаваемых данных, поскольку получатель не проверяет все данные, а переходит сразу к концу очередной записи, чтобы узнать длину следующей.</p>
     <p>3. Одна запись за подключение: приложение закрывает подключение к партнеру (подключение TCP для сетевых приложений либо просто подключение IPC), обозначая конец записи. Это требует повторного подключения для передачи следующей записи, однако используется в стандарте HTTP 1.0.</p>
     <p>Стандартная библиотека ввода-вывода также может использоваться для считывания и записи данных в пpoгрaммный канал или FIFO. Поскольку канал может быть открыт только функцией piре, возвращающей открытый дескриптор, для создания нового стандартного потока, связанного с этим дескриптором, можно использовать стандартную функцию fdopen. Канал FIFO обладает именем, поэтому он может быть открыт с помощью функции fopen.</p>
     <p>Можно создавать и более структурированные сообщения — эта возможность предоставляется очередями сообщений и в Posix, и в System V. Мы вскоре узнаем, что каждое сообщение обладает длиной и приоритетом (типом в System V). Длина и приоритет указываются отправителем и возвращаются получателю после считывания сообщения. Каждое сообщение представляет собой запись, аналогично дeйтaгрaммaм UDP ([24]).</p>
     <p>Мы можем структурировать данные, передаваемые по программному каналу или FIFO, самостоятельно. Определим сообщение в нашем заголовочном файле mesg.h, как показано в листинге 4.12.</p>
     <subtitle>Листинг 4.12. Структура mymesg и сопутствующие определения</subtitle>
     <p><code>//pipemesg/mesg.h</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  /* Наши собственные "сообщения", которые могут использоваться с каналами, FIFO и очередями сообщений */</code></p>
     <p><code>3  /* Мы хотим, чтобы sizeof(struct mymesg) &lt;= PIPE_BUF */</code></p>
     <p><code>4  #define MAXMESGDATA (PIPE_BUF – 2*sizeof(long))</code></p>
     <p><code>5  /* Длина mesg_len и mesg_type */</code></p>
     <p><code>6  #define MESGHDRSIZE (sizeof(struct mymesg) – MAXMESGDATA)</code></p>
     <p><code>7  struct mymesg {</code></p>
     <p><code>8   long mesg_len; //количество байтов в mesg_data, может быть О</code></p>
     <p><code>9   long mesg_type;//тип сообщения, должен быть &gt; 0</code></p>
     <p><code>10  char mesg_data[MAXMESGDATA];</code></p>
     <p><code>11 };</code></p>
     <p><code>12 ssize_t mesg_send(int, struct mymesg *);</code></p>
     <p><code>13 void Mesg_send(int, struct mymesg *);</code></p>
     <p><code>14 ssize_t mesg_recv(int, struct mymesg *);</code></p>
     <p><code>15 ssize_t Mesg_recv(int, struct mymesg *);</code></p>
     <p>Каждое сообщение содержит в себе информацию о своем типе (mesg_type), причем значение этой переменной должно быть больше нуля. Пока мы будем игнорировать это поле в записи, но вернемся к нему в главе 6, где описываются очереди сообщений System V. Каждое сообщение также обладает длиной, кoтopая может быть и нулевой. Структура mymesg позволяет предварить каждое сообщение информацией о его типе и длине вместо использования символа перевода строки для сигнализации конца сообщения. Ранее мы отметили два преимущества этого подхода: получатель не должен сканировать все принятые байты в поисках конца сообщения и отсутствует необходимость исключать появление разделителя в самих данных.</p>
     <p>На рис. 4.13 изображен вид структуры mymesg и ее использование с каналами, FIFO и очередями сообщений System V. </p>
     <image l:href="#Any2FbImgLoader91"/>
     <p>Рис. 4.13. Структура mymesg</p>
     <empty-line/>
     <p>Мы определяем две функции для отправки и приема сообщений. В листинге 4.13 приведен текст функции mesg_send, а в листинге 4.14 — функции mesg_recv.</p>
     <subtitle>Листинг 4.13. Функция mesg_send</subtitle>
     <p><code>//pipemesg/mesg_send.c</code></p>
     <p><code>1 #include "mesg.h"</code></p>
     <p><code>2 ssize_t</code></p>
     <p><code>3 mesg_send(int fd, struct mymesg *mptr)</code></p>
     <p><code>4 {</code></p>
     <p><code>5  return(write(fd, mptr, MESGHDRSIZE + mptr-&gt;mesg_len));</code></p>
     <p><code>6 }</code></p>
     <subtitle>Листинг 4.14. Функция mesg_recv</subtitle>
     <p><code>//pipemesg/mesg_recv.c</code></p>
     <p><code>1  #include "mesg.h"</code></p>
     <p><code>2  ssize_t</code></p>
     <p><code>3  mesg_recv(int fd, struct mymesg *mptr)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   size_t len;</code></p>
     <p><code>6   ssize_t n;</code></p>
     <p><code>8   /* считывание заголовка сообщения для определения его длины */</code></p>
     <p><code>9   if ((n = Read(fd, mptr, MESGHDRSIZE)) == 0)</code></p>
     <p><code>10   return(0); /* end of file */</code></p>
     <p><code>11  else if (n != MESGHDRSIZE)</code></p>
     <p><code>12   err_quit("message header: expected %d, got %d". MESGHDRSIZE, n);</code></p>
     <p><code>13  if ((len = mptr-&gt;mesg_len) &gt; 0)</code></p>
     <p><code>14   if ((n = Read(fd, mptr-&gt;mesg_data, len)) != len)</code></p>
     <p><code>15    err_quit("message data: expected %d, got %d", len, n);</code></p>
     <p><code>16  return(len);</code></p>
     <p><code>17 }</code></p>
     <p>Теперь для каждого сообщения функция read вызывается дважды: один раз для считывания длины, а другой — для считывания самого сообщения (если его длина больше 0).</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Внимательные читатели могли заметить, что функция mesg_recv проверяет наличие всех возможных ошибок и прекращает работу при их обнаружении. Однако мы все же определили функцию-обертку Mesg_recv и вызываем из наших программ именно ее — для единообразия.</p>
     </cite>
     <p>Изменим теперь функции client и server, чтобы воспользоваться новыми функциями mesg_send и mesg_recv. В листинге 4.15 приведен текст функции-клиента.</p>
     <subtitle>Листинг 4.15. Функция client с использованием сообщений</subtitle>
     <p><code>//pipemesg/client.c</code></p>
     <p><code>1  #include "mesg.h"</code></p>
     <p><code>2  void</code></p>
     <p><code>3  client(int readfd, int writefd)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   size_t len;</code></p>
     <p><code>6   ssize_t n;</code></p>
     <p><code>7   struct mymesg mesg;</code></p>
     <p><code>8   /* считывание полного имени */</code></p>
     <p><code>9   Fgets(mesg.mesg_data, MAXMESGDATA, stdin);</code></p>
     <p><code>10  len = strlen(mesg.mesg_data);</code></p>
     <p><code>11  if (mesg.mesg_data[len-1] == '\n')</code></p>
     <p><code>12   len--; /* удаление перевода строки из fgets() */</code></p>
     <p><code>13  mesg.mesg_len = len;</code></p>
     <p><code>14  mesg.mesg_type = 1;</code></p>
     <p><code>15  /* запись полного имени в канал IPC */</code></p>
     <p><code>16  Mesg_send(writefd, &amp;mesg);</code></p>
     <p><code>17  /* считывание из канала IPC. запись в stdout */</code></p>
     <p><code>18  while ( (n = Mesg_recv(readfd, &amp;mesg)) &gt; 0)</code></p>
     <p><code>19   Write(STDOUT_FILENO, mesg.mesg_data, n);</code></p>
     <p><code>20 }</code></p>
     <subtitle>Считывание имени файла и отправка его серверу</subtitle>
     <p>8-16 Полное имя считывается из стандартного потока ввода и затем отправляется на сервер с помощью функции mesg_send.</p>
     <subtitle>Считывание содержимого файла или сообщения об ошибке от сервера</subtitle>
     <p>17-19 Клиент вызывает функцию mesg_recv в цикле, считывая все приходящие от сервера сообщения. По соглашению, когда mesg_recv возвращает нулевую длину сообщения, это означает конец передаваемых сервером данных. Мы увидим, что сервер добавляет символ перевода строки к каждому сообщению, отправляемому клиенту, поэтому пустая строка будет иметь длину сообщения 1. В листинге 4.16 приведен текст функции-сервера.</p>
     <subtitle>Листинг 4.16. Функция server, использующая сообщения</subtitle>
     <p><code>//pipemesg/server.c</code></p>
     <p><code>1  #include "mesg.h"</code></p>
     <p><code>2  void</code></p>
     <p><code>3  server(int readfd, int writefd)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   FILE *fp;</code></p>
     <p><code>6   ssize_t n;</code></p>
     <p><code>7   struct mymesg mesg;</code></p>
     <p><code>8   /* считывание полного имени из канала */</code></p>
     <p><code>9   mesg.mesg_type = 1;</code></p>
     <p><code>10  if ((n = Mesg_recv(readfd, &amp;mesg)) == 0)</code></p>
     <p><code>11   err_quit("pathname missing");</code></p>
     <p><code>12  mesg.mesg_data[n] = '\0'; /* полное имя, завершающееся 0 */</code></p>
     <p><code>13  if ((fp = fopen(mesg.mesg_data, "r")) == NULL) {</code></p>
     <p><code>14   /* ошибка, нужно сообщить клиенту */</code></p>
     <p><code>15   snprintf(mesg.mesg_data + n, sizeof(mesg.mesg_data) – n,</code></p>
     <p><code>16    ": can't open, %s\n", strerror(errno));</code></p>
     <p><code>17   mesg.mesg_len = strlen(mesg.mesg_data);</code></p>
     <p><code>18   Mesg_send(writefd, &amp;mesg);</code></p>
     <p><code>19  } else {</code></p>
     <p><code>20   /* файл успешно открыт, передача данных */</code></p>
     <p><code>21   while (Fgets(mesg.mesg_data, MAXMESGDATA, fp) != NULL) {</code></p>
     <p><code>22    mesg.mesg_len = strlen(mesg.mesg_data);</code></p>
     <p><code>23    Mesg_send(writefd, &amp;mesg);</code></p>
     <p><code>24   }</code></p>
     <p><code>25   Fclose(fp);</code></p>
     <p><code>26  }</code></p>
     <p><code>27  /* отправка сообщения нулевой длины для обозначения конца связи */</code></p>
     <p><code>28  mesg.mesg_len = 0;</code></p>
     <p><code>29  Mesg_send(writefd, &amp;mesg);</code></p>
     <p><code>30 }</code></p>
     <subtitle>Считывание имени файла из канала IPC, открытие файла</subtitle>
     <p>8-18 Сервер принимает от клиента имя файла. Хотя значение mesg_type, равное 1, нигде не используется (оно затирается функцией mesg_recv из листинга 4.14), мы будем использовать ту же функцию при работе с очередями сообщений System V (листинг 6.8), а в данном случае в этом значении уже возникает потребность (см., например, листинг 6.11). Стандартная функция ввода-вывода fopen открывает файл, что отличается от листинга 4.3, где вызывалась функция open для получения дескриптора файла. Причина, по которой мы воспользовались fopen, заключается в том, что в этой пpoгрaммe мы пользуемся библиотечной функцией fgets для считывания содержимого файла построчно и затем отправляем клиенту строку за строкой.</p>
     <subtitle>Отправка файла клиенту</subtitle>
     <p>19-26 Если вызов fopen оказывается успешным, содержимое файла считывается с помощью функции fgets и затем отправляется клиенту построчно. Сообщение с нулевой длиной означает конец файла.</p>
     <p>При использовании пpoгрaммныx каналов или FIFO мы могли бы также закрыть канал IPC, чтобы дать клиенту знать о том, что передача файла завершена. Однако мы используем передачу сообщения нулевой длины, потому что другие типы IPC не поддерживают концепцию конца файла.</p>
     <p>Функции main, вызывающие новые функции client и server, вообще не претерпели никаких изменений. Мы можем использовать либо версию для работы с каналами (листинг 4.1), либо версию для работы с FIFO (листинг 4.6).</p>
    </section>
    <section>
     <title>
      <p>4.11. Ограничения программных каналов и FIFO</p>
     </title>
     <p>На программные каналы и каналы FIFO системой накладываются всего два ограничения:</p>
     <p>&#9632; OPEN_MAX — максимальное количество дескрипторов, которые могут быть одновременно открыты некоторым процессом (Posix устанавливает для этой величины ограничение снизу — 16);</p>
     <p>&#9632; PIPE_BUF — максимальное количество данных, для которого гарантируется атомарность операции записи (описано в разделе 4.7; Posix требует по меньшей мере 512 байт).</p>
     <p>Значение OPEN_MAX можно узнать, вызвав функцию sysconf, как мы вскоре покажем. Обычно его можно изменить из интерпретатора команд с помощью команды ulimit (в Bourne shell и KornShell, как мы вскоре покажем) или с помощью команды limit (в С shell). Оно может быть изменено и самим процессом с помощью вызова функции setrlimit (подробно описана в разделе 7.11 [21]).</p>
     <p>Значение PIPE_BUF обычно определено в заголовочном файле &lt;limits.h&gt;, но с точки зрения стандарта Posix оно представляет собой переменную, зависимую от полного имени файла. Это означает, что ее значение может меняться в зависимости от указываемого имени файла (для FIFO, поскольку каналы имен не имеют), поскольку разные имена могут относиться к разным файловым системам и эти файловые системы могут иметь различные характеристики. Это значение можно получить в момент выполнения пpoгрaммы, вызвав либо pathconf, либо fpathconf. В листинге 4.17 приведен пример, выводящий текущее значение этих двух oгрaничeний.</p>
     <subtitle>Листинг 4.17. Определение значений PIPE_BUF и OPEN_MAX во время выполнения</subtitle>
     <p><code>//pipe/pipeconf.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  int</code></p>
     <p><code>3  main(int argc, char **argv)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   if (argc != 2)</code></p>
     <p><code>6   err_quit("usage: pipeconf &lt;pathname&gt;");</code></p>
     <p><code>7   printf("PIPE_BUF = %ld. OPEN_MAX = %ld\n",</code></p>
     <p><code>8   Pathconf(argv[1], _PC_PIPE_BUF), Sysconf(_SC_OPEN_MAX));</code></p>
     <p><code>9   exit(0);</code></p>
     <p><code>10 }</code></p>
     <p>Вот несколько примеров, в которых указываются имена файлов, относящиеся к различным файловым системам:</p>
     <p><code>solaris % <strong>pipeconf /</strong> <emphasis>значения по умолчанию в Solaris 2.6</emphasis></code></p>
     <p><code>PIPE_BUF = 5120, OPEN_MAX = 64</code></p>
     <p><code>solaris % <strong>pipeconf /home</strong></code></p>
     <p><code>PIPE_BUF = 5120, OPEN_MAX = 64</code></p>
     <p><code>solaris % <strong>pipeconf /tmp</strong></code></p>
     <p><code>PIPE_BUF = 5120, OPEN_MAX = 64</code></p>
     <p><code>alpha % <strong>pipeconf /</strong>   <emphasis>значения по умолчанию в Digital Unix 4.0B</emphasis></code></p>
     <p><code>PIPE_BUF = 4096, OPEN_MAX = 4096</code></p>
     <p><code>alpha % <strong>pipeconf /usr</strong></code></p>
     <p><code>PIPE_BUF = 4096, OPEN_MAX = 4096</code></p>
     <p>Покажем теперь, как изменить значение OPEN_MAX в Solaris, используя интерпретатор KornShell:</p>
     <p><code>solaris % <strong>ulimit –nS</strong>     <emphasis>отображение максимального количества дескрипторов, мягкоео граничение</emphasis></code></p>
     <p><code>64</code></p>
     <p><code>solaris % <strong>ulimit –Nh</strong>     <emphasis>отображение максимального количества дескрипторов, жесткое ограничение</emphasis></code></p>
     <p><code>1024</code></p>
     <p><code>solaris % <strong>ulimit –nS 512</strong> <emphasis>установка мягкого ограничения в 512</emphasis></code></p>
     <p><code>solaris % <strong>pipeconf /</strong>     <emphasis>проверка внесенных изменений</emphasis></code></p>
     <p><code>PIPE_BUF = 5120, OPEN_MAX = 512</code> </p>
     <p><strong>ПРИМЕЧАНИЕ</strong></p>
     <cite>
      <p>Хотя значение PIPE_BUF для FIFO, в принципе, может меняться в зависимости от файловой системы, к которой относится файл, на самом деле это очень редкий случай.</p>
      <p>В главе 2 [21] описаны функции fpathconf, pathconf и sysconf, которые предоставляют информацию о некоторых ограничениях ядра во время выполнения программы. Стандарт Posix.1 определяет 12 констант, начинающихся с _РС_, и 52, начинающихся с _SC_. Системы Digital Unix 4.0B и Solaris 2.6 расширяют последнее ограничение, определяя около 100 констант, значения которых могут быть получены в момент выполнения программы с помощью sysconf. </p>
     </cite>
     <p>Команда getconf определяется стандартом Posix.2 и выводит значения большинства этих ограничений. Например:</p>
     <p><code>alpha % <strong>getconf OPEN_MAX</strong></code></p>
     <p><code>4096</code></p>
     <p><code>alpha % <strong>getconf PIPE_BUF /</strong></code></p>
     <p><code>4096</code></p>
    </section>
    <section>
     <title>
      <p>4.12. Резюме</p>
     </title>
     <p>Именованные и неименованные каналы представляют собой базовые строительные блоки для множества приложений. Программные каналы (неименованные) обычно используются в интерпретаторе команд, а также внутри программ — часто для передачи информации от дочернего процесса к родительскому. Можно исключить часть кода, относящегося к использованию каналов (piре, fork, close, exec и waitpid), используя функции popen и pclose, которые берут на себя все тонкости и запускают интерпретатор команд.</p>
     <p>Каналы FIFO похожи на программные каналы, но создаются вызовом mkfifo и затем могут быть открыты с помощью функции open. При открытии FIFO следует быть аккуратным, поскольку процесс может быть заблокирован, а зависит это от множества условий (см. табл. 4.1).</p>
     <p>Используя программные каналы и FIFO, мы создали несколько вариантов приложении типа клиент-сервер: один сервер с несколькими клиентами, последовательный и параллельный серверы. Последовательный сервер единовременно обрабатывает запрос только от одного клиента; такие серверы обычно уязвимы для атак типа «отказ в обслуживании». Параллельный сервер запускает отдельный процесс или поток для обработки запроса нового клиента.</p>
     <p>Одним из свойств программных каналов и FIFO является то, что данные по ним передаются в виде потоков байтов, аналогично соединению TCP. Деление этого потока на самостоятельные записи целиком предоставляется приложению. Мы увидим в следующих двух главах, что очереди сообщений автоматически расставляют границы между записями, аналогично тому, как это делается в дейтаграммах UDP.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. При переходе от рис. 4.3 к рис. 4.4: что могло бы произойти, если бы дочерний процесс не закрывал дескриптор (close(fd[1]))? </p>
     <p>2. Описывая mkfifo в разделе 4.6, мы сказали, что для открытия существующего FIFO или создания нового, если его не существует, следует вызвать mkfifо, проверить, не возвращается ли ошибка EEXIST, и вызвать open, если это происходит. Что если изменить логику и вызвать сначала open, а затем mkfifо, если FIFO не существует?</p>
     <p>3. Что происходит при вызове popen в листинге 4.5, если в интерпретаторе возникает ошибка?</p>
     <p>4. Удалите вызов open для FIFO сервера в листинге 4.10 и проверьте, приведет ли это к завершению работы сервера после отключения последнего клиента.</p>
     <p>5. К листингу 4.10: мы отметили, что при запуске сервера его работа блокируется при вызове первой функции open, пока FIFO не будет открыт на запись первым клиентом. Как можно обойти это таким образом, чтобы обе функции open завершали работу немедленно, а блокирование происходило при первом вызове readline?</p>
     <p>6. Что произойдет с клиентом в листинге 4.11, если поменять порядок вызовов open?</p>
     <p>7. Почему сигнал отправляется процессу, в котором канал FIFO открыт на запись, после отключения последнего читающего клиента, а не читающему клиенту после отключения последнего пишущего?</p>
     <p>8. Напишите небольшую тестирующую программу для определения того, возвращает ли fstat количество байтов в FIFO в качестве поля st_size структуры stat.</p>
     <p>9. Напишите небольшую тестирующую программу для определения того, что возвращает функция select при проверке возможности записи в дескриптор канала, у которого закрыт второй конец. </p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 5</p>
     <p>Очереди сообщений Posix</p>
    </title>
    <section>
     <title>
      <p>5.1. Введение</p>
     </title>
     <p>Очередь сообщений можно рассматривать как связный список сообщений. Программные потоки с соответствующими разрешениями могут помещать сообщения в очередь, а потоки с другими соответствующими разрешениями могут извлекать их оттуда. Каждое сообщение представляет собой запись (вспомните сравнение потоков и сообщений в разделе 4.10), и каждому сообщению его отправителем присваивается приоритет. Для записи сообщения в очередь не требуется наличия ожидающего его процесса. Это отличает очереди сообщений от программных каналов и FIFO, в которые нельзя произвести запись, пока не появится считывающий данные процесс.</p>
     <p>Процесс может записать в очередь какие-то сообщения, после чего они могут быть получены другим процессом в любое время, даже если первый завершит свою работу. Мы говорим, что очереди сообщений обладают живучестью ядра (kernel persistence, раздел 1.3). Это также отличает их от программных каналов и FIFO. В главе 4 говорится о том, что данные, остающиеся в именованном или неименованном канале, сбрасываются, после того как все процессы закроют его.</p>
     <p>В этой главе рассматриваются очереди сообщений стандарта Posix, а в главе 6 — стандарта System V. Функции для работы с ними во многом схожи, а главные отличия заключаются в следующем:</p>
     <p>&#9632; операция считывания из очереди сообщений Posix всегда возвращает самое старое сообщение с наивысшим приоритетом, тогда как из очереди System V можно считать сообщение с произвольно указанным приоритетом;</p>
     <p>&#9632; очереди сообщений Posix позволяют отправить сигнал или запустить программный поток при помещении сообщения в пустую очередь, тогда как для очередей System V ничего подобного не предусматривается.</p>
     <p>Каждое сообщение в очереди состоит из следующих частей: </p>
     <p>&#9632; приоритет (беззнаковое целое, Posix) либо тип сообщения (целое типа long, System V);</p>
     <p>&#9632; длина полезной части сообщения, которая может быть нулевой;</p>
     <p>&#9632; собственно данные (если длина сообщения отлична от 0).</p>
     <p>Этим очереди сообщений отличаются от программных каналов и FIFO. Последние две части сообщения представляют собой байтовые потоки, в которых отсутствуют границы между сообщениями и никак не указывается их тип. Мы обсуждали этот вопрос в разделе 4.10 и добавили свой собственный интерфейс для пересылки сообщений по программным каналам и FIFO. На рис. 5.1 показан возможный вид очереди сообщений.</p>
     <image l:href="#Any2FbImgLoader96"/>
     <p>Рис. 5.1. Очередь сообщений Posix, содержащая три сообщения</p>
     <empty-line/>
     <p>Мы предполагаем реализацию через связный список, причем его заголовок содержит два атрибута очереди: максимально допустимое количество сообщений в ней и максимальный размер сообщения. Об этих атрибутах мы расскажем более подробно в разделе 5.3.</p>
     <p>В этой главе мы используем метод, к которому будем прибегать и в дальнейшем, рассматривая очереди сообщений, семафоры и разделяемую память. Поскольку все эти объекты IPC обладают по крайней мере живучестью ядра (вспомните раздел 1.3), мы можем писать небольшие программы, использующие эти методы для экспериментирования с ними и получения большей информации о том, как они работают. Например, мы можем написать программу, создающую очередь сообщений Posix, а потом написать другую программу, которая помещает сообщение в такую очередь, а потом еще одну, которая будет считывать сообщения из очереди. Помещая в очередь сообщения с различным приоритетом, мы увидим, в каком порядке они будут возвращаться функцией mq_receive.</p>
    </section>
    <section>
     <title>
      <p>5.2. Функции mq_open, mq_close, mq_unlink</p>
     </title>
     <section>
      <p>Функция mq_open создает новую очередь сообщений либо открывает существующую:</p>
      <p><code>#include &lt;mqueue.h&gt;</code></p>
      <p><code>mqd_t mq_open(const char <emphasis>*name,</emphasis> int <emphasis>oflag, …</emphasis></code></p>
      <p><code>/* mode_t <emphasis>mode,</emphasis> struct mq_attr <emphasis>*attr</emphasis>*/ );</code></p>
      <p><code>/* Возвращает дескриптор очереди в случае успешного завершения;</code></p>
      <p><code> –1 – в противном случае. */</code></p>
      <p>Требования к аргументу <emphasis>пате</emphasis> описаны в разделе 2.2.</p>
      <p>Аргумент <emphasis>oflag</emphasis> может принимать одно из следующих значений: O_RDONLY, O_WRONLY, O_RDWR в сочетании (логическое сложение) с O_CREAT, O_EXCL, O_NONBLOCK. Все эти флаги описаны в разделе 2.3.</p>
      <p>При создании новой очереди (указан флаг O_CREAT и очередь сообщений еще не существует) требуется указание аргументов <emphasis>mode</emphasis> и <emphasis>attr.</emphasis> Возможные значения аргумента <emphasis>mode</emphasis> приведены в табл. 2.3. Аргумент <emphasis>attr </emphasis>позволяет задать некоторые атрибуты очереди. Если в качестве этого аргумента задать нулевой указатель, очередь будет создана с атрибутами по умолчанию. Эти атрибуты описаны в разделе 5.3.</p>
      <p>Возвращаемое функцией mq_open значение называется дескриптором очереди сообщений, но оно не обязательно должно быть (и, скорее всего, не является) небольшим целым числом, как дескриптор файла или программного сокета. Это значение используется в качестве первого аргумента оставшихся семи функций для работы с очередями сообщений.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>В системе Solaris 2.6 тип mqd_t определен как void*, а в Digital Unix 4.0B — как int. В нашем примере в разделе 5.8 эти дескрипторы трактуются как указатели на структуру. Название «дескриптор» было дано им по ошибке. </p>
      </cite>
      <p>Открытая очередь сообщений закрывается функцией mq_close:</p>
      <p><code>#include &lt;mqueue.h&gt;</code></p>
      <p><code>int mq_close(mqd_t <emphasis>mqdes</emphasis>);</code></p>
      <p><code>/*Возвращает 0 в случае успешного завершения. –1 в случае ошибки */</code></p>
      <p>По действию эта функция аналогична close для открытого файла: вызвавший функцию процесс больше не может использовать дескриптор, но очередь сообщений из системы не удаляется. При завершении процесса все открытые очереди сообщений закрываются, как если бы для каждой был сделан вызов mq_close.</p>
      <p>Для удаления из системы имени (<emphasis>пате),</emphasis> которое использовалось в качестве аргумента при вызове mq_open, нужно использовать функцию mq_unlink:</p>
      <p><code>#include &lt;mqueue.h&gt;</code></p>
      <p><code>int mq_unlink(const char <emphasis>*name</emphasis>);</code></p>
      <p><code>/* Возвращает 0 в случае успешного завершения. –1 в случае ошибки */</code></p>
      <p>Для очереди сообщений (как и для файла) ведется подсчет числа процессов, в которых она открыта в данный момент, и по действию эта функция аналогична unlink для файла: имя <emphasis>(пате)</emphasis> может быть удалено из системы, даже пока число подключений к очереди отлично от нуля, но удаление очереди (в отличие от удаления имени из системы) не будет осуществлено до того, как очередь будет закрыта последним использовавшим ее процессом.</p>
      <p>Очереди сообщений Posix обладают по меньшей мере живучестью ядра (раздел 1.3), то есть они продолжают существовать, храня все имеющиеся в них сообщения, даже если нет процессов, в которых они были бы открыты. Очередь существует, пока она не будет удалена явно с помощью mq_unlink.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Мы увидим, что если очередь сообщений реализована через отображаемые в память файлы (раздел 12.2), она может обладать живучестью файловой системы, но это не является обязательным и рассчитывать на это нельзя.</p>
      </cite>
     </section>
     <section>
      <title>
       <p>Пример: программа mqcreate1</p>
      </title>
      <p>Поскольку очереди сообщений Posix обладают по крайней мере живучестью ядра, можно написать набор небольших программ для работы с ними — с этими программами будет проще экспериментировать. Программа из листинга 5.1<a l:href="#n_1" type="note">[1]</a> создает очередь сообщений, имя которой принимается в качестве аргумента командной строки.</p>
      <subtitle>Листинг 5.1. Создание очереди сообщений (указан флаг O_EXCL)</subtitle>
      <p><code>//pxmsg/mqcreate1.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int с flags:</code></p>
      <p><code>6   mqd_t mqd;</code></p>
      <p><code>7   flags = O_RDWR | O_CREAT;</code></p>
      <p><code>8   while ((c = Getopt(argc, argv, "e")) != –1) {</code></p>
      <p><code>9    switch (c) {</code></p>
      <p><code>10   case 'e':</code></p>
      <p><code>11    flags |= O_EXCL;</code></p>
      <p><code>12    break;</code></p>
      <p><code>13   }</code></p>
      <p><code>14  }</code></p>
      <p><code>15  if (optind != argc – 1)</code></p>
      <p><code>16   err_quit("usage: mqcreate [ –e ] &lt;name&gt;");</code></p>
      <p><code>17  mqd = Mq_open(argv[optind], flags, FILE_MODE, NULL);</code></p>
      <p><code>18  Mq_close(mqd);</code></p>
      <p><code>19  exit(0);</code></p>
      <p><code>20 }</code></p>
      <p>В командной строке можно указать параметр –е, управляющий исключающим созданием очереди. (О функции getopt и нашей обертке Getopt рассказано более подробно в комментарии к листингу 5.5.) При возвращении функция getopt сохраняет в переменной optind индекс следующего аргумента, подлежащего обработке.</p>
      <p>Мы вызываем функцию mq_open, указывая ей в качестве имени IPC полученный из командной строки параметр, не обращаясь к рассмотренной нами в разделе 2.2 функции px_ipc_name. Это даст нам возможность узнать, как в данной реализации обрабатываются имена Posix IPC (мы используем для этого наши маленькие тестовые программы на протяжении всей книги).</p>
      <p>Ниже приведен результат работы программы в Solaris 2.6:</p>
      <p><code>solaris % <strong>mqcreate1 /temp.1234    </strong><emphasis>очередь успешно создается</emphasis></code></p>
      <p><code>solaris % <strong>ls -l /tmp/.*1234</strong></code></p>
      <p><code>-rw-rw-rw– 1 rstevens other1 132632 Oct 23 17:08 /tmp/.MQDtemp.1234</code></p>
      <p><code>-rw-rw-rw– 1 rstevens other1      0 Oct 23 17:08 /tmp/.MQLtemp.1234</code></p>
      <p><code>-rw-r--r-- 1 rstevens other1      0 Oct 23 17:08 /tmp/.MQPDtemp.1234</code></p>
      <p><code>solaris % <strong>mqcreate1 –e /temp.1234 </strong><emphasis>очередь уже создана</emphasis></code></p>
      <p><code>mq_open error for /temp.1234: File exists</code></p>
      <p>Мы назвали эту версию программы mqcreate1, поскольку она будет улучшена в листинге 5.4, после того как мы обсудим использование атрибутов очереди. Разрешения на доступ к третьему файлу определяются константой FILE_MODE (чтение и запись для пользователя, только чтение для группы и прочих пользователей), но у двух первых файлов разрешения отличаются. Можно предположить, что в файле с буквой D в имени хранятся данные; файл с буквой L представляет собой какую-то блокировку, а в файле с буквой Р хранятся разрешения.</p>
      <p>В Digital Unix 4.0B мы указываем действительное имя создаваемого файла:</p>
      <p><code>alpha % <strong>mqcreate1 /tmp/myq.1234    </strong><emphasis>очередь успешно создается</emphasis></code></p>
      <p><code>alpha % <strong>ls –l /tmp/myq.1234</strong></code></p>
      <p><code>-rw-r--r-- 1 rstevens system 11976 Oct 23 17:04 /tmp/myq.1234</code></p>
      <p><code>alpha % <strong>mqcreate1 –e /tmp/myq.1234 </strong><emphasis>очередь уже создана</emphasis></code></p>
      <p><code>mq_open error for /tmp/myq.1234: File exists</code></p>
     </section>
     <section>
      <title>
       <p>Пример: программа mqunlink</p>
      </title>
      <p>В листинге 5.2 приведена программа mqunlink, удаляющая из системы очередь сообщений.</p>
      <subtitle>Листинг 5.2. Удаление очереди из системы: mqunlink</subtitle>
      <p><code>//pxmsg/mqunlink.c</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <p><code>2 int</code></p>
      <p><code>3 main(int argc, char **argv)</code></p>
      <p><code>4 {</code></p>
      <p><code>5  if (argc != 2)</code></p>
      <p><code>6   err_quit("usage: mqunlink &lt;name&gt;");</code></p>
      <p><code>7  Mq_unlink(argv[1]);</code></p>
      <p><code>8  exit(0);</code></p>
      <p><code>9 }</code></p>
      <p>С помощью этой программы мы можем удалить очередь сообщений, созданную программой mqcreate1:</p>
      <p><code>solaris % <strong>mqunlink /temp.1234</strong></code></p>
      <p>При этом будут удалены все три файла из каталога /tmp, которые относятся к этой очереди.</p>
     </section>
    </section>
    <section>
     <title>
      <p>5.3. Функции mq_getattr и mq_setattr</p>
     </title>
     <section>
      <p>У каждой очереди сообщений имеются четыре атрибута, которые могут быть получены функцией mq_getattr и установлены (по отдельности) функцией mq_setattr: </p>
      <p><code>#include &lt;mqueue.h&gt;</code></p>
      <p><code>int mq_getattr(mqd_t <emphasis>mqdes</emphasis>, struct mq_attr *<emphasis>attr</emphasis>);</code></p>
      <p><code>int mq_setattr(mqd_t <emphasis>mqdes</emphasis>, const struct mq_attr *<emphasis>attr</emphasis>, struct mq_attr *<emphasis>oattr</emphasis>);</code></p>
      <p><code>/* Обе функции возвращают 0 в случае успешного завершения; –1 – в случае возникновения ошибок */</code></p>
      <p>Структура mq_attr хранит в себе эти четыре атрибута:</p>
      <p><code>struct mq_attr {</code></p>
      <p><code> long mq_flags;   /* флаг очереди: 0, O_NONBLOCK */</code></p>
      <p><code> long mq_maxmsg;  /* максимальное количество сообщений в очереди */</code></p>
      <p><code> long mq_msgsize; /* максимальный размер сообщения (в байтах) */</code></p>
      <p><code> long mq_curmsgs; // текущее количество сообщений в очереди</code></p>
      <p><code>}</code></p>
      <p>Указатель на такую структуру может быть передан в качестве четвертого аргумента mq_open, что дает возможность установить параметры mq_maxmsg и mq_msgsize в момент создания очереди. Другие два поля структуры функцией mq_open игнорируются.</p>
      <p>Функция mq_getattr присваивает полям структуры, на которую указывает <emphasis>attr,</emphasis> текущие значения атрибутов очереди.</p>
      <p>Функция mq_setattr устанавливает атрибуты очереди, но фактически используется только поле mqflags той структуры, на которую указывает <emphasis>attr,</emphasis> что дает возможность сбрасывать или устанавливать флаг запрета блокировки. Другие три поля структуры игнорируются: максимальное количество сообщений в очереди и максимальный размер сообщения могут быть установлены только в момент создания очереди, а количество сообщений в очереди можно только считать, но не изменить.</p>
      <p>Кроме того, если указатель <emphasis>oattr</emphasis> ненулевой, возвращаются предыдущие значения атрибутов очереди (mq_flags, mq_maxmsg, mq_msgsize) и текущий статус очереди (mq_curmsgs).</p>
     </section>
     <section>
      <title>
       <p>Пример: программа mqgetattr</p>
      </title>
      <p>Программа из листинга 5.3 открывает указанную очередь сообщений и выводит значения ее атрибутов.</p>
      <subtitle>Листинг 5.3. Получение и вывод значений атрибутов очереди сообщений</subtitle>
      <p><code>//pxmsg/mqgetattr.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   mqd_t mqd;</code></p>
      <p><code>6   struct mq_attr attr;</code></p>
      <p><code>7   if (argc != 2)</code></p>
      <p><code>8    err_quit("usage: mqgetattr &lt;name&gt;");</code></p>
      <p><code>9   mqd = Mq_open(argv[1], O_RDONLY);</code></p>
      <p><code>10  Mq_getattr(mqd, &amp;attr);</code></p>
      <p><code>11  printf ("max #msgs = %ld, max #bytes/msg = %ld, "</code></p>
      <p><code>12   "#currently on queue = %ld\n",</code></p>
      <p><code>13   attr.mq_maxmsg, attr.mq_msgsize, attr.mq_curmsgs);</code></p>
      <p><code>14  Mq_close(mqd);</code></p>
      <p><code>15  exit(0);</code></p>
      <p><code>16 }</code></p>
      <p>Мы можем создать очередь сообщений и вывести значения ее атрибутов, устанавливаемые по умолчанию:</p>
      <p><code>solaris % <strong>mqcreate1 /hello.world</strong></code></p>
      <p><code>solaris % <strong>mqgetattr /hello.world</strong></code></p>
      <p><code>max #msgs = 128, max #bytes/msg = 1024, #currently on queue = 0</code></p>
      <p>Вспомним размер одного из файлов очереди, созданной с использованием устанавливаемых по умолчанию значений атрибутов. Он был выведен командой ls в примере после листинга 5.1. Это значение можно получить как 128&#215;1024+1560 = 132632.</p>
      <p>Добавочные 1560 байт представляют собой, скорее всего, дополнительную информацию: 8 байт на сообщение плюс добавочные 536 байт.</p>
     </section>
     <section>
      <title>
       <p>Пример: программа mqcreate</p>
      </title>
      <p>Мы можем изменить программу из листинга 5.1 таким образом, чтобы при создании очереди иметь возможность указывать максимальное количество сообщений и максимальный размер сообщения. Мы не можем указать только один из этих параметров; нужно обязательно задать оба (см., впрочем, упражнение 5.1). В листинге 5.4 приведен текст новой программы.</p>
      <subtitle>Листинг 5.4. Усовершенствованная программа mqcreate</subtitle>
      <p><code>//pxmsg/mqcreate.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  struct mq_attr attr; /* mq_maxmsg и mq_msgsize инициализируются О */</code></p>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int с flags;</code></p>
      <p><code>7   mqd_t mqd;</code></p>
      <p><code>8   flags = O_RDWR | O_CREAT;</code></p>
      <p><code>9   while ((c = Getopt(argc, argv, "em:z:")) != –1) {</code></p>
      <p><code>10   switch (c) {</code></p>
      <p><code>11   case 'e':</code></p>
      <p><code>12    flags |= O_EXCL;</code></p>
      <p><code>13    break;</code></p>
      <p><code>14   case 'm':</code></p>
      <p><code>15    attr.mq_maxmsg = atol(optarg);</code></p>
      <p><code>16    break;</code></p>
      <p><code>17   case 'z':</code></p>
      <p><code>18    attr.mq_msgsize = atol(optarg);</code></p>
      <p><code>19    break;</code></p>
      <p><code>20   }</code></p>
      <p><code>21  }</code></p>
      <p><code>22  if (optind != argc – 1)</code></p>
      <p><code>23   err_quit("usage: mqcreate [ –е ] [ –m maxmsg –z msgsize ] &lt;name&gt;");</code></p>
      <p><code>24  if ((attr.mq_maxmsg != 0 &amp;&amp; attr.mq_msgsize ==0) ||</code></p>
      <p><code>25   (attr.mq_maxmsg == 0 &amp;&amp; attr.mq_msgsize != 0))</code></p>
      <p><code>26   err_quit("must specify both –m maxmsg and –z msgsize");</code></p>
      <p><code>27  mqd = Mq_open(argv[optind], flags, FILE_MODE,</code></p>
      <p><code>28   (attr.mq_maxmsg != 0) ? &amp;attr : NULL);</code></p>
      <p><code>29  Mq_close(mqd);</code></p>
      <p><code>30  exit(0);</code></p>
      <p><code>31 }</code></p>
      <p>Параметр командной строки, требующий аргумента, указывается с помощью двоеточия (после параметров m и z в вызове getopt). В момент обработки символа параметр optarg указывает на аргумент.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Наша обертка Getopt вызывает стандартную библиотечную функцию getopt и завершает выполнение процесса в случае возникновения ошибок в ее работе: при появлении параметра, не указанного в третьем аргументе при вызове функции, или при наличии параметра без необходимого числового аргумента (потребность в нем указывается с помощью двоеточия после буквы параметра в третьем аргументе функции getopt). В любом случае, getopt помещает сообщение об ошибке в стандартный поток сообщений об ошибках и возвращает ошибку, что приводит к завершению работы оберткой Getopt. В двух приведенных ниже примерах ошибка обнаруживается функцией getopt:</p>
       <p><code>solaris %<strong>mqcreate –z</strong></code></p>
       <p><code>mqcreate: option requires an argument – z</code></p>
       <p><code>solaris %<strong>mqcreate –q</strong></code></p>
       <p><code>mqcreate: illegal option – q</code></p>
       <p>В следующем примере ошибка (не указан необходимый аргумент — имя очереди) обнаруживается самой программой:</p>
       <p><code>solaris %<strong>mqcreate</strong></code></p>
       <p><code>usage: mqcreate [ –e ] [ –m maxmsg –z msgsize ] &lt;name&gt;</code></p>
      </cite>
      <p>Если не указан ни один из двух новых параметров, мы должны передать функции mq_open пустой указатель в качестве последнего аргумента. В противном случае мы передаем указатель на нашу структуру attr.</p>
      <p>Запустим теперь новую версию нашей программы в системе Solaris 2.6, указав максимальное количество сообщений 1024 и максимальный размер сообщения 8192 байт:</p>
      <p><code>solaris % <strong>mqcreate –e –m 1024 -z 8192 /foobar</strong></code></p>
      <p><code>solaris % <strong>ls –al /tmp/.*foobar</strong></code></p>
      <p><code>-rw-rw-rw– 1 rstevens other1 8397336 Oct 25 11:29 /tmp/.MQDfoobar</code></p>
      <p><code>–rw-rw-rw– 1 rstevens other1       0 Oct 25 11:29 /tmp/.MQLfoobar</code></p>
      <p><code>–rw-r--r-- 1 rstevens other1       0 Oct 25 11:29 /tmp/.MQPfoobar</code></p>
      <p>Размер файла, содержащего данные этой очереди, соответствует максимальному количеству сообщений в очереди и максимальному размеру сообщения (1024&#215;8192 = 8388608), а оставшиеся 8728 байт предусматривают 8 байт информации на каждое сообщение (8&#215;1024) плюс дополнительные 536 байт. </p>
      <p>При выполнении той же программы в Digital Unix 4.0B получим:</p>
      <p><code>alpha % <strong>mqcreate –m 256 -z 2048 /tmp/bigq</strong></code></p>
      <p><code>alpha % <strong>ls-l/tmp/bigq</strong></code></p>
      <p><code>-rw-r--r-- 1 rstevens system 537288 Oct 25 15:38 /tmp/bigq</code></p>
      <p>В этой реализации размер очереди соответствует максимальному количеству сообщений и максимальному размеру сообщения (256&#215;2048 = 524288), а оставшиеся 13000 байт дают возможность хранить 48 байт добавочной информации для каждого сообщения (48&#215;256) и еще 712 байт.</p>
     </section>
    </section>
    <section>
     <title>
      <p>5.4. Функции mqsend и mqreceive</p>
     </title>
     <section>
      <p>Эти две функции предназначены для помещения сообщений в очередь и получения их оттуда. Каждое сообщение имеет свой приоритет, который представляет собой беззнаковое целое, не превышающее MQ_PRIO_MAX. Стандарт Posix требует, чтобы эта величина была не меньше 32.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>В Solaris 2.6 значение MQ_PRIO_MAX равняется именно 32, но в Digital Unix 4.0B этот предел равен уже 256. В листинге 5.7 мы покажем, как получить эти значения.</p>
      </cite>
      <p>Функция mq_receive всегда возвращает старейшее в указанной очереди сообщение с максимальным приоритетом, и приоритет может быть получен вместе с содержимым сообщения и его длиной.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Действие mq_receive отличается от действия msgrcv в System V (раздел 6.4). Сообщения System V имеют поле type, аналогичное по смыслу приоритету, но для функции msgrcv можно указать три различных алгоритма возвращения сообщений: старейшее сообщение в очереди, старейшее сообщение с указанным типом или старейшее сообщение с типом, не превышающим указанного значения.</p>
      </cite>
      <p><code>#include &lt;mqueue.h&gt;</code></p>
      <p><code>int mq_send(mqd_t <emphasis>mqdes</emphasis>, const char *<emphasis>ptr</emphasis>, size_t <emphasis>len</emphasis>, unsigned int <emphasis>prio</emphasis>);</code></p>
      <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае возникновения ошибок */</code></p>
      <p><code>ssize_t mq_receive(mqd_t <emphasis>mqdes</emphasis>, char *<emphasis>ptr</emphasis>, size_t <emphasis>len</emphasis>, unsigned int *<emphasis>priop</emphasis>);</code></p>
      <p><code>/* Возвращает количество байтов в сообщении в случае успешного завершения. –1 – в случае ошибки */</code></p>
      <p>Первые три аргумента обеих функций аналогичны первым трем аргументам функций write и read соответственно.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Объявление указателя на буфер как char* кажется ошибкой — тип void* больше соответствовал бы по духу прочим функциям Posix.1. </p>
      </cite>
      <p>Значение аргумента len функции mq_receive должно быть по крайней мере не меньше максимального размера сообщения, которое может быть помещено в очередь, то есть значения поля mq_msgsize структуры mq_attr для этой очереди. Если len оказывается меньше этой величины, немедленно возвращается ошибка EMSGSIZE. </p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Это означает, что большинству приложений, использующих очереди сообщений Posix, придется вызывать mq_getattr после открытия очереди для определения максимального размера сообщения, а затем выделять память под один или несколько буферов чтения этого размера. Требование, чтобы буфер был больше по размеру, чем максимально возможное сообщение, позволяет функции mq_receive не возвращать уведомление о том, что размер письма превышает объем буфера. Сравните это, например, с флагом MSG_NOERROR и ошибкой E2BIG для очередей сообщений System V (раздел 6.4) и флагом MSG_TRUNC для функции recvmsg, используемой с дейтаграммами UDP (раздел 13.5 [24]). </p>
      </cite>
      <p>Аргумент <emphasis>prio </emphasis>устанавливает приоритет сообщения для mq_send, его значение должно быть меньше MQ_PRIO_MAX. Если при вызове mq_receive <emphasis>priop </emphasis>является ненулевым указателем, в нем сохраняется приоритет возвращаемого сообщения. Если приложению не требуется использование различных приоритетов сообщений, можно указывать его равным нулю для mq_send и передавать mq_receive нулевой указатель в качестве последнего аргумента.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Разрешена передача сообщений нулевой длины. Это тот случай, когда важно не то, о чем говорится в стандарте (Posix.1), а то, о чем в нем не говорится: нигде не запрещена передача сообщений нулевой длины. Функция mq_receive возвращает количество байтов в сообщении (в случае успешного завершения работы) или –1 в случае возникновения ошибок, так что 0 обозначает сообщение нулевой длины. </p>
      </cite>
      <p>Очередям сообщений Posix и System V не хватает полезной функции: получатель не может определить отправителя сообщения. Эта информация могла бы пригодиться многим приложениям. К сожалению, большинство механизмов передачи сообщений IPC не позволяют определить отправителя сообщений. В разделе 15.5 мы расскажем, как эта возможность обеспечивается для дверей. В разделе 14.8 [24] описано, как эта возможность обеспечивается в BSD/OS для доменных сокетов Unix. В разделе 15.3.1 [21] описано, как SVR4 передает информацию об отправителе по каналу при передаче по нему дескриптора. В настоящее время методы BSD/OS широко используются, и хотя реализация SVR4 является частью стандарта Unix 98, она требует передачи дескриптора по каналу, что обычно является более дорогостоящей операцией, чем просто передача данных. Мы не можем предоставить отправителю возможность передать информацию о себе (например, эффективный идентификатор пользователя) в самом сообщении, поскольку мы не можем быть уверены, что эта информация окажется истинной. Хотя разрешения доступа к очереди сообщений определяют, имеет ли право отправитель помещать в нее сообщения, это все равно не дает однозначности. Существует возможность создавать одну очередь для каждого отправителя (о которой рассказывается в связи с очередями System V в разделе 6.8), но это плохо подходит для больших приложений. Наконец, если функции для работы с очередями сообщений реализованы как пользовательские функции (как мы показываем в разделе 5.8), а не как часть ядра, мы не можем доверять никакой информации об отправителе, передаваемой с сообщением, так как ее легко подделать. </p>
     </section>
     <section>
      <title>
       <p>Пример: программа mqsend</p>
      </title>
      <p>В листинге 5.5 приведен текст программы, помещающей сообщение в очередь.</p>
      <subtitle>Листинг 5.5. Программа mqsend</subtitle>
      <p><code>//pxmsg/mqsend.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   mqd_t mqd;</code></p>
      <p><code>6   void *ptr;</code></p>
      <p><code>7   size_t len;</code></p>
      <p><code>8   uint_t prio;</code></p>
      <p><code>9   if (argc != 4)</code></p>
      <p><code>10   err_quit("usage: mqsend &lt;name&gt; &lt;#bytes&gt; &lt;priority&gt;");</code></p>
      <p><code>11  len = atoi(argv[2]);</code></p>
      <p><code>12  prio = atoi(argv[3]);</code></p>
      <p><code>13  mqd = Mq_open(argv[1], O_WRONLY);</code></p>
      <p><code>14  ptr = Calloc(len, sizeof (char));</code></p>
      <p><code>15  Mq_send(mqd, ptr, len, prio);</code></p>
      <p><code>16  exit(0);</code></p>
      <p><code>17 }</code></p>
      <p>И размер сообщения, и его приоритет являются обязательными аргументами командной строки. Буфер под сообщение выделяется функцией callос, которая инициализирует его нулем.</p>
     </section>
     <section>
      <title>
       <p>Пример: программа mqreceive</p>
      </title>
      <p>Программа в листинге 5.6 считывает сообщение из очереди.</p>
      <subtitle>Листинг 5.6. Программа mqreceive</subtitle>
      <p><code>//pxmsg/mqreceive.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int с flags;</code></p>
      <p><code>6   mqd_t mqd;</code></p>
      <p><code>7   ssize_t n;</code></p>
      <p><code>8   uint_t prio;</code></p>
      <p><code>9   void *buff;</code></p>
      <p><code>10  struct mq_attr attr;</code></p>
      <p><code>11  flags = O_RDONLY;</code></p>
      <p><code>12  while ((c = Getopt(argc, argv, "n")) != –1) {</code></p>
      <p><code>13   switch (c) {</code></p>
      <p><code>14   case 'n':</code></p>
      <p><code>15    flags |= O_NONBLOCK;</code></p>
      <p><code>16    break;</code></p>
      <p><code>17   }</code></p>
      <p><code>18  }</code></p>
      <p><code>19  if (optind != argc – 1)</code></p>
      <p><code>20   err_quit("usage: mqreceive [ –n ] &lt;name&gt;");</code></p>
      <p><code>21  mqd = Mq_open(argv[optind], flags);</code></p>
      <p><code>22  Mq_getattr(mqd, &amp;attr);</code></p>
      <p><code>23  buff = Malloc(attr.mqjnsgsize);</code></p>
      <p><code>24  n = Mq_receive(raqd, buff, attr.mq_msgsize, &amp;prio);</code></p>
      <p><code>25  printf("read %ld bytes, priority = %u\n", (long) n, prio);</code></p>
      <p><code>26  exit(0);</code></p>
      <p><code>27 }</code></p>
      <subtitle>Параметр -n запрещает блокировку</subtitle>
      <p>14-17 Параметр командной строки –n отключает блокировку. При этом программа возвращает сообщение об ошибке, если в очереди нет сообщений.</p>
      <subtitle>Открытие очереди и получение атрибутов</subtitle>
      <p>21-25 Мы открываем очередь и получаем ее атрибуты, вызвав mq_getattr. Нам обязательно нужно определить максимальный размер сообщения, потому что мы должны выделить буфер подходящего размера, чтобы вызвать mq_receive. Программа выводит размер считываемого сообщения и его приоритет.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Поскольку n имеет тип size_t и мы не знаем, int это или long, мы преобразуем эту величину к типу long и используем строку формата %ld. В 64-разрядной реализации int будет 32-разрядным целым, a long и size_t будут 64-разрядными целыми.</p>
      </cite>
      <p>Воспользуемся обеими программами, чтобы проиллюстрировать использование поля приоритета.</p>
      <p><code>solaris % <strong>mqcreate /test1</strong></code></p>
      <p><code>solaris % <strong>mqgetattr /test1        </strong><emphasis>создаем очередь и смотрим на ее атрибуты</emphasis></code></p>
      <p><code>max #msgs = 128, max #bytes/msg = 1024, #currently on queue = 0</code></p>
      <p><code>solaris % <strong>mqsend /test1 100 99999 </strong><emphasis>отправка с некорректным значением приоритета</emphasis></code></p>
      <p><code>mq_send error: Invalid argument</code></p>
      <p><code>solaris % <strong>mqsend /test1 100 6     </strong><emphasis>100 байт, приоритет 6</emphasis></code></p>
      <p><code>solaris % <strong>mqsend /test1 50 18     </strong><emphasis>50 байт, приоритет 18</emphasis></code></p>
      <p><code>solaris % <strong>mqsend /test1 33 18     </strong><emphasis>33 байт, приоритет 18</emphasis></code></p>
      <p><code>solaris % <strong>mqreceive /test1</strong></code></p>
      <p><code>read 50 bytes, priority = 18         <emphasis>возвращается старейшее сообщение с</emphasis></code></p>
      <p><code>solaris % <strong>mqreceive /test1        </strong><emphasis>наивысшим приоритетом</emphasis></code></p>
      <p><code>read 33 bytes, priority = 18</code></p>
      <p><code>Solaris % <strong>mqreceive /test1</strong></code></p>
      <p><code>read 100 bytes, priority = 6</code></p>
      <p><code>Solaris % <strong>mqreceive –n /test1     </strong><emphasis>отключаем блокировку и убеждаемся, что очередь пуста</emphasis></code></p>
      <p><code>mq_receive error: Resource temporarily unavailable</code></p>
      <p>Мы видим, что mq_receive действительно возвращает старейшее сообщение с наивысшим приоритетом. </p>
     </section>
    </section>
    <section>
     <title>
      <p>5.5. Ограничения очередей сообщений</p>
     </title>
     <section>
      <p>Мы уже сталкивались с двумя ограничениями, устанавливаемыми для любой очереди в момент ее создания:</p>
      <p>&#9632; mq_maxmsg — максимальное количество сообщений в очереди;</p>
      <p>&#9632; mq_msgsize — максимальный размер сообщения.</p>
      <p>Не существует каких-либо ограничений на эти значения, хотя в рассматриваемых реализациях необходимо наличие в файловой системе места для файла требуемого размера. Кроме того, ограничения на эти величины могут накладываться реализацией виртуальной памяти (см. упражнение 5.5).</p>
      <p>Другие два ограничения определяются реализацией:</p>
      <p>&#9632; MQ_OPEN_MAX — максимальное количество очередей сообщений, которые могут быть одновременно открыты каким-либо процессом (Posix требует, чтобы эта величина была не меньше 8);</p>
      <p>&#9632; MQ_PRIO_MAX — максимальное значение приоритета плюс один (Posix требует, чтобы эта величина была не меньше 32).</p>
      <p>Эти две константы часто определяются в заголовочном файле &lt;unistd.h&gt; и могут быть получены во время выполнения программы вызовом функции sysconf, как мы покажем далее.</p>
     </section>
     <section>
      <title>
       <p>Пример: программа mqsysconf</p>
      </title>
      <p>Программа в листинге 5.7 вызывает функцию sysconf и выводит два ограничения на очереди сообщений, определяемые реализацией.</p>
      <subtitle>Листинг 5.7. Получение ограничений очередей с помощью sysconf</subtitle>
      <p><code>//pxmsg/mqsysconf.с</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <p><code>2 int</code></p>
      <p><code>3 main(int argc, char **argv)</code></p>
      <p><code>4 {</code></p>
      <p><code>5  printf("MQ_OPEN_MAX = %ld, MQ_PRIO_MAX = %ld\n",</code></p>
      <p><code>6  Sysconf(_SC_MQ_OPEN_MAX), Sysconf(_SC_MQ_PRIO_MAX));</code></p>
      <p><code>7  exit(0);</code></p>
      <p><code>8 }</code></p>
      <p>Запустив эту программу в наших двух операционных системах, получим:</p>
      <p><code>solaris % <strong>mqsysconf</strong></code></p>
      <p><code>MQ_OPEN_MAX = 32, MQ_PRIO_MAX = 32</code></p>
      <p><code>alpha % <strong>mqsysconf</strong></code></p>
      <p><code>MQ_OPEN_MAX = 64, MQ_PRIO_MAX = 256</code></p>
     </section>
    </section>
    <section>
     <title>
      <p>5.6. Функция mq_notify</p>
     </title>
     <section>
      <p>Один из недостатков очередей сообщений System V, как мы увидим в главе 6, заключается в невозможности уведомить процесс о том, что в очередь было помещено сообщение. Мы можем заблокировать процесс при вызове msgrcv, но тогда мы не сможем выполнять другие действия во время ожидания сообщения. Если мы укажем флаг отключения блокировки при вызове msgrcv (IPC_NOWAIT), процесс не будет заблокирован, но нам придется регулярно вызывать эту функцию, чтобы получить сообщение, когда оно будет отправлено. Мы уже говорили, что такая процедура называется <emphasis>опросом </emphasis>и на нее тратится лишнее время. Нужно, чтобы система сама уведомляла процесс о том, что в пустую очередь было помещено новое сообщение.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>В этом и всех последующих разделах данной главы обсуждаются более сложные вопросы, которые могут быть пропущены при первом чтении. </p>
      </cite>
      <p>Очереди сообщений Posix допускают асинхронное уведомление о событии, когда сообщение помещается в очередь. Это уведомление может быть реализовано либо отправкой сигнала, либо созданием программного потока для выполнения указанной функции.</p>
      <p>Мы включаем режим уведомления с помощью функции mq_notify:</p>
      <p><code>#include &lt;mqueue.h&gt;</code></p>
      <p><code>int mq_notify(mqd_t <emphasis>mqdes,</emphasis> const struct sigevent <emphasis>*notification);</emphasis></code></p>
      <p><code><emphasis>/*</emphasis> Возвращает 0 в случае успешного выполнения, –1 – в случае ошибки */</code></p>
      <p>Эта функция включает и выключает асинхронное уведомление о событии для указанной очереди. Структура sigevent впервые появилась в стандарте Posix.1 для сигналов реального времени, о которых более подробно рассказано в следующем разделе. Эта структура и все новые константы, относящиеся к сигналам, определены в заголовочном файле &lt;signal.h&gt;:</p>
      <p><code>union sigval {</code></p>
      <p><code> int sival_int; /* целое значение */</code></p>
      <p><code> void *sival_ptr; /* указатель */ </code></p>
      <p><code>};</code></p>
      <empty-line/>
      <p><code>struct sigevent {</code></p>
      <p><code> int sigev_notify; /* SIGEV_{NONE,SIGNAL,THREAD} */</code></p>
      <p><code> int sigev_signo; /* номер сигнала, если SIGEV_SIGNAL */</code></p>
      <p><code> union sigval sigev_value; /* передается обработчику сигнала или потоку */</code></p>
      <p><code>/* Следующие два поля определены для SIGEV_THREAD */</code></p>
      <p><code>void (*sigev_notify_function) (union sigval);</code></p>
      <p><code>pthread_attr_t *sigev_notify_attributes;</code></p>
      <p>Мы вскоре приведем несколько примеров различных вариантов использования уведомления, но о правилах, действующих для этой функции всегда, можно упомянуть уже сейчас.</p>
      <p>1. Если аргумент <emphasis>notification</emphasis> ненулевой, процесс ожидает уведомления при поступлении нового сообщения в указанную очередь, пустую на момент его поступления. Мы говорим, что процесс <emphasis>регистрируется на уведомление для данной очереди.</emphasis></p>
      <p>2. Если аргумент <emphasis>notification</emphasis> представляет собой нулевой указатель и процесс уже зарегистрирован на уведомление для данной очереди, то уведомление для него отключается.</p>
      <p>3. Только один процесс может быть зарегистрирован на уведомление для любой данной очереди в любой момент.</p>
      <p>4.  При помещении сообщения в пустую очередь, для которой имеется зарегистрированный на уведомление процесс, оно будет отправлено только в том случае, если нет заблокированных в вызове mq_receive для этой очереди процессов. Таким образом, блокировка в вызове mq_receive имеет приоритет перед любой регистрацией на уведомление.</p>
      <p>5. При отправке уведомления зарегистрированному процессу регистрация снимается. Процесс должен зарегистрироваться снова (если в этом есть необходимость), вызвав mq_notify еще раз.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>С сигналами в Unix всегда была связана одна проблема: действие сигнала сбрасывалось на установленное по умолчанию каждый раз при отправке сигнала (раздел 10.4 [21]). Обычно первой функцией, вызываемой обработчиком сигнала, была signal, переопределявшая обработчик. Это создавало небольшой временной промежуток между отправкой сигнала и переопределением обработчика, в который процесс мог быть завершен при повторном появлении того же сигнала. На первый взгляд может показаться, что та же проблема должна возникать и при использовании mq_notify, поскольку процесс должен перерегистрироваться каждый раз после появления уведомления. Однако очереди сообщений отличаются по своим свойствам от сигналов, поскольку необходимость отправки уведомления не может возникнуть, пока очередь не будет пуста. Следовательно, необходимо аккуратно перерегистрироваться на получение уведомления <emphasis>до</emphasis> считывания пришедшего сообщения из очереди.</p>
      </cite>
     </section>
     <section>
      <title>
       <p>Пример: простая программа с уведомлением</p>
      </title>
      <p>Прежде чем углубляться в тонкости сигналов реального времени и потоков Posix, мы напишем простейшую программу, включающую отправку сигнала SI6USR1 при помещении сообщения в пустую очередь. Эта программа приведена в листинге 5.8, и мы отметим, что она содержит ошибку, о которой мы вскоре поговорим подробно.</p>
      <subtitle>Листинг 5.8. Отправка sigusr1 при помещении сообщения в пустую очередь (неправильная версия программы)</subtitle>
      <p><code>//pxmsg/mqnotifysigl.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  mqd_t mqd;</code></p>
      <p><code>3  void *buff;</code></p>
      <p><code>4  struct mq_attr attr;</code></p>
      <p><code>5  struct sigevent sigev;</code></p>
      <p><code>6  static void sig_usrl(int);</code></p>
      <empty-line/>
      <p><code>7  int</code></p>
      <p><code>8  main(int argc, char **argv)</code></p>
      <p><code>9  {</code></p>
      <p><code>10  if (argc != 2)</code></p>
      <p><code>11   err_quit("usage: mqnotifysig1 &lt;name&gt;");</code></p>
      <p><code>12  /* открываем очередь, получаем атрибуты, выделяем буфер */</code></p>
      <p><code>13  mqd = Mq_open(argv[1], O_RDONLY);</code></p>
      <p><code>14  Mq_getattr(mqd, &amp;attr);</code></p>
      <p><code>15  buff = Malloc(attr.mq_msgsize);</code></p>
      <p><code>16  /* устанавливаем обработчик, включаем уведомление */</code></p>
      <p><code>17  Signal(SIGUSR1, sig_usr1);</code></p>
      <p><code>18  sigev.sigev_notify = SIGEV_SIGNAL;</code></p>
      <p><code>19  sigev.sigev_signo = SIGUSR1;</code></p>
      <p><code>20  Mq_notify(mqd, &amp;sigev);</code></p>
      <p><code>21  for (;;)</code></p>
      <p><code>22   pause(); /* все делает обработчик */</code></p>
      <p><code>23  exit(0);</code></p>
      <p><code>24 }</code></p>
      <empty-line/>
      <p><code>25 static void</code></p>
      <p><code>26 sig_usr1(int signo)</code></p>
      <p><code>27 {</code></p>
      <p><code>28  ssize_t n;</code></p>
      <p><code>29  Mq_notify(mqd, &amp;sigev); /* сначала перерегистрируемся */</code></p>
      <p><code>30  n = Mq_receive(mqd, buff, attr.mq_msgsize, NULL);</code></p>
      <p><code>31  printf("SIGUSR1 received, read %ld bytes\n", (long) n);</code></p>
      <p><code>32  return;</code></p>
      <p><code>33 }</code></p>
      <subtitle>Объявление глобальных переменных</subtitle>
      <p>2-6 Мы объявляем несколько глобальных переменных, используемых совместно функцией main и нашим обработчиком сигнала (sig_usr1).</p>
      <subtitle>Открытие очереди, получение атрибутов, выделение буфера чтения</subtitle>
      <p>12-15 Мы открываем очередь сообщений, получаем ее атрибуты и выделяем буфер считывания соответствующего размера.</p>
      <subtitle>Установка обработчика сигнала, включение уведомления</subtitle>
      <p>16-20 Сначала мы устанавливаем свой обработчик для сигнала SIGUSR1. Мы присваиваем полю sigev_notify структуры sigevent значение SIGEV_SIGNAL, что говорит системе о необходимости отправки сигнала, когда очередь из пустой становится непустой. Полю sigev_signo присваивается значение, соответствующее тому сигналу, который мы хотим получить. Затем вызывается функция mq_notify.</p>
      <subtitle>Бесконечный цикл</subtitle>
      <p>Функция main после этого зацикливается, и процесс приостанавливается при вызове pause, возвращающей –1 при получении сигнала.</p>
      <subtitle>Получение сигнала, считывание сообщения</subtitle>
      <p>Обработчик сигнала вызывает mq_notify для перерегистрации, считывает сообщение и выводит его длину. В этой программе мы игнорируем приоритет полученного сообщения. </p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Оператор return в конце sig_usr1 не требуется, поскольку возвращаемое значение отсутствует, а конец текста функции неявно предусматривает возвращение в вызвавшую программу. Тем не менее автор всегда записывает return явно, чтобы указать, что возвращение из этой функции может происходит с особенностями. Например, может произойти преждевременный возврат (с ошибкой EINTR) в потоке, обрабатывающем сигнал. </p>
      </cite>
      <p>Запустим теперь эту программу в одном из окон</p>
      <p><code>solaris % <strong>mqcreate /test1</strong></code></p>
      <p><code>solaris % <strong>mqnotifysig1 /test1</strong></code></p>
      <p>и затем выполним следующую команду в другом окне</p>
      <p><code>solaris % <strong>mqsend /test1 50 16</strong></code></p>
      <p>Как и ожидалось, программа mqnotifysig1 выведет сообщение: SIGUSR1 received, read 50 bytes.</p>
      <p>Мы можем проверить, что только один процесс может быть зарегистрирован на получение уведомления в любой момент, запустив копию пpoгрaммы в другом окне:</p>
      <p><code>solaris % <strong>mqnotifysig1 /test1</strong></code></p>
      <p><code>mq_notify error: Device busy</code></p>
      <p>Это сообщение соответствует коду ошибки EBUSY.</p>
     </section>
     <section>
      <title>
       <p>Сигналы Posix: функции типа Async-Signal-Safe</p>
      </title>
      <p>Недостаток пpoгрaммы из листинга 5.8 в том, что она вызывает mq_notify, mq_receive и printf из обработчика сигнала. Ни одну из этих функций вызывать оттуда не следует.</p>
      <p>Функции, которые могут быть вызваны из обработчика сигнала, относятся к группе, называемой, согласно Posix, <emphasis>async-signal-safe functions</emphasis> (функции, обеспечивающие безопасную обработку асинхронных сигналов). В табл. 5.1 приведены эти функции по стандарту Posix вместе с некоторыми дополнительными, появившимися только в Unix 98.</p>
      <p>Функции, которых нет в этом списке, не должны вызываться из обработчика сигнала. Обратите внимание, что в списке отсутствуют стандартные функции библиотеки ввода-вывода и функции pthread_XXX для работы с потоками. Из всех функций IPC, рассматриваемых в этой книге, в список попали только sem_post, read и write (подразумевается, что последние две используются с программными каналами и FIFO).</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Стандарт ANSI С указывает четыре функции, которые могут быть вызваны из обработчика сигналов: abort, exit, longjmp, signal. Первые три отсутствуют в списке функций async-signal-safe стандарта Unix 98. </p>
      </cite>
      <empty-line/>
      <p>Таблица 5.1. Функции, относящиеся к группе async-signal-safe</p>
      <p><code>access        fpathconf rename      sysconf</code></p>
      <p><code>aio_return    fstat     rmdir       tcdrain</code></p>
      <p><code>aio_suspend   fsync     sem_post    tcflow </code></p>
      <p><code>alarm         getegid   setgid      tcflush</code></p>
      <p><code>cfgetispeed   geteuid   setpgid     tcgetattr</code></p>
      <p><code>cfgetospeed   getgid    setsid      tcgetgrp</code></p>
      <p><code>cfsetispeed   getgroups setuid      tcsendbreak</code></p>
      <p><code>cfsetospeed   getpgrp   sigaction   tcsetattr</code></p>
      <p><code>chdir         getpid    sigaddset   tcsetpgrp</code></p>
      <p><code>chmod         getppid   sigdelset   time</code></p>
      <p><code>chown         getuid    sigemptyset timer_getoverrun</code></p>
      <p><code>clock_gettime kill      sigfillset  timer_gettime</code></p>
      <p><code>close         link      sigismember timer_settime</code></p>
      <p><code>creat         lseek     signal      times</code></p>
      <p><code>dup           mkdir     sigpause    umask</code></p>
      <p><code>dup2          mkfifo    sigpending  uname</code></p>
      <p><code>execle        open      sigprocmask unlink</code></p>
      <p><code>execve        pathconf  sigqueue    utime</code></p>
      <p><code>_exit         pause     sigset      wait</code></p>
      <p><code>fcntl         pipe      sigsuspend  waitpid</code></p>
      <p><code>fdatasync     raise     sleep       write</code></p>
      <p><code>fork          read      stat</code></p>
     </section>
     <section>
      <title>
       <p>Пример: уведомление сигналом</p>
      </title>
      <p>Одним из способов исключения вызова каких-либо функций из обработчика сигнала является установка этим обработчиком глобального флага, который проверяется программным потоком для получения информации о приходе сообщения. В листинге 5.9 иллюстрируется этот метод, хотя новая программа также содержит ошибку, но уже другую, о которой мы вскоре поговорим подробнее.</p>
      <subtitle>Глобальная переменная</subtitle>
      <p>2 Поскольку единственное действие, выполняемое обработчиком сигнала, заключается в присваивании ненулевого значения флагу mqflag, глобальным переменным из листинга 5.8 уже не нужно являться таковыми. Уменьшение количества глобальных переменных — это всегда благо, особенно при использовании программных потоков.</p>
      <subtitle>Открытие очереди сообщений</subtitle>
      <p>15-18 Мы открываем очередь сообщений, получаем ее атрибуты и выделяем буфер считывания.</p>
      <subtitle>Инициализация наборов сигналов</subtitle>
      <p>19-22 Мы инициализируем три набора сигналов и устанавливаем бит для сигнала SIGUSR1 в наборе newmask.</p>
      <subtitle>Установка обработчика сигнала, включение уведомления</subtitle>
      <p>23-27 Мы устанавливаем обработчик сигнала для SIGUSR1, присваиваем значения полям структуры sigevent и вызываем mq_notify. </p>
      <subtitle>Листинг 5.9. Обработчик сигнала устанавливает флаг для главного потока (неправильная версия)</subtitle>
      <p><code>//pxmsg/mqnotifysig2.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  volatile sig_atomic_t mqflag; /* ненулевое значение устанавливается обработчиком */</code></p>
      <p><code>3  static void sig_usrl(int);</code></p>
      <empty-line/>
      <p><code>4  int</code></p>
      <p><code>5  main(int argc, char **argv)</code></p>
      <p><code>6  {</code></p>
      <p><code>7   mqd_t mqd;</code></p>
      <p><code>8   void *buff;</code></p>
      <p><code>9   ssize_t n;</code></p>
      <p><code>10  sigset_t zeromask, newmask, oldmask;</code></p>
      <p><code>11  struct mq_attr attr;</code></p>
      <p><code>12  struct sigevent sigev;</code></p>
      <p><code>13  if (argc != 2)</code></p>
      <p><code>14   err_quit("usage: mqnotifysig2 &lt;name&gt;");</code></p>
      <p><code>15  /* открытие очереди, получение атрибутов, выделение буфера */</code></p>
      <p><code>16  mqd = Mq_open(argv[1], O_RDONLY);</code></p>
      <p><code>17  Mq_getattr(mqd, &amp;attr);</code></p>
      <p><code>18  buff = Malloc(attr.mq_msgsize);</code></p>
      <p><code>19  Sigemptyset(&amp;zeromask); /* сигналы не блокируются */</code></p>
      <p><code>20  Sigemptyset(&amp;newmask);</code></p>
      <p><code>21  Sigemptyset(&amp;oldmask);</code></p>
      <p><code>22  Sigaddset(&amp;newmask, SIGUSR1);</code></p>
      <p><code>23  /* установка обработчика, включение уведомления */</code></p>
      <p><code>24  Signal(SIGUSR1, sig_usr1);</code></p>
      <p><code>25  sigev.sigev_notify = SIGEV_SIGNAL;</code></p>
      <p><code>26  sigev.sigev_signo = SIGUSR1;</code></p>
      <p><code>27  Mq_notify(mqd, &amp;sigev);</code></p>
      <p><code>28  for (;;) {</code></p>
      <p><code>29   Sigprocmask(SIG_BLOCK, &amp;newmask, &amp;oldmask); /* блокируем SIGUSR1 */</code></p>
      <p><code>30   while (mqflag == 0)</code></p>
      <p><code>31    sigsuspend(&amp;zeromask);</code></p>
      <p><code>32   mqflag = 0; /* сброс флага */</code></p>
      <p><code>33   Mq_notify(mqd, &amp;sigev); /* перерегистрируемся */</code></p>
      <p><code>34   n = Mq_receive(mqd, buff, attr.mq_msgsize, NULL);</code></p>
      <p><code>35   printf("read %ld bytes\n", (long) n);</code></p>
      <p><code>36   Sigprocmask(SIG_UNBLOCK, &amp;newmask, NULL); /* разблокируем SIGUSR1 */</code></p>
      <p><code>37  }</code></p>
      <p><code>38  exit(0);</code></p>
      <p><code>39 }</code></p>
      <empty-line/>
      <p><code>40 static void</code></p>
      <p><code>41 sig_usr1(int signo)</code></p>
      <p><code>42 {</code></p>
      <p><code>43  mqflag = 1;</code></p>
      <p><code>44  return;</code></p>
      <p><code>45 }</code> </p>
      <subtitle>Ожидание установки флага обработчиком</subtitle>
      <p>28-32 Мы вызываем sigprocmask, чтобы заблокировать SIGUSR1, сохраняя текущую маску сигналов в oldmask. Затем мы в цикле проверяем значение глобального флага mqflag, ожидая, когда обработчик сигнала установит его в ненулевое значение. Пока значение этого флага равно нулю, мы вызываем sigsuspend, что автоматически приостанавливает вызывающий поток и устанавливает его маску в zeromask (сигналы не блокируются). Раздел 10.16 [21] рассказывает о функции sigsuspend более подробно. Также там объясняются причины, по которым мы должны проверять значение переменной mqflag только при заблокированном сигнале SIGUSR1. Каждый раз при выходе из sigsuspend сигнал SIGUSR1 блокируется.</p>
      <subtitle>Перерегистрация и считывание сообщения</subtitle>
      <p>33-36 Когда флаг mqflag принимает ненулевое значение, мы регистрируемся на получение уведомления заново и считываем сообщение из очереди. Затем мы разблокируем сигнал SIGUSR1 и возвращаемся к началу цикла.</p>
      <p>Мы уже говорили, что в этой версии программы также присутствует ошибка. Посмотрим, что произойдет, если в очередь попадут два сообщения, прежде чем будет считано первое из них. Мы можем имитировать это, добавив sleep перед вызовом mq_notify. Проблема тут в том, что уведомление отсылается только в том случае, когда сообщение помещается в пустую очередь. Если в очередь поступают два сообщения, прежде чем первое будет считано, то отсылается только одно уведомление. Тогда мы считываем первое сообщение и вызываем sigsuspend, ожидая поступления еще одного. А в это время в очереди уже имеется сообщение, которое мы должны прочитать, но которое мы никогда не прочтем.</p>
     </section>
     <section>
      <title>
       <p>Пример: уведомление сигналом с отключением блокировки</p>
      </title>
      <p>Исправить описанную выше ошибку можно, отключив блокировку операции считывания сообщений. Листинг 5.10 содержит измененную версию программы из листинга 5.9. Новая программа считывает сообщения в неблокируемом режиме.</p>
      <subtitle>Листинг 5.10. Использование уведомления с помощью сигнала для считывания сообщения из очереди сообщений Posix</subtitle>
      <p><code>//pxmsg/mqnotifysig3.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  volatile sig_atomic_t mqflag; /* ненулевое значение устанавливается обработчиком сигнала */</code></p>
      <p><code>3  static void sig_usr1(int);</code></p>
      <empty-line/>
      <p><code>4  int</code></p>
      <p><code>5  main(int argc, char **argv)</code></p>
      <p><code>6  {</code></p>
      <p><code>7   mqd_t mqd;</code></p>
      <p><code>8   void *buff;</code></p>
      <p><code>9   ssize_t n;</code></p>
      <p><code>10  sigset_t zeromask, newmask, oldmask;</code></p>
      <p><code>11  struct mq_attr attr;</code></p>
      <p><code>12  struct sigevent sigev;</code></p>
      <p><code>13  if (argc != 2)</code></p>
      <p><code>14   err_quit("usage: mqnotifysig3 &lt;name&gt;");</code></p>
      <p><code>15  /* открытие очереди, получение атрибутов, выделение буфера */</code></p>
      <p><code>16  mqd = Mq_open(argv[1], O_RDONLY | O_NONBLOCK);</code></p>
      <p><code>17  Mq_getattr(mqd, &amp;attr);</code></p>
      <p><code>18  buff = Malloc(attr.mq_msgsize);</code></p>
      <p><code>19  Sigemptyset(&amp;zeromask); /* сигналы не блокируются */</code></p>
      <p><code>20  Sigemptyset(&amp;newmask);</code></p>
      <p><code>21  Sigemptyset(&amp;oldmask);</code></p>
      <p><code>22  Sigaddset(&amp;newmask, SIGUSR1);</code></p>
      <p><code>23  /* установка обработчика, включение уведомления */</code></p>
      <p><code>24  Signal(SIGUSR1, sig_usr1);</code></p>
      <p><code>25  sigev.sigev_notify = SIGEV_SIGNAL;</code></p>
      <p><code>26  sigev.sigev_signo = SIGUSR1;</code></p>
      <p><code>27  Mq_notify(mqd, &amp;sigev);</code></p>
      <p><code>28  for (;;) {</code></p>
      <p><code>29   Sigprocmask(SIG_BLOCK, &amp;newmask, &amp;oldmask); /* блокируем SIGUSR1 */</code></p>
      <p><code>30   while (mqflag == 0)</code></p>
      <p><code>31    sigsuspend(&amp;zeromask);</code></p>
      <p><code>32   mqflag = 0; /* сброс флага */</code></p>
      <p><code>33   Mq_notify(mqd, &amp;sigev); /* перерегистрируемся */</code></p>
      <p><code>34   while ((n = mq_receive(mqd, buff, attr.mq_msgsize, NULL)) &gt;= 0) {</code></p>
      <p><code>35    printf("read $ld bytes\n", (long) n);</code></p>
      <p><code>36   }</code></p>
      <p><code>37   if (errno != EAGAIN)</code></p>
      <p><code>38    err_sys("mq_receive error");</code></p>
      <p><code>39   Sigprocmask(SIG_UNBLOCK, &amp;newmask, NULL); /* разблокируем SIGUSR1 */</code></p>
      <p><code>40  }</code></p>
      <p><code>41  exit(0);</code></p>
      <p><code>42 }</code></p>
      <empty-line/>
      <p><code>43 static void</code></p>
      <p><code>44 sig_usr1(int signo)</code></p>
      <p><code>45 {</code></p>
      <p><code>46  mqflag = 1;</code></p>
      <p><code>47  return;</code></p>
      <p><code>48 }</code></p>
      <subtitle>Открытие очереди сообщений в режиме<strong> отключенной блокировки</strong></subtitle>
      <p>15-18 Первое изменение в программе: при открытии очереди сообщений указывается флаг O_NONBLOCK.</p>
      <subtitle>Считывание всех сообщений из очереди</subtitle>
      <p>34-38 Другое изменение: mq_receive вызывается в цикле, считывая все сообщения в очереди, пока не будет возвращена ошибка с кодом EAGAIN, означающая отсутствие сообщений в очереди. </p>
     </section>
     <section>
      <title>
       <p>Пример: уведомление с использованием sigwait вместо обработчика</p>
      </title>
      <p>Хотя программа из предыдущего примера работает правильно, можно повысить ее эффективность. Программа использует sigsuspend для блокировки в ожидании прихода сообщения. При помещении сообщения в пустую очередь вызывается сигнал, основной поток останавливается, запускается обработчик, который устанавливает флаг mqflag, затем снова запускается главный поток, он обнаруживает, что значение mqflag отлично от нуля, и считывает сообщение. Более простой и эффективный подход заключается в блокировании в функции, ожидающей получения сигнала, что не требует вызова обработчика только для установки флага. Эта возможность предоставляется функцией sigwait:</p>
      <p><code>#include &lt;signal.h&gt;</code></p>
      <p><code>int sigwait(const sigset_t <emphasis>*set,</emphasis> int <emphasis>*sig</emphasis>);</code></p>
      <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
      <p>Перед вызовом sigwait мы блокируем некоторые сигналы. Набор блокируемых сигналов указывается в качестве аргумента set. Функция sigwait блокируется, пока не придет по крайней мере один из этих сигналов. Когда он будет получен, функция возвратит его. Значение этого сигнала сохраняется в указателе <emphasis>sig,</emphasis> а функция возвращает значение 0. Это называется <emphasis>синхронным ожиданием асинхронного события:</emphasis> мы используем сигнал, но не пользуемся асинхронным обработчиком сигнала.</p>
      <p>В листинге 5.11 приведен текст программы, использующей mq_notifу и sigwait.</p>
      <subtitle>Листинг 5.11. Использование mq_notify совместно с sigwait</subtitle>
      <p><code>//pxmsg/mqnotifysig4.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int signo;</code></p>
      <p><code>6   mqd_t mqd;</code></p>
      <p><code>7   void *buff;</code></p>
      <p><code>8   ssize_t n;</code></p>
      <p><code>9   sigset_t newmask;</code></p>
      <p><code>10  struct mq_attr attr;</code></p>
      <p><code>11  struct sigevent sigev;</code></p>
      <p><code>12  if (argc != 2)</code></p>
      <p><code>13   err_quit("usage: mqnotifysig4 &lt;name&gt;");</code></p>
      <p><code>14  /* открытие очереди, получение атрибутов, выделение буфера */</code></p>
      <p><code>15  mqd = Mq_open(argv[1], O_RDONLY | O_NONBLOCK);</code></p>
      <p><code>16  Mq_getattr(mqd, &amp;attr);</code></p>
      <p><code>17  buff = Malloc(attr.mq_msgsize);</code></p>
      <p><code>18  Sigemptyset(&amp;newmask);</code></p>
      <p><code>19  Sigaddset(&amp;newmask, SIGUSR1);</code></p>
      <p><code>20  Sigprocmask(SIG_BLOCK, &amp;newmask, NULL); /* блокируем SIGUSR1 */</code></p>
      <p><code>21  /* установка обработчика, включение уведомления */</code></p>
      <p><code>22  sigev.sigev_notify = SIGEV_SIGNAL;</code></p>
      <p><code>23  sigev.sigev_signo = SIGUSR1;</code></p>
      <p><code>24  Mq_notify(mqd, &amp;sigev);</code></p>
      <p><code>25  for (;;) {</code></p>
      <p><code>26   Sigwait(&amp;newmask, &amp;signo);</code></p>
      <p><code>27   if (signo == SIGUSR1) {</code></p>
      <p><code>28    Mq_notify(mqd, &amp;sigev); /* перерегистрируемся */</code></p>
      <p><code>29    while ((n = mq_receive(mqd, buff, attr.mq_msgsize, NULL)) &gt;= 0) {</code></p>
      <p><code>30     printf("read %ld bytes\n", (long) n);</code></p>
      <p><code>31    }</code></p>
      <p><code>32    if (errno != EAGAIN)</code></p>
      <p><code>33     err_sys("mq_receive error");</code></p>
      <p><code>34   }</code></p>
      <p><code>35  }</code></p>
      <p><code>36  exit(0);</code></p>
      <p><code>37 }</code></p>
      <subtitle>Инициализация набора сигналов и блокировка SIGUSR1</subtitle>
      <p>18-20 Инициализируется один набор сигналов, содержащий только SIGUSR1, а затем этот сигнал блокируется sigprocmask.</p>
      <subtitle>Ожидание сигнала</subtitle>
      <p>26-34 Мы блокируем выполнение программы и ждем прихода сигнала, вызвав sigwait. При получении сигнала SIGUSR1 мы перерегистрируемся на уведомление и считываем все доступные сообщения.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Функция sigwait часто используется в многопоточных процессах. Действительно, глядя на прототип функции, мы можем заметить, что возвращаемое значение будет 0 или одной из ошибок Еххх, что весьма похоже на функции Pthread. Однако в многопоточном процессе нельзя пользоваться sigprocmask — вместо нее следует вызывать pthread_ sigmask, которая изменяет маску сигналов только для вызвавшего ее потока. Аргументы pthread_sigmask совпадают с аргументами sigprocmask.</p>
       <p>Существуют два варианта функции sigwait: sigwaitinfo возвращает структуру siginfo_t (которая будет определена в следующем разделе) и предназначена для использования с надежными сигналами; функция sigtimedwait также возвращает структуру siginfo_t и позволяет вызывающему процессу установить ограничение по времени на ожидание.</p>
       <p>Большая часть книг о многопоточном программировании, таких как [3], рекомендуют пользоваться sigwait для обработки всех сигналов в многопоточном процессе и не использовать асинхронные обработчики. </p>
      </cite>
     </section>
     <section>
      <title>
       <p>Пример: очереди сообщений Posix и функция select</p>
      </title>
      <p>Дескриптор очереди сообщений (переменная типа mqd_t) не является «обычным» дескриптором и не может использоваться с функциями select и poll (глава 6 [24]). Тем не менее их можно использовать вместе с каналом и функцией mq_notify. (Аналогичный метод применен в разделе 6.9 для очередей System V, где создается дочерний процесс и канал связи.) Прежде всего обратите внимание, что, согласно табл. 5.1, функция write принадлежит к группе async-signal-safe, поэтому она может вызываться из обработчика сигналов. Программа приведена в листинге 5.12.</p>
      <subtitle>Листинг 5.12. Использование уведомления с помощью сигнала и канала</subtitle>
      <p><code>//pxmsg/mqnotifysig5.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  int pipefd[2];</code></p>
      <p><code>3  static void sig_usr1(int);</code></p>
      <empty-line/>
      <p><code>4  int</code></p>
      <p><code>5  main(int argc, char **argv)</code></p>
      <p><code>6  {</code></p>
      <p><code>7   int nfds;</code></p>
      <p><code>8   char c;</code></p>
      <p><code>9   fd_set rset;</code></p>
      <p><code>10  mqd_t mqd;</code></p>
      <p><code>11  void *buff;</code></p>
      <p><code>12  ssize_t n;</code></p>
      <p><code>13  struct mq_attr attr;</code></p>
      <p><code>14  struct sigevent sigev;</code></p>
      <p><code>15  if (argc != 2)</code></p>
      <p><code>16   err_quit("usage: mqnotifysig5 &lt;name&gt;");</code></p>
      <p><code>17  /* открытие очереди, получение атрибутов, выделение буфера */</code></p>
      <p><code>18  mqd = Mq_open(argv[1], O_RDONLY | O_NONBLOCK);</code></p>
      <p><code>19  Mq_getattr(mqd, &amp;attr);</code></p>
      <p><code>20  buff = Malloc(attr.mq_msgsize);</code></p>
      <p><code>21  Pipe(pipefd);</code></p>
      <p><code>22  /* установка обработчика, включение уведомления */</code></p>
      <p><code>23  Signal(SIGUSR1, sig_usr1);</code></p>
      <p><code>24  sigev.sigev_notify = SIGEV_SIGNAL;</code></p>
      <p><code>25  sigev.sigev_signo = SIGUSR1;</code></p>
      <p><code>26  Mq_notify(mqd, &amp;sigev);</code></p>
      <p><code>27  FD_ZERO(&amp;rset);</code></p>
      <p><code>28  for (;;) {</code></p>
      <p><code>29   FD_SET(pipefd[0], &amp;rset);</code></p>
      <p><code>30   nfds = Select(pipefd[0] + 1, &amp;rset, NULL, NULL, NULL);</code></p>
      <p><code>31   if (FD_ISSET(pipefd[0], &amp;rset)) {</code></p>
      <p><code>32    Read(pipefd[0], &amp;c, 1);</code></p>
      <p><code>33    Mq_notify(mqd, &amp;sigev); /* перерегистрируемся */</code></p>
      <p><code>34    while ((n = mq_receive(mqd, buff, attr.mq_msgsize, NULL)) &gt;= 0) {</code></p>
      <p><code>35     printf("read %ld bytes\n", (long) n);</code></p>
      <p><code>36    }</code></p>
      <p><code>37    if (errno != EAGAIN)</code></p>
      <p><code>38     err_sys("mq_receive error");</code></p>
      <p><code>39   }</code></p>
      <p><code>40  }</code></p>
      <p><code>41  exit(0);</code></p>
      <p><code>42 }</code></p>
      <empty-line/>
      <p><code>43 static void</code></p>
      <p><code>44 sig_usr1(int signo)</code></p>
      <p><code>45 {</code></p>
      <p><code>46  Write(pipefd[1], "", 1); /* один байт – 0 */</code></p>
      <p><code>47  return;</code></p>
      <p><code>48 }</code></p>
      <subtitle>Создание канала</subtitle>
      <p>21 Мы создаем канал, в который обработчик сигнала произведет запись, когда будет получено уведомление о поступлении сообщения в очередь. Это пример использования канала внутри одного процесса.</p>
      <subtitle>Вызов select</subtitle>
      <p>27-40 Мы инициализируем набор дескрипторов rset и при каждом проходе цикла включаем бит, соответствующий дескриптору pipefd[0] (открытый на считывание конец канала). Затем мы вызываем функцию select, ожидая получения единственного дескриптора, хотя в типичном приложении именно здесь осуществлялось бы размножение дескрипторов одного из концов канала. Когда появляется возможность читать из канала, мы перерегистрируемся на уведомление и считываем все доступные сообщения.</p>
      <subtitle>Обработчик сигнала</subtitle>
      <p>43-48 Единственное, что делает обработчик сигнала, — записывает в канал 1 байт. Как мы уже отмечали, эта операция относится к разрешенным для асинхронных обработчиков.</p>
     </section>
     <section>
      <title>
       <p>Пример: запуск нового потока</p>
      </title>
      <p>Альтернативой снятию блокировки сигналом является присваивание sigev_notify значения SIGEV_THREAD, что приводит к созданию нового потока. Функция, указанная в <emphasis>sigev_notify_function,</emphasis> вызывается с параметром sigev_value. Атрибуты нового канала указываются переменной sigev_notify_attributes, которая может быть и нулевым указателем, если нас устраивают устанавливаемые по умолчанию атрибуты. Текст программы приведен в листинге 5.13.</p>
      <subtitle>Листинг 5.13. Функция mq_notify, запускающая новый программный поток</subtitle>
      <p><code>//pxmsg/mqnotifythread1.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  mqd_t mqd;</code></p>
      <p><code>3  struct mq_attr attr;</code></p>
      <p><code>4  struct sigevent sigev;</code></p>
      <p><code>5  static void notify_thread(union sigval); /* наш поток */</code></p>
      <empty-line/>
      <p><code>6  int</code></p>
      <p><code>7  main(int argc, char **argv)</code></p>
      <p><code>8  {</code></p>
      <p><code>9   if (argc != 2)</code></p>
      <p><code>10   err_quit("usage: mqnotifythread1 &lt;name&gt;");</code></p>
      <p><code>11  mqd = Mq_open(argv[1], O_RDONLY | O_NONBLOCK);</code></p>
      <p><code>12  Mq_getattr(mqd, &amp;attr);</code></p>
      <p><code>13  sigev.sigev_notify = SIGEV_THREAD;</code></p>
      <p><code>14  sigev.sigev_value.sival_ptr = NULL;</code></p>
      <p><code>15  sigev.sigev_notify_function = notify_thread;</code></p>
      <p><code>16  sigev.sigev_notify_attributes = NULL;</code></p>
      <p><code>17  Mq_notify(mqd, &amp;sigev);</code></p>
      <p><code>18  for (;;)</code></p>
      <p><code>19   pause(); /* новый поток делает все */</code></p>
      <p><code>20  exit(0);</code></p>
      <p><code>21 }</code></p>
      <empty-line/>
      <p><code>22 static void</code></p>
      <p><code>23 notify_thread(union sigval arg)</code></p>
      <p><code>24 {</code></p>
      <p><code>25  ssize_t n;</code></p>
      <p><code>26  void *buff;</code></p>
      <p><code>27  printf("notify_thread started\n");</code></p>
      <p><code>28  buff = Malloc(attr.mq_msgsize);</code></p>
      <p><code>29  Mq_notify(mqd, &amp;sigev); /* перерегистрируемся */</code></p>
      <p><code>30  while ((n = mq_receive(mqd, buff, attr.mq_msgsize, NULL)) &gt;= 0) {</code></p>
      <p><code>31   printf("read %ld bytes\n", (long) n);</code></p>
      <p><code>32  }</code></p>
      <p><code>33  if (errno != EAGAIN)</code></p>
      <p><code>34   err_sys("mq_receive error");</code></p>
      <p><code>35  free(buff);</code></p>
      <p><code>36  pthread_exit(NULL);</code></p>
      <p><code>37 }</code></p>
      <p>Мы задаем нулевой указатель в качестве аргумента нового потока (sigev_value), поэтому функции start нового потока ничего не передается. Мы могли бы передать указатель на дескриптор, вместо того чтобы декларировать его как глобальный, но новому потоку все равно нужно получать атрибуты очереди сообщений и структуру sigev (для перерегистрации). Мы также указываем нулевой указатель в качестве атрибутов нового потока, поэтому используются установки по умолчанию. Новые потоки создаются как неприсоединенные (detached threads).</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>К сожалению, ни одна из использовавшихся для проверки примеров систем (Solaris 2.6 и Digital Unix 4.0B) не поддерживает SIGEV_THREAD. Обе они допускают только два значения sigev_notify: SIGEV_NONE и SIGEV_SIGNAL.</p>
      </cite>
     </section>
    </section>
    <section>
     <title>
      <p>5.7. Сигналы реального времени Posix</p>
     </title>
     <section>
      <p>За прошедшие годы сигналы в Unix много раз претерпевали революционные изменения.</p>
      <p>1. Модель сигналов, предлагавшаяся в Unix Version 7 (1978), была ненадежной. Сигналы могли быть потеряны, и процессу было трудно отключить отдельные сигналы при выполнении отдельных участков кода.</p>
      <p>2. В версии 4.3BSD (1986) надежные сигналы были добавлены.</p>
      <p>3. Версия System V Release 3.0 (1986) также добавила надежные сигналы, хотя и иначе, чем BSD.</p>
      <p>4. Стандарт Posix.1 (1990) увековечил модель надежных сигналов BSD, и эта модель подробно описана в главе 10 [21].</p>
      <p>5. Posix.1 (1996) добавил к модели Posix сигналы реального времени. Это произросло из расширений реального времени Posix.1b (которые были названы Posix.4).</p>
      <p>Почти все системы Unix в настоящее время поддерживают надежные сигналы, а новейшие системы предоставляют также и сигналы реального времени стандарта Posix. (Следует различать надежные сигналы и сигналы реального времени.) О сигналах реального времени следует поговорить подробнее, поскольку мы уже столкнулись с некоторыми структурами, определяемыми этим расширением стандарта, в предыдущем разделе (структуры sigval и sigevent).</p>
      <p>Сигналы могут быть отнесены к двум группам:</p>
      <p>1. Сигналы реального времени, которые могут принимать значения между SIGRTMIN и SIGRTMAX включительно. Posix требует, чтобы предоставлялось по крайней мере RTSIG_MAX сигналов, и минимальное значение этой константы равно 8.</p>
      <p>2. Все прочие сигналы: SIGALRM, SIGINT, SIGKILL и пр.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>В Solaris 2.6 обычные сигналы Unix нумеруются с 1 по 37, а 8 сигналов реального времени имеют номера с 38 по 45. В Digital Unix 4.0B обычные сигналы нумеруются с 1 по 32, а 16 сигналов реального времени имеют номера с 33 по 48. Обе реализации определяют SIGRTMIN и SIGRTMAX как макросы, вызывающие sysconf, что позволяет изменять их значения.</p>
      </cite>
      <p>Далее все зависит от того, установлен ли процессом, получившим сигнал, флаг SA_SIGINFO при вызове sigaction. В итоге получаются четыре возможных сценария, приведенных в табл. 5.2.</p>
      <empty-line/>
      <p>Таблица 5.2. Поведение сигналов Posix в реальном времени в зависимости от SA_SIGINFO </p>
      <table>
       <tr align="left">
        <th align="left" valign="top">Сигнал</th>
        <th align="left" valign="top">Флаг SA_SIGINFO указан</th>
        <th align="left" valign="top">Флаг SA_SIGINFO не указан</th>
       </tr>
       <tr align="left">
        <td align="left" valign="top">От SIGRTMIN до SIGRTMAX</td>
        <td align="left" valign="top">Гарантируются характеристики реального времени</td>
        <td align="left" valign="top">Характеристики реального времени не обязательны</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">Все прочие сигналы</td>
        <td align="left" valign="top">Характеристики реального времени не обязательны</td>
        <td align="left" valign="top">Характеристики реального времени не обязательны</td>
       </tr>
      </table>
      <p>Смысл фразы «характеристики реального времени не обязательны» следующий: некоторые реализации могут обрабатывать эти сигналы как сигналы реального времени, но это не обязательно. Если мы хотим, чтобы сигналы обрабатывались как сигналы реального времени, мы должны использовать сигналы с номерами от SIGRTMIN до SIGRTMAX и должны указать флаг SA_SIGINFO при вызове sigaction при установке обработчика сигнала.</p>
      <p>Термин «характеристики реального времени» подразумевает следующее:</p>
      <p>&#9632; Сигналы помещаются в очередь. Если сигнал будет порожден трижды, он будет трижды получен адресатом. Более того, повторения одного и того же сигнала доставляются в порядке очереди (FIFO). Мы вскоре покажем пример очереди сигналов. Если же сигналы в очередь не помещаются, трижды порожденный сигнал будет получен лишь один раз.</p>
      <p>&#9632; Когда в очередь помещается множество неблокируемых сигналов в диапазоне SIGRTMIN—SIGRTMAX, сигналы с меньшими номерами доставляются раньше сигналов с большими номерами. То есть сигнал с номером SIGRTMIN имеет «больший приоритет», чем сигнал с номером SIGRTMIN+1, и т.д.</p>
      <p>&#9632; При отправке сигнала, не обрабатываемого как сигнал реального времени, единственным аргументом обработчика является номер сигнала. Сигналы реального времени несут больше информации, чем прочие сигналы. Обработчик для сигнала реального времени, устанавливаемый с флагом SA_SIGINFO, объявляется как</p>
      <p><code>void func(int <emphasis>signo,</emphasis> siginfo_t <emphasis>*info,</emphasis> void <emphasis>*context</emphasis>);</code></p>
      <p>где <emphasis>signo—</emphasis> номер сигнала, a siginfo_t — структура, определяемая как</p>
      <p><code>typedef struct {</code></p>
      <p><code> int si_signo; /* то же, что и signo */</code></p>
      <p><code> int si_code; /* SI_{USER,QUEUE,TIMER,ASYNCIO,MESGQ} */</code></p>
      <p><code> union sigval si_value; /* целое или указатель от отправителя */</code></p>
      <p><code>} siginfo_t;</code></p>
      <p>На что указывает <emphasis>context</emphasis> — зависит от реализации.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Обработчик сигналов, не являющихся сигналами реального времени, вызывается с единственным аргументом. Во многих системах существует старое соглашение о вызове обработчиков сигналов с тремя аргументами, которое предшествовало стандарту реального времени Posix.</p>
       <p>Тип siginfo_t является единственной структурой Posix, определяемой оператором typedef с именем, оканчивающимся на _t. В листинге 5.14 мы объявляем указатели на эти структуры как siginfo_t * без слова struct. </p>
      </cite>
      <p>&#9632; Для работы с сигналами реального времени добавлено несколько новых функций. Например, для отправки сигнала какому-либо процессу используется функция sigqueue вместо kill. Новая функция позволяет отправить вместе с сигналом структуру sigval.</p>
      <p>Сигналы реального времени порождаются нижеследующими функциями Posix.1, определяемыми значением si_code, которое хранится в структуре siginfo_t, передаваемой обработчику сигнала.</p>
      <p>&#9632; SI_ASYNCIO — сигнал был порожден по завершении асинхронного запроса на ввод или вывод одной из функций Posix aio_XXX, которые мы не рассматриваем;</p>
      <p>&#9632; SI_MESGQ — сигнал был порожден при помещении сообщения в пустую очередь сообщений (как в разделе 5.6); </p>
      <p>&#9632; SI_QUEUE — сигнал был отправлен функцией sigqueue. Пример будет вскоре приведен;</p>
      <p>&#9632; SI_TIMER — сигнал был порожден по истечении установленного функцией timer_settime времени. Эту функцию мы не описываем;</p>
      <p>&#9632; SI_USER — сигнал был отправлен функцией kill.</p>
      <p>Если сигнал был порожден каким-либо другим событием, si_code будет иметь значение, отличающееся от приведенных выше. Значение поля si_value структуры siginfo_t актуально только в том случае, если si_code имеет одно из следующих значений: SI_ASYNCIO, SI_MESGQ, SI_QUEUE и SI_TIMER.</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>В листинге 5.14 приведен пример программы, демонстрирующей использование сигналов реального времени. Программа вызывает fork, дочерний процесс блокирует три сигнала реального времени, родительский процесс отправляет девять сигналов (три раза отсылается каждый из заблокированных сигналов), затем дочерний процесс разблокирует сигналы и мы смотрим, сколько раз будет получен каждый из них и в каком порядке они придут.</p>
      <subtitle>Листинг 5.14. Тестовая программа, иллюстрирующая работу с сигналами реального времени</subtitle>
      <p><code>//rtsignals/test1.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  static void sig_rt(int, siginfo_t *, void *);</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int i, j;</code></p>
      <p><code>7   pid_t pid;</code></p>
      <p><code>8   sigset_t newset;</code></p>
      <p><code>9   union sigval val;</code></p>
      <p><code>10  printf("SIGRTMIN = %d, SIGRTMAX = %d\n", (int) SIGRTMIN, (int) SIGRTMAX);</code></p>
      <p><code>11  if ((pid = Fork()) == 0) {</code></p>
      <p><code>12   /* дочерний процесс блокирует 3 сигнала */</code></p>
      <p><code>13   Sigemptyset(&amp;newset);</code></p>
      <p><code>14   Sigaddset(&amp;newset, SIGRTMAX);</code></p>
      <p><code>15   Sigaddset(&amp;newset, SIGRTMAX – 1);</code></p>
      <p><code>16   Sigaddset(&amp;newset, SIGRTMAX – 2);</code></p>
      <p><code>17   Sigprocmask(SIG_BLOCK, &amp;newset, NULL);</code></p>
      <p><code>18   /* установка обработчика с флагом SA_SIGINFO */</code></p>
      <p><code>19   Signal_rt(SIGRTMAX, sig_rt);</code></p>
      <p><code>20   Signal_rt(SIGRTMAX – 1, sig_rt);</code></p>
      <p><code>21   Signal_rt(SIGRTMAX – 2, sig_rt);</code></p>
      <p><code>22   sleep(6); /* родительский процесс посылает все сигналы */</code></p>
      <p><code>23   Sigprocmask(SIG UNBLOCK, &amp;newset, NULL); /* разблокируемся */</code></p>
      <p><code>24   sleep(3); /* получаем сигналы */</code></p>
      <p><code>25   exit(O);</code></p>
      <p><code>26  }</code></p>
      <p><code>27  /* родительский процесс отправляет сигналы */</code></p>
      <p><code>28  sleep(3); /* дочерний процесс блокирует сигналы */</code></p>
      <p><code>29  for (i = SIGRTMAX; i &gt;= SIGRTMAX – 2; i--) {</code></p>
      <p><code>30   for (j = 0; j &lt;= 2; j++) {</code></p>
      <p><code>31    val.sival_int = j;</code></p>
      <p><code>32    Sigqueue(pid, i, val);</code></p>
      <p><code>33    printf("sent signal %d, val = %d\n", i, j);</code></p>
      <p><code>34   }</code></p>
      <p><code>35  }</code></p>
      <p><code>36  exit(0);</code></p>
      <p><code>37 }</code></p>
      <empty-line/>
      <p><code>38 static void</code></p>
      <p><code>39 sig_rt(int signo, siginfo_t *info, void *context)</code></p>
      <p><code>40 {</code></p>
      <p><code>41  printf(received signal #%d, code = %d, ival = %d\n",</code></p>
      <p><code>42   signo.info-&gt;si_code, info-&gt;si_value.sival_int);</code></p>
      <p><code>43 }</code></p>
      <subtitle>Вывод номеров сигналов реального времени</subtitle>
      <p>10 Мы печатаем наибольший и наименьший номера сигналов реального времени, чтобы узнать, сколько их предоставляется в данной реализации. Мы преобразуем обе константы к типу integer, поскольку в некоторых реализациях они определяются как макросы, требующие вызова sysconf, например:</p>
      <p><code>#define SIGRTMAX (sysconf(_SC_RTSIG_MAX))</code></p>
      <p>и функция sysconf возвращает целое типа long (см. упражнение 5.4).</p>
      <subtitle>Вызов fork и блокирование трех сигналов реального времени</subtitle>
      <p>11-17 Запускается дочерний процесс, который вызывает sigprocmask для блокировки трех используемых сигналов реального времени: SIGRTMAX, SIGRTMAX-1 и SIGRTMAX-2.</p>
      <subtitle>Установка обработчика сигнала</subtitle>
      <p>18-21 Мы вызываем функцию signal_rt (приведенную в листинге 5.15) для установки функции sig_rt в качестве обработчика трех указанных выше сигналов реального времени. Функция устанавливает флаг SA_SIGINFO, и поскольку эти три сигнала являются сигналами реального времени, мы можем ожидать, что они будут обрабатываться соответствующим образом. Эта функция также устанавливает маску сигналов, блокируемых на время выполнения обработчика.</p>
      <subtitle>Ожидание порождения сигналов родительским процессом, разблокирование сигналов</subtitle>
      <p>22-25 Дочерний процесс ждет 6 секунд, пока родительский породит девять сигналов. Затем вызывается sigprocmask для разблокирования трех сигналов реального времени. Это позволяет всем помещенным в очередь сигналам достичь адресата. Затем делается пауза еще на три секунды, чтобы обработчик успел вызвать printf девять раз, после чего дочерний процесс завершает свою работу.</p>
      <subtitle>Родительский процесс отправляет девять сигналов</subtitle>
      <p>27-36 Родительский процесс ждет три секунды, пока дочерний не заблокирует все требуемые сигналы. Затем родительский процесс порождает три экземпляра каждого из трех сигналов реального времени: i принимает 3 значения, a j принимает значения 0, 1 и 2 для каждого из значений i. Мы преднамеренно порождаем сигналы начиная с наибольшего номера, поскольку ожидаем, что они будут получены начиная с наименьшего. Мы также отсылаем с каждым из сигналов новое значение sigval_int, чтобы проверить, что копии одного и того же сигнала доставляются в том же порядке, в каком они были отправлены, то есть очередь действительно является очередью.</p>
      <subtitle>Обработчик сигнала</subtitle>
      <p>38-43 Обработчик сигнала просто выводит информацию о полученном сигнале.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Из табл. 5.1 следует, что функция printf не относится к функциям типа async-signal-safe и не должна вызываться из обработчика сигналов. Здесь мы используем ее исключительно в качестве проверочного средства в маленькой тестовой программе. </p>
      </cite>
      <p>Запустим эту программу в Solaris 2.6. Результат будет не тем, которого мы ожидали:</p>
      <p><code>solaris % <strong>test1</strong></code></p>
      <p><code>SIGRTMIN = 38, SIGRTMAX = 45 <emphasis>8 сигналов реального времени</emphasis></code></p>
      <p><code><emphasis>                             трехсекундная пауза</emphasis></code></p>
      <p><code>sent signal 45, val = 0</code></p>
      <p><code>sent signal 45, val = 1</code></p>
      <p><code>sent signal 45, val = 2</code></p>
      <p><code>sent signal 44, val = 0</code></p>
      <p><code>sent signal 44, val = 1</code></p>
      <p><code>sent signal 44, val = 2</code></p>
      <p><code>sent signal 43, val = 0</code></p>
      <p><code>sent signal 43, val = 1</code></p>
      <p><code>sent signal 43, val = 2</code></p>
      <p><code>solaris % <emphasis>родительский процесс завершил работу, пауза 3 секунды,</emphasis></code></p>
      <p><code><emphasis>          пока дочерний процесс не разблокирует сигналы</emphasis></code></p>
      <p><code>received signal #45, code = –2, ival = 2 <emphasis>дочерний процесс получает сигналы</emphasis></code></p>
      <p><code>received signal #45, code = –2, ival = 1</code></p>
      <p><code>received signal #45, code = –2, ival = 0</code></p>
      <p><code>received signal #44, code = –2, ival = 2</code></p>
      <p><code>received signal #44, code = –2, ival = 1</code></p>
      <p><code>received signal #44, code = –2, ival = 0</code></p>
      <p><code>received signal #43, code = –2, ival = 2</code></p>
      <p><code>received signal #43, code = –2, ival = 1</code></p>
      <p><code>received signal #43, code = –2, ival = 0</code></p>
      <p>В очередь помещаются девять сигналов, но первыми принимаются сигналы с большими номерами (а мы ожидали получить сигналы с меньшими номерами). </p>
      <p>Кроме того, сигналы с одинаковым номером приходят в порядке LIFO, а не FIFO. Код si_code = –2 соответствует SI_QUEUE.</p>
      <p>Запустив программу в Digital Unix 4.0B, мы получим именно тот результат, которого ожидали:</p>
      <p><code>alpha % <strong>test1</strong></code></p>
      <p><code>SIGRTMIN = 33, SIGRTMAX = 48 <emphasis>16 сигналов реального времени</emphasis></code></p>
      <p><code><emphasis>                             трех секундная пауза</emphasis></code></p>
      <p><code>sent signal 48, val = 0</code></p>
      <p><code>sent signal 48, val = 1</code></p>
      <p><code>sent signal 48, val = 2</code></p>
      <p><code>sent signal 47, val = 0</code></p>
      <p><code>sent signal 47, val = 1</code></p>
      <p><code>sent signal 47, val = 2</code></p>
      <p><code>sent signal 46, val = 0</code></p>
      <p><code>sent signal 46, val = 1</code></p>
      <p><code>sent signal 46, val = 2</code></p>
      <p><code>alpha % <emphasis>родительский процесс завершил работу, пауза 3 секунды.</emphasis></code></p>
      <p><code><emphasis>        пока дочерний процесс не разблокируетсигналы</emphasis></code></p>
      <p><code>received signal #46, code – –1, ival = 0 <emphasis>дочерний процесс получает сигналы</emphasis></code></p>
      <p><code>received signal #46, code = –1, ival = 1</code></p>
      <p><code>received signal #46, code = –1, ival = 2</code></p>
      <p><code>received signal #47, code – –1, ival = 0</code></p>
      <p><code>received signal #47, code = –1, ival = 1</code></p>
      <p><code>received signal #47, code = –1, ival = 2</code></p>
      <p><code>received signal #48, code = –1, ival = 0</code></p>
      <p><code>received signal #48, code = –1, ival = 1</code></p>
      <p><code>received signal #48, code = –1, ival = 2</code></p>
      <p>Девять сигналов помещаются в очередь и получаются адресатом в ожидаемом порядке: первым приходит сигнал с меньшим номером, а копии сигнала приходят в порядке FIFO.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Похоже, что в реализации Solaris 2.6 есть ошибка.</p>
      </cite>
     </section>
     <section>
      <title>
       <p>Функция signal<strong>_rt</strong></p>
      </title>
      <p>В книге [24, с. 120] мы привели пример собственной функции signal, вызывавшей функцию sigaction стандарта Posix для установки обработчика сигнала, обеспечивающего надежную семантику Posix. Изменим эту функцию, чтобы обеспечить поддержку реального времени. Новую функцию мы назовем signal_rt; ее текст приведен в листинге 5.15.</p>
      <subtitle>Листинг 5.15. Функция signal_rt с поддержкой реального времени</subtitle>
      <p><code>//lib/signal_rt.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  Sigfunc_rt *</code></p>
      <empty-line/>
      <p><code>3  signal_rt(int signo, Sigfunc_rt *func)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   struct sigaction act, oact;</code></p>
      <p><code>6   act.sa_sigaction = func; /* сохраняем адрес функции */</code></p>
      <p><code>7   sigemptyset(&amp;act.sa_mask);</code></p>
      <p><code>8   act.sa_flags = SA_SIGINFO; /* гарантирует режим реального времени */</code></p>
      <p><code>9   if (signo == SIGALRM) {</code></p>
      <p><code>10 #ifdef SA_INTERRUPT</code></p>
      <p><code>11   act.sa_flags |= SA_INTERRUPT; /* SunOS 4.x */</code></p>
      <p><code>12 #endif</code></p>
      <p><code>13  } else {</code></p>
      <p><code>14 #ifdef SA_RESTART</code></p>
      <p><code>15   act.sa_flags |= SA_RESTART; /* SVR4, 44BSD */</code></p>
      <p><code>16 #endif</code></p>
      <p><code>17  }</code></p>
      <p><code>18  if (sigaction(signo, &amp;act, &amp;oact) &lt; 0)</code></p>
      <p><code>19   return((Sigfunc_rt *) SIG_ERR);</code></p>
      <p><code>20  return(oact.sa_sigaction);</code></p>
      <p><code>21 }</code></p>
      <subtitle>Упрощение прототипа функции с использованием typedef</subtitle>
      <p>1-3 В нашем заголовочном файле unpiрс.h (листинг В.1) мы определяем Sigfunc_rt как</p>
      <p><code>typedef void Sigfunc_rt(int, siginfo_t*, void*);</code></p>
      <p>Ранее в этом разделе мы говорили о том, что это прототип функции для обработчика сигнала, устанавливаемого с флагом SA_SIGINFO.</p>
      <subtitle>Указание функции-обработчика</subtitle>
      <p>Структура sigaction претерпела изменения с добавлением поддержки сигна-5-7 лов реального времени: к ней было добавлено новое поле sa_sigaction:</p>
      <p><code>struct sigaction {</code></p>
      <p><code> void (*sa_handler)(); /* SIG_DFL, SIG_IGN или адрес обработчика сигнала */</code></p>
      <p><code> sigset_t sa_mask; /* дополнительные блокируемые сигналы */</code></p>
      <p><code> int sa_flags; /* параметры сигналов: SA_XXX */</code></p>
      <p><code> void (*sa_sigaction)(int, siginfo_t, void *);</code></p>
      <p><code>};</code></p>
      <p>Правила действуют следующие:</p>
      <p>&#9632; Если в поле sa_flags установлен флаг SA_SIGINFO, поле sa_sigaction указывает адрес функции-обработчика сигнала.</p>
      <p>&#9632; Если флаг SA_SIGINFO не установлен, поле sa_handler указывает адрес функции-обработчика сигнала.</p>
      <p>&#9632; Чтобы сопоставить сигналу действие по умолчанию или игнорировать его, следует установить sa_handler равным либо SIG_DFL, либо SIG_IGN и не устанавливать флаг SA_SIGINFO.</p>
      <subtitle>Установка SA_SIGINFO</subtitle>
      <p>8-17 Мы всегда устанавливаем флаг SA_SIGINFO и указываем флаг SA_RESTART, если перехвачен какой-либо другой сигнал, кроме SIGALRM.</p>
     </section>
    </section>
    <section>
     <title>
      <p>5.8. Реализация с использованием отображения в память</p>
     </title>
     <section>
      <p>Теперь рассмотрим реализацию очередей сообщений Posix с использованием отображения в память, взаимных исключений и условных переменных Posix. </p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Взаимные исключения и условные переменные описаны в главе 7, а ввод-вывод с отображением в память — в главах 12 и 13. Вы можете отложить данный раздел до ознакомления с этими главами.</p>
      </cite>
      <p>На рис. 5.2 приведена схема структур данных, которыми мы пользуемся для реализации очереди сообщений Posix. Изображенная очередь может содержать до четырех сообщений по 7 байт каждое.</p>
      <p>В листинге 5.16 приведен заголовочный файл mqueue.h, определяющий основные структуры, используемые в этой реализации.</p>
      <subtitle>Тип mqd_t</subtitle>
      <p>Дескриптор нашей очереди сообщений является просто указателем на структуру mq_infо. Каждый вызов mq_open выделяет память под одну такую структуру, а вызвавшему возвращается указатель на нее. Повторим, что дескриптор очереди сообщений не обязательно является небольшим целым числом, как дескриптор файла — единственное ограничение, накладываемое Posix, заключается в том, что этот тип данных не может быть массивом.</p>
      <subtitle>Листинг 5.16. Заголовочный файл mqueue.h</subtitle>
      <p><code>//my_pxmsg_mmap/mqueue.h</code></p>
      <p><code>1  typedef struct mymq_info *mymqd_t;</code></p>
      <empty-line/>
      <p><code>2  struct mymq_attr {</code></p>
      <p><code>3   long mq_flags; /* флаг очереди : O_NONBLOCK */</code></p>
      <p><code>4   long mq_maxmsg; /* максимальное количество сообщений в очереди */</code></p>
      <p><code>5   long mq_msgsize; /* максимальный размер сообщения в байтах */</code></p>
      <p><code>6   long mq_curmsgs; /* количество сообщений в очереди */</code></p>
      <p><code>7  };</code></p>
      <empty-line/>
      <p><code>8  /* одна структура mymq_hdr{} на очередь, в начале отображаемого файла */</code></p>
      <p><code>9  struct mymq_hdr {</code></p>
      <p><code>10  struct mymq_attr mqh_attr; /* атрибуты очереди */</code></p>
      <p><code>11  long mqh_head; /* индекс первого сообщения*/</code></p>
      <p><code>12  long mqh_free; /* индекс первого пустого сообщения */</code></p>
      <p><code>13  long mqh_nwait; /* количество заблокированных mq_receive() потоков */</code></p>
      <p><code>14  pid_t mqh_pid; /* ненулевой PID. если включено уведомление */</code></p>
      <p><code>15  struct sigevent mqh_event; /* для mq_notify() */</code></p>
      <p><code>16  pthread_mutex_t mqh_lock; /* блокировка: mutex*/</code></p>
      <p><code>17  pthread_cond_t mqh_wait; /* и условная переменная */</code></p>
      <p><code>18 };</code></p>
      <empty-line/>
      <p><code>19 /* один mymsg_hdr{} в начале каждого сообщения */</code></p>
      <p><code>20 struct mymsg_hdr {</code></p>
      <p><code>21  long msg_next; /* индекс следующего сообщения в списке */</code></p>
      <p><code>22                 /* msg_next должно быть первым полем в структуре */</code></p>
      <p><code>23  ssize_t msg_len; /* реальная длина */</code></p>
      <p><code>24  unsigned int msg_prio; /* приоритет */</code></p>
      <p><code>25 };</code></p>
      <empty-line/>
      <p><code>26 /* одна mymq_info{} выделяется при каждом mq_open() */</code></p>
      <p><code>27 struct mymq_info {</code></p>
      <p><code>28  struct mymq_hdr *mqi_hdr; /* начало отображаемого файла */</code></p>
      <p><code>29  long mqi_magic; /* магическое значение после инициализации */</code></p>
      <p><code>30  int mqi_flags; /* флаги для данного процесса */</code></p>
      <p><code>31 };</code></p>
      <p><code>32 #define MQI_MAGIC 0x98765432</code></p>
      <p><code>33 /* размер сообщения округляется для подгонки */</code></p>
      <p><code>34 #define MSGSIZE(i) ((((i) + sizeof(long)-1) / sizeof(long)) * sizeof(long))</code> </p>
      <image l:href="#Any2FbImgLoader113"/>
      <p>Рис. 5.2. Схема структур данных, используемых при реализации очередей сообщений posix через отображаемый в память файл </p>
      <empty-line/>
      <subtitle>Структура mq_hdr</subtitle>
      <p>8-18 Эта структура хранится в самом начале отображаемого файла и содержит всю информацию об очереди. Поле mq_flags структуры mqh_attr не используется, поскольку флаги (единственный определенный флаг используется для отключения блокировки) должны обрабатываться для каждого открывающего очередь процесса в отдельности, а не для очереди в целом. Поэтому флаги хранятся в структуре mq_info. О прочих полях этой структуры мы будем говорить в связи с их использованием различными функциями.</p>
      <p>Обратите внимание, что все переменные, называемые нами индексными (поля этой структуры mqh_head и mqh_free, а также поле msg_next следующей структуры), содержат индексы байтов относительно начала отображаемого в память файла. Например, размер структуры mq_hdr в системе Solaris 2.6 — 96 байт, поэтому индекс первого сообщения, располагающегося сразу за заголовком, имеет значение 96. Каждое сообщение на рис. 5.2 занимает 20 байт (12 байт на структуру msg_hdr и 8 байт на данные), поэтому индексы следующих трех сообщений имеют значения 116, 136 и 156, а размер отображаемого в память файла — 176 байт. Индексы используются для обработки двух связных списков, хранящихся в этом файле: в одном из списков (mqh_head) хранятся все сообщения, имеющиеся в данный момент в очереди, а в другом (mqh_free) — все незаполненные сообщения. Мы не можем использовать настоящие указатели на области памяти (адреса) при работе со списком, поскольку отображаемый файл может находиться в произвольной области памяти для каждого из процессов, работающих с ним (как показано в листинге 13.5).</p>
      <subtitle>Структура msg_hdr</subtitle>
      <p>19-25 Эта структура располагается в начале каждого сообщения в отображаемом файле. Любое сообщение может принадлежать либо к списку заполненных, либо к списку свободных сообщений, и поле msg_next содержит индекс следующего сообщения в этом списке (или 0, если сообщение является в этом списке последним). Переменная msg_len хранит реальную длину данных в сообщении, которая в нашем примере с рис. 5.2 может иметь значение от 0 до 7 байт включительно. В переменную msg_prio отправителем помещается значение приоритета сообщения.</p>
      <subtitle>Структура mq_info</subtitle>
      <p>26-32 Экземпляр такой структуры динамически создается функцией mq_open при открытии очереди и удаляется mq_close. Поле mqi_hdr указывает на отображаемый файл (адрес начала файла возвращается mmap). Указатель на эту структуру имеет основной в нашей реализации тип mqd_t, он принимает значение, возвращаемое mq_open.</p>
      <p>Поле mqi_magiс принимает значение MQI_MAGIC в момент инициализации структуры. Это значение проверяется всеми функциями, которым передается указатель типа mqd_t, что дает им возможность удостовериться, что указатель действительно указывает на структуру типа mq_infо. mqi_flags содержит флаг отключения блокировки для открывшего очередь процесса.</p>
      <subtitle>Макрос MSGSIZE</subtitle>
      <p>33-34 В целях выравнивания содержимого файла (alignment) мы располагаем начало каждого сообщения так, чтобы его индекс был кратен размеру длинного целого. Следовательно, если максимальный размер сообщения не допускает такого выравнивания, мы добавляем к нему от 1 до 3 байт, как показано на рис. 5.2. При этом предполагается, что размер длинного целого — 4 байт (что верно для Solaris 2.6). Если размер длинного целого 8 байт (в Digital Unix 4.0B), нам придется добавлять к каждому сообщению от 1 до 7 байт.</p>
     </section>
     <section>
      <title>
       <p>Функция mq_open</p>
      </title>
      <p>В листинге 5.17 приведен текст первой части функции mq_open, создающей новую очередь сообщений или открывающей существующую.</p>
      <subtitle>Листинг 5.17. Функция mq_open: первая часть</subtitle>
      <p><code>//my_pxmsg._mmap/mq_open. с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "mqueue.h"</code></p>
      <p><code>3  #include &lt;stdarg.h&gt;</code></p>
      <p><code>4  #define MAX_TRIES 10</code></p>
      <p><code>5  struct mymq_attr defattr =</code></p>
      <p><code>6   { 0, 128, 1024, 0 };</code></p>
      <empty-line/>
      <p><code>7  mymqd_t</code></p>
      <p><code>8  mymq_open(const char *pathname, int oflag, …)</code></p>
      <p><code>9  {</code></p>
      <p><code>10  int i, fd, nonblock, created, save_errno;</code></p>
      <p><code>11  long msgsize, filesize, index;</code></p>
      <p><code>12  va_list ap;</code></p>
      <p><code>13  mode_t mode;</code></p>
      <p><code>14  int8_t *mptr;</code></p>
      <p><code>15  struct stat statbuff;</code></p>
      <p><code>16  struct mymq_hdr *mqhdr;</code></p>
      <p><code>17  struct mymsg_hdr *msghdr;</code></p>
      <p><code>18  struct mymq_attr *attr;</code></p>
      <p><code>19  struct mymq_info *mqinfo;</code></p>
      <p><code>20  pthread_mutexattr_t mattr;</code></p>
      <p><code>21  pthread_condattr_t cattr;</code></p>
      <p><code>22  created = 0;</code></p>
      <p><code>23  nonblock = oflag &amp; O_NONBLOCK;</code></p>
      <p><code>24  oflag &amp;= ~O_NONBLOCK;</code></p>
      <p><code>25  mptr = (int8_t *) MAP_FAILED;</code></p>
      <p><code>26  mqinfo = NULL;</code></p>
      <p><code>27 again:</code></p>
      <p><code>28  if (oflag &amp; O_CREAT) {</code></p>
      <p><code>29   va_start(ap, oflag); /* ар инициализируется последним аргументом */</code></p>
      <p><code>30   mode = va_arg(ap, va_mode_t) &amp; ~S_IXUSR;</code></p>
      <p><code>31   attr = va_arg(ap, struct mymq_attr *);</code></p>
      <p><code>32   va_end(ap);</code></p>
      <p><code>33   /* открытие с установкой бита user-execute */</code></p>
      <p><code>34   fd = open (pathname, oflag | O_EXCL | O_RDWR, mode | S_IXUSR);</code></p>
      <p><code>35   if (fd &lt; 0) {</code></p>
      <p><code>36    if (errno == EEXIST &amp;&amp; (oflag &amp; O_EXCL) == 0)</code></p>
      <p><code>37     goto exists; /* уже существует, OK */</code></p>
      <p><code>38    else</code></p>
      <p><code>39     return((mymqd_t) –1);</code></p>
      <p><code>40   }</code></p>
      <p><code>41   created = 1;</code></p>
      <p><code>42   /* при создании файла он инициализируется */</code></p>
      <p><code>43   if (attr == NULL)</code></p>
      <p><code>44    attr = &amp;defattr;</code></p>
      <p><code>45   else {</code></p>
      <p><code>46    if (attr-&gt;mq_maxmsg &lt;– 0 || attr-&gt;mq_msgsize &lt;= 0) {</code></p>
      <p><code>47     errno = EINVAL;</code></p>
      <p><code>48     goto err;</code></p>
      <p><code>49    }</code></p>
      <p><code>50   }</code></p>
      <subtitle>Обработка списка аргументов переменного размера</subtitle>
      <p>29-32 Функция может быть вызвана либо с двумя, либо с четырьмя аргументами в зависимости от того, указан ли флаг O_CREAT. Если флаг указан, третий аргумент имеет тип mode_t, а это простой системный тип, являющийся одним из целых типов. При этом мы столкнемся с проблемой в BSD/OS, где этот тип данных определен как unsigned short (16 бит). Поскольку целое в этой реализации занимает 32 бита, компилятор С увеличивает аргумент этого типа с 16 до 32 бит, потому что все короткие целые в списке аргументов увеличиваются до обычных целых. Но если мы укажем mode_t при вызове va_arg, он пропустит 16 бит аргумента в стеке, если этот аргумент был увеличен до 32 бит. Следовательно, мы должны определить свой собственный тип данных, va_mode_t, который будет целым в BSD/OS и типом mode_t в других системах. Эту проблему с переносимостью решают приведенные ниже строки нашего заголовка unpipc.h (листинг В.1):</p>
      <p><code>#ifdef __bsdi__</code></p>
      <p><code>#define va_mode_t int</code></p>
      <p><code>#else</code></p>
      <p><code>#define va_mode_t mode_t</code></p>
      <p><code>#endif</code></p>
      <p>30 Мы сбрасываем бит user-execute (S_IXUSR) в переменной mode по причинам, которые будут вскоре раскрыты.</p>
      <subtitle>Создание новой очереди сообщений</subtitle>
      <p>33-34 Создается обычный файл с именем, указанным при вызове функции, и устанавливается бит user-execute. </p>
      <subtitle>Обработка потенциальной ситуации гонок</subtitle>
      <p>35-40 Если бы при указании флага O_CREAT мы просто открыли файл, отобразили его содержимое в память и проинициализировали отображенный файл (как будет описано ниже), у нас возникла бы ситуация гонок. Очередь сообщений инициализируется mq_open только в том случае, если вызывающий процесс указывает флаг O_CREAT и очередь сообщений еще не существует. Это означает, что нам нужно каким-то образом определять, существует она или нет. Для этого при открытии файла для последующего отображения в память мы всегда указываем флаг O_EXCL. Возвращение ошибки EEXIST функцией open является ошибкой для mq_open только в том случае, если при вызове был указан флаг O_EXCL. В противном случае при возвращении функцией open ошибки EEXIST мы делаем вывод, что файл уже существует, и переходим к листингу 5.19, как если бы флаг O_CREAT вовсе не был указан.</p>
      <p>Ситуация гонок может возникнуть потому, что использование отображаемого в память файла для реализации очереди сообщений требует двух шагов при инициализации очереди: сначала файл должен быть создан функцией open, а затем его содержимое должно быть проинициализировано. Проблема возникает, если два потока (одного или различных процессов) вызывают mq_open приблизительно одновременно. Один из потоков может создать файл, после чего управление будет передано системой второму потоку, прежде чем первый завершит инициализацию файла. Второй поток обнаружит, что файл уже существует (вызвав open с флагом O_EXCL), и приступит к использованию очереди сообщений.</p>
      <p>Мы используем бит user-execute для указания того, был ли проинициализирован файл с очередью сообщений. Этот бит устанавливается только тем потоком, который создает этот файл (флаг O_EXCL позволяет определить этот поток); этот поток инициализирует файл с очередью сообщений, а затем сбрасывает бит user-execute.</p>
      <p>Аналогичная ситуация может возникнуть в листингах 10.28 и 10.37.</p>
      <subtitle>Проверка атрибутов</subtitle>
      <p>42-50 Если при вызове в качестве последнего аргумента передан нулевой указатель, очередь сообщений инициализируется со значениями атрибутов по умолчанию: 128 сообщений в очереди и 1024 байта на сообщение. Если атрибуты указаны явно, мы проверяем, что mq_maxmsg и mq_msgsize имеют положительные значения.</p>
      <p>Вторая часть функции mq_open приведена в листинге 5.18. Она завершает инициализацию новой очереди сообщений.</p>
      <subtitle>Листинг 5.18. Вторая часть функции mq_open: инициализация новой очереди</subtitle>
      <p><code>//my_pxmsg_mmap/mq_open.с</code></p>
      <p><code>51    /* вычисление и установка размера файла */</code></p>
      <p><code>52    msgsize = MSGSIZE(attr-&gt;mq_msgsize);</code></p>
      <p><code>53    filesize = sizeof(struct mymq_hdr) + (attr-&gt;mq_maxmsg *</code></p>
      <p><code>54     (sizeof(struct mymsg_hdr) + msgsize));</code></p>
      <p><code>55    if (lseek(fd, filesize – 1, SEEK_SET) == –1)</code></p>
      <p><code>56     goto err;</code></p>
      <p><code>57    if (write(fd, "", 1) == –1)</code></p>
      <p><code>58     goto err;</code></p>
      <p><code>59    /* отображение файла в память */</code></p>
      <p><code>60    mptr = mmap(NULL, filesize, PROT_READ | PROT_WRITE,</code></p>
      <p><code>61     MAP_SHARED, fd, 0);</code></p>
      <p><code>62    if (mptr == MAP_FAILED)</code></p>
      <p><code>63     goto err;</code></p>
      <p><code>64    /* выделение структуры mymq_info{} для очереди */</code></p>
      <p><code>65    if ((mqinfo = mallос (sizeof (struct mymq_info))) == NULL)</code></p>
      <p><code>66     goto err;</code></p>
      <p><code>67    mqinfo-&gt;mqi_hdr = mqhdr = (struct mymq_hdr *) mptr;</code></p>
      <p><code>68    mqinfo-&gt;mqi_magic = MQI_MAGIC;</code></p>
      <p><code>69    mqinfo-&gt;mqi_flags = nonblock;</code></p>
      <p><code>70    /* инициализация заголовка в начале файла */</code></p>
      <p><code>71    /* создание списка пустых сообщений */</code></p>
      <p><code>72    mqhdr-&gt;mqh_attr.mq_flags = 0;</code></p>
      <p><code>73    mqhdr-&gt;mqh_attr.mq_maxmsg = attr-&gt;mq_maxmsg;</code></p>
      <p><code>74    mqhdr-&gt;mqh_attr.mq_msgsize = attr-&gt;mq_msgsize;</code></p>
      <p><code>75    mqhdr-&gt;mqh_attr.mq_curmsgs = 0;</code></p>
      <p><code>76    mqhdr-&gt;mqh_nwait = 0;</code></p>
      <p><code>77    mqhdr-&gt;mqh_pid = 0;</code></p>
      <p><code>78    mqhdr-&gt;mqh_head = 0;</code></p>
      <p><code>79    index = sizeof(struct mymq_hdr);</code></p>
      <p><code>80    mqhdr-&gt;mqh_free = index;</code></p>
      <p><code>81    for (i = 0; i &lt; attr-&gt;mq_maxmsg – 1; i++) {</code></p>
      <p><code>82     msghdr = (struct mymsg_hdr *) &amp;mptr[index];</code></p>
      <p><code>83     index += sizeof(struct mymsg_hdr) + msgsize;</code></p>
      <p><code>84     msghdr-&gt;msg_next = index;</code></p>
      <p><code>85    }</code></p>
      <p><code>86    msghdr = (struct mymsg_hdr *) &amp;mptr[index];</code></p>
      <p><code>87    msghdr-&gt;msg_next = 0; /* конец списка пустых сообщений */</code></p>
      <p><code>88    /* инициализация взаимного исключения и условной переменной */</code></p>
      <p><code>89    if ((i = pthread_mutexattr_init(&amp;mattr)) != 0)</code></p>
      <p><code>90     goto pthreaderr;</code></p>
      <p><code>91    pthread_mutexattr_setpshared(&amp;mattr, PTHREAD_PROCESS_SHARED);</code></p>
      <p><code>92    i = pthread_mutex_init(&amp;mqhdr-&gt;mqh_lock, &amp;mattr);</code></p>
      <p><code>93    pthread_mutexattr_destroy(&amp;mattr); /* обязательно нужно удалить */</code></p>
      <p><code>94    if (i != 0)</code></p>
      <p><code>95     goto pthreaderr:</code></p>
      <p><code>96    if ((i = pthread_condattr_init(&amp;cattr)) != 0)</code></p>
      <p><code>97     goto pthreaderr;</code></p>
      <p><code>98    pthread_condattr_setpshared(&amp;cattr, PTHREAD_PROCESS_SHARED);</code></p>
      <p><code>99    i = pthread_cond_init(&amp;mqhdr-&gt;mqh_wait, &amp;cattr);</code></p>
      <p><code>100   pthread_condattr_destroy(&amp;cattr); /* обязательно нужно удалить */</code></p>
      <p><code>101   if (i != 0)</code></p>
      <p><code>102    goto pthreaderr;</code></p>
      <p><code>103   /* инициализация завершена, снимаем бит user-execute */</code></p>
      <p><code>104   if (fchmod(fd, mode) == –1)</code></p>
      <p><code>105    goto err;</code></p>
      <p><code>106   close(fd);</code></p>
      <p><code>107   return((mymqd_t) mqinfo);</code></p>
      <p><code>108  }</code></p>
      <subtitle>Установка размера файла</subtitle>
      <p>51-58 Вычисляется размер сообщения, который затем округляется до кратного размеру длинного целого. Также в файле отводится место для структуры mq_hdr в начале файла и msghdr в начале каждого сообщения (рис. 5.2). Размер вновь созданного файла устанавливается функцией lseek и записью одного байта со значением 0. Проще было бы вызвать ftruncate (раздел 13.3), но у нас нет гарантий, что это сработало бы для увеличения размера файла.</p>
      <subtitle>Отображение файла в память</subtitle>
      <p>59-63 Файл отображается в память функцией mmap.</p>
      <subtitle>Выделение памяти под структуру mq_info</subtitle>
      <p>64-66 При каждом вызове mq_open создается отдельный экземпляр mq_infо. Эта структура после создания инициализируется.</p>
      <subtitle>Инициализация структуры mq_hdr</subtitle>
      <p>67-87 Инициализируется структура mq_hdr. Заголовок связного списка сообщений (mqh_head) инициализируется нулем, а все сообщения в очереди добавляются к списку свободных (mqh_frее).</p>
      <subtitle>Инициализация взаимного исключения и условной переменной</subtitle>
      <p>88-102 Поскольку очереди сообщений Posix могут использоваться совместно произвольным количеством процессов, которые знают имя очереди и имеют соответствующие разрешения, нам нужно инициализировать взаимное исключение и условную переменную с атрибутом PTHREAD_PROCESS_SHARED. Для этого мы сначала инициализируем атрибуты вызовом pthread_mutexattr_init, а затем устанавливаем значение атрибута совместного использования процессами, вызвав pthread_mutexattr_setpshared. После этого взаимное исключение инициализируется вызовом pthread_mutex_init. Аналогичные действия выполняются для условной переменной. Мы должны аккуратно удалить взаимное исключение и условную переменную даже при возникновении ошибки, поскольку вызовы pthread_ mutexattr_init и pthread_condattr_init выделяют под них память (упражнение 7.3).</p>
      <subtitle>Сброс бита user-execute</subtitle>
      <p>103-107 После инициализации очереди сообщений мы сбрасываем бит user-execute. Это говорит другим процессам о том, что очередь была проинициализирована. Мы также закрываем файл вызовом close, поскольку он был успешно отображен в память и держать его открытым больше нет необходимости.</p>
      <p>В листинге 5.19 приведен конец функции mq_open, в котором осуществляется открытие существующей очереди сообщений.</p>
      <subtitle>Листинг 5.19. Третья часть функции mq_open: открытие существующей очереди сообщений</subtitle>
      <p><code>//my_pxmsg_mmap/mq_open<strong>.</strong>с</code></p>
      <p><code>109 exists:</code></p>
      <p><code>110  /* открытие файла и отображение его в память */</code></p>
      <p><code>111  if ((fd = open(pathname, O_RDWR)) &lt; 0) {</code></p>
      <p><code>112   if (errno == ENOENT &amp;&amp; (oflag &amp; O_CREAT))</code></p>
      <p><code>113    goto again;</code></p>
      <p><code>114  goto err;</code></p>
      <p><code>115  }</code></p>
      <p><code>116  /* проверяем, что инициализация завершена */</code></p>
      <p><code>117  for (i = 0; i &lt; MAX TRIES; i++) {</code></p>
      <p><code>118   if (stat(pathname, &amp;statbuff) == –1) {</code></p>
      <p><code>119    if (errno == ENOENT &amp;&amp; (oflag &amp; O_CREAT)) {</code></p>
      <p><code>120     close(fd);</code></p>
      <p><code>121     goto again;</code></p>
      <p><code>122    }</code></p>
      <p><code>123    goto err;</code></p>
      <p><code>124   }</code></p>
      <p><code>125   if ((statbuff.st_mode &amp; S_IXUSR) == 0)</code></p>
      <p><code>126   break;</code></p>
      <p><code>127   sleep(1);</code></p>
      <p><code>128  }</code></p>
      <p><code>129  if (i == MAX_TRIES) {</code></p>
      <p><code>130   errno = ETIMEDOUT;</code></p>
      <p><code>131   goto err;</code></p>
      <p><code>132  }</code></p>
      <p><code>133  filesize = statbuff.st_size;</code></p>
      <p><code>134  mptr = mmap(NULL, filesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</code></p>
      <p><code>135  if (mptr == MAP_FAILED)</code></p>
      <p><code>136   goto err;</code></p>
      <p><code>137  close(fd);</code></p>
      <p><code>138  /* выделяем одну mymq_info{} для каждого вызова open */</code></p>
      <p><code>139  if ((mqinfo = malloc(sizeof(struct mymq_info))) == NULL)</code></p>
      <p><code>140   goto err;</code></p>
      <p><code>141  rnqinfo-&gt;mqi_hdr = (struct mymq_hdr *) mptr;</code></p>
      <p><code>142  mqinfo-&gt;mqi_magic = MQI_MAGIC;</code></p>
      <p><code>143  mqinfo-&gt;mqi_flags = nonblock;</code></p>
      <p><code>144  return((mymqd_t) mqinfo);</code></p>
      <p><code>145 pthreaderr:</code></p>
      <p><code>146  errno = i;</code></p>
      <p><code>147 err:</code></p>
      <p><code>148  /* не даем следующим вызовам изменить errno */</code></p>
      <p><code>149  save_errno = errno;</code></p>
      <p><code>150  if (created)</code></p>
      <p><code>151   unlink(pathname);</code></p>
      <p><code>152  if (mptr != MAP_FAILED)</code></p>
      <p><code>153   munmap(mptr, filesize);</code></p>
      <p><code>154  if (mqinfo != NULL)</code></p>
      <p><code>155   free(mqinfo);</code></p>
      <p><code>156  close(fd);</code></p>
      <p><code>157  errno = save_errno;</code></p>
      <p><code>158  return((mymqd_t) –1);</code></p>
      <p><code>159 }</code></p>
      <subtitle>Открытие существующей очереди сообщений</subtitle>
      <p>109-115 Здесь мы завершаем работу, если флаг O_CREAT не был указан или если он был указан, но очередь уже существовала. В любом случае, мы открываем существующую очередь сообщений. Для этого мы открываем для чтения и записи файл, в котором она содержится, функцией open и отображаем его содержимое в адресное пpocтрaнcтвo процесса (mmap).</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Наша реализация сильно упрощена в том, что касается режима открытия файла. Даже если вызвавший процесс указывает флаг O_RDONLY, мы должны дать возможность доступа для чтения и записи при открытии файла командой open и при отображении его в память командой mmap, поскольку невозможно считать сообщение из очереди, не изменив содержимое файла. Аналогично невозможно записать сообщение в очередь, не имея доступа на чтение. Обойти эту проблему можно, сохранив режим открытия (O_RDONLY, O_WRONLY, O_RDWR) в структуре mq_info и проверяя этот режим в каждой из функций. Например, mq_receive должна возвращать ошибку, если в mq_info хранится значение O_WRONLY.</p>
      </cite>
      <subtitle>Проверка готовности очереди</subtitle>
      <p>116-132 Нам необходимо дождаться, когда очередь будет проинициализирована (в случае, если несколько потоков сделают попытку открыть ее приблизительно одновременно). Для этого мы вызываем stat и проверяем разрешения доступа к файлу (поле st_mode структуры stat). Если бит user-execute сброшен, очередь уже проинициализирована.</p>
      <p>Этот участок кода обрабатывает другую возможную ситуацию гонок. Предположим, что два потока разных процессов попытаются открыть очередь приблизительно одновременно. Первый поток создает файл и блокируется при вызове lseek в листинге 5.18. Второй поток обнаруживает, что файл уже существует, и переходит к метке exists, где он вновь открывает файл функцией open и при этом блокируется. Затем продолжается выполнение первого потока, но его вызов mmap в листинге 5.18 не срабатывает (возможно, он превысил лимит использования памяти), поэтому он переходит на метку err и удаляет созданный файл вызовом unlink. Продолжается выполнение второго потока, но если бы мы вызывали fstat вместо stat, он бы вышел по тайм-ауту в цикле for, ожидая инициализации файла. Вместо этого мы вызываем stat, которая возвращает ошибку, если файл не существует, и, если флаг O_CREAT был указан при вызове mq_open, мы переходим на метку again (листинг 5.17) для повторного создания файла. Эта ситуация гонок заставляет нас также проверять, не возвращается ли при вызове open ошибка ENOENT.</p>
      <subtitle>Отображение файла в память; создание и инициализация структуры mq_info</subtitle>
      <p>133-144 Файл отображается в память, после чего его дескриптор может быть закрыт. Затем мы выделяем место под структуру mq_infо и инициализируем ее. Возвращаемое значение представляет собой указатель на эту структуру.</p>
      <subtitle>Обработка ошибок</subtitle>
      <p>145-148 При возникновении ошибок происходит переход к метке err, а переменной errno присваивается значение, которое должно быть возвращено функцией mq_open. Мы аккуратно вызываем функции для очистки памяти от выделенных объектов, чтобы переменная errno не изменила свое значение в случае возникновения ошибки в этих функциях.</p>
     </section>
     <section>
      <title>
       <p>Функция mq_close</p>
      </title>
      <p>В листинге 5.20 приведен текст нашей функции mq_close.</p>
      <subtitle>Листинг 5.20. Функция mq_close</subtitle>
      <p><code>//my_pxmsg_mmap/mq_close.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "mqueue.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mymq_close(mymqd_t mqd)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   long msgsize, filesize:</code></p>
      <p><code>7   struct mymq_hdr *mqhdr;</code></p>
      <p><code>8   struct mymq_attr *attr;</code></p>
      <p><code>9   struct mymq_info *mqinfo;</code></p>
      <p><code>10  mqinfo = mqd;</code></p>
      <p><code>11  if (mqinfo-&gt;mqi_magic != MQI_MAGIC) {</code></p>
      <p><code>12   errno = EBADF;</code></p>
      <p><code>13   return(-1);</code></p>
      <p><code>14  }</code></p>
      <p><code>15  mqhdr = mqinfo-&gt;mqi_hdr;</code></p>
      <p><code>16  attr = &amp;mqhdr-&gt;mqh_attr;</code></p>
      <p><code>17  if (mymq_notify(mqd, NULL) != 0) /* снятие вызвавшего процесса с регистрации */</code></p>
      <p><code>18   return(-1);</code></p>
      <p><code>19  msgsize = MSGSIZE(attr-&gt;mq_msgsize);</code></p>
      <p><code>20  filesize = sizeof(struct mymq_hdr) + (attr-&gt;mq_maxmsg *</code></p>
      <p><code>21   (sizeof(struct mymsg_hdr) + msgsize));</code></p>
      <p><code>22  if (munmap(mqinfo-&gt;mqi_hdr, filesize) == –1)</code></p>
      <p><code>23   return(-1);</code></p>
      <p><code>24  mqinfo-&gt;mqi_magic = 0; /* на всякий случай */</code></p>
      <p><code>25  free(mqinfo);</code></p>
      <p><code>26  return(0);</code></p>
      <p><code>27 }</code></p>
      <subtitle>Получение указателей на структуры</subtitle>
      <p>10-16 Проверяется правильность переданных аргументов, после чего получаются указатели на область, занятую отображенным в память файлом (mqhdr), и атрибуты (в структуре mq_hdr).</p>
      <subtitle>Сброс регистрации вызвавшего процесса</subtitle>
      <p>17-18 Для сброса регистрации на уведомление вызвавшего процесса мы вызываем mq_notify. Если процесс был зарегистрирован, он будет снят с уведомления, но если нет — ошибка не возвращается.</p>
      <subtitle>Отключение отображения файла и освобождение памяти</subtitle>
      <p>19-25 Мы вычисляем размер файла для вызова munmap и освобождаем память, используемую структурой mqinfo. На случай, если вызвавший процесс будет продолжать использовать дескриптор очереди сообщений, до того как область памяти будет вновь задействована вызовом malloc, мы устанавливаем значение mq_magiс в ноль, чтобы наши функции для работы с очередью сообщений обнаруживали ошибку.</p>
      <p>Обратите внимание, что если процесс завершает работу без вызова mq_close, эти же операции выполняются автоматически: отключается отображение в память, а память освобождается.</p>
     </section>
     <section>
      <title>
       <p>Функция mq_unlink</p>
      </title>
      <p>Текст функции mqunlink приведен в листинге 5.21. Она удаляет файл, связанный с очередью сообщений, вызывая функцию unlink.</p>
      <subtitle>Листинг 5.21. Функция mq_unlink</subtitle>
      <p><code>//my_pxmsg_mmap/mq_unlink.с</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <p><code>2 #include "mqueue.h"</code></p>
      <empty-line/>
      <p><code>3 int</code></p>
      <p><code>4 mymq_unlink(const char *pathname)</code></p>
      <p><code>5 {</code></p>
      <p><code>6  if (unlink(pathname) == –1)</code></p>
      <p><code>7   return(-1);</code></p>
      <p><code>8  return(0);</code></p>
      <p><code>9 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция mq_getattr</p>
      </title>
      <p>В листинге 5.22 приведен текст функции mq_getattr, которая возвращает текущее значение атрибутов очереди.</p>
      <subtitle>Листинг 5.22. Функция mq_getattr</subtitle>
      <p><code>//my_pxmsg_mmap/mq_getattr.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "mqueue.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mymq_getattr(mymqd_t mqd, struct mymq_attr *mqstat)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int n;</code></p>
      <p><code>7   struct mymq_hdr *mqhdr;</code></p>
      <p><code>8   struct mymq_attr *attr;</code></p>
      <p><code>9   struct mymq_info *mqinfo;</code></p>
      <p><code>10  mqinfo = mqd;</code></p>
      <p><code>11  if (mqinfo-&gt;mqi_magic != MQI_MAGIC) {</code></p>
      <p><code>12   errno = EBADF;</code></p>
      <p><code>13   return(-1);</code></p>
      <p><code>14  }</code></p>
      <p><code>15  mqhdr = mqinfo-&gt;mqi_hdr;</code></p>
      <p><code>16  attr = &amp;mqhdr-&gt;mqh_attr;</code></p>
      <p><code>17  if ((n = pthread_mutex_lock(&amp;mqhdr-&gt;mqh_lock)) != 0) {</code></p>
      <p><code>18   errno = n;</code></p>
      <p><code>19   return (-1);</code></p>
      <p><code>20  }</code></p>
      <p><code>21  mqstat-&gt;mq_flags = mqinfo-&gt;mqi_flags; /* для каждого open */</code></p>
      <p><code>22  mqstat-&gt;mq_maxmsg = attr-&gt;mq_maxmsg; /* оставшиеся три – для очереди */</code></p>
      <p><code>23  mqstat-&gt;mq_msgsize = attr-&gt;mq_msgsize;</code></p>
      <p><code>24  mqstat-&gt;mq_curmsgs = attr-&gt;mq_curmsgs;</code></p>
      <p><code>25  pthread_mutex_unlock(&amp;mqhdr-&gt;mqh_lock);</code></p>
      <p><code>26  return(0);</code></p>
      <p><code>27 }</code></p>
      <subtitle>Блокирование взаимного исключения</subtitle>
      <p>17-20 Мы должны заблокировать соответствующее взаимное исключение для работы с очередью, в частности для получения атрибутов, поскольку какой-либо другой поток может в это время их изменить.</p>
     </section>
     <section>
      <title>
       <p>Функция mq_setattr</p>
      </title>
      <p>В листинге 5.23 приведен текст функции mq_setattr, которая устанавливает значение атрибутов очереди.</p>
      <subtitle>Считывание текущих атрибутов</subtitle>
      <p>22-27 Если третий аргумент представляет собой ненулевой указатель, мы возвращаем предыдущее значение атрибутов перед внесением каких-либо изменений.</p>
      <subtitle>Изменение mq_flags</subtitle>
      <p>28-31 Единственный атрибут, который можно менять с помощью нашей функции, — mq_flags, хранящийся в структуре mq_infо.</p>
      <subtitle>Листинг 5.23. Функция mq_setattr</subtitle>
      <p><code>//my_pxmsg_mniap/mq_setattr.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "mqueue.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mymq_setattr(mymqd_t mqd. const struct mymq_attr *mqstat,</code></p>
      <p><code>5   struct mymq attr *omqstat)</code></p>
      <p><code>6  {</code></p>
      <p><code>7   int n;</code></p>
      <p><code>8   struct mymq_hdr *mqhdr;</code></p>
      <p><code>9   struct mymq_attr *attr;</code></p>
      <p><code>10  struct mymq_info *mqinfo;</code></p>
      <p><code>11  mqinfo = mqd;</code></p>
      <p><code>12  if (mqinfo-&gt;mqi_magic != MQI_MAGIC) {</code></p>
      <p><code>13   errno = EBADF;</code></p>
      <p><code>14   return(-1);</code></p>
      <p><code>15  }</code></p>
      <p><code>16  mqhdr = mqinfo-&gt;mqi_hdr;</code></p>
      <p><code>17  attr = &amp;mqhdr-&gt;mqh_attr;</code></p>
      <p><code>18  if ((n = pthread_mutex_lock(&amp;mqhdr-&gt;mqh_lock)) ! = 0) {</code></p>
      <p><code>19   errno = n;</code></p>
      <p><code>20   return(-1);</code></p>
      <p><code>21  }</code></p>
      <p><code>22  if (omqstat != NULL) {</code></p>
      <p><code>23   omqstat-&gt;mq_flags = mqinfo-&gt;mqi_flags; /* исходные атрибуты */</code></p>
      <p><code>24   omqstat-&gt;mq_maxmsg = attr-&gt;mq_maxmsg;</code></p>
      <p><code>25   omqstat-&gt;mq_msgsize = attr-&gt;mq_msgsize;</code></p>
      <p><code>26   omqstat-&gt;mq_curmsgs = attr-&gt;mq_curmsgs; /* текущий статус */</code></p>
      <p><code>27  }</code></p>
      <p><code>28  if (mqstat-&gt;mq_flags &amp; O_NONBLOCK)</code></p>
      <p><code>29   mqinfo-&gt;mqi flags |= O_NONBLOCK;</code></p>
      <p><code>30  else</code></p>
      <p><code>31   mqinfo-&gt;ntqi_flags &amp;= ~O_NONBLOCK;</code></p>
      <p><code>32  pthread_mutex_unlock(&amp;mqhdr-&gt;mqh_lock);</code></p>
      <p><code>33  return(0);</code></p>
      <p><code>34 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция mq_notify</p>
      </title>
      <p>Функция mq_notify, текст которой приведен в листинге 5.24, позволяет регистрировать процесс на уведомление для текущей очереди и снимать его с регистрации. Информация о зарегистрированных процессах (их идентификаторы) хранится в поле mqh_pid структуры mq_hdr. Только один процесс может быть зарегистрирован на уведомление в любой момент времени. При регистрации процесса мы сохраняем его структуру sigevent в структуре mqh_event.</p>
      <subtitle>Листинг 5.24. Функция mq_notify</subtitle>
      <p><code>//my_pxmsg_mmap/mq_notify.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "mqueue.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mymq_notify(mymqd_t mqd, const struct sigevent *notification)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int n;</code></p>
      <p><code>7   pid_t pid;</code></p>
      <p><code>8   struct mymq_hdr *mqhdr;</code></p>
      <p><code>9   struct mymq_info *mqinfo;</code></p>
      <p><code>10  mqinfo = mqd;</code></p>
      <p><code>11  if (mqinfo-&gt;mqi magic != MQI_MAGIC) {</code></p>
      <p><code>12   errno = EBADF;</code></p>
      <p><code>13   return(-1);</code></p>
      <p><code>14  }</code></p>
      <p><code>15  mqhdr = mqinfo-&gt;mqi_hdr;</code></p>
      <p><code>16  if ((n = pthread_mutex_lock(&amp;mqhdr-&gt;mqh_lock)) != 0) {</code></p>
      <p><code>17   errno = n;</code></p>
      <p><code>18   return(-1);</code></p>
      <p><code>19  }</code></p>
      <p><code>20  pid = getpid();</code></p>
      <p><code>21  if (notification == NULL) {</code></p>
      <p><code>22   if (mqhdr-&gt;mqh_pid == pid) {</code></p>
      <p><code>23    mqhdr-&gt;mqh_pid = 0; /* снятие вызвавшего процесса с регистрации */</code></p>
      <p><code>24   } /* если вызвавший процесс не зарегистрирован – 61К */</code></p>
      <p><code>25  } else {</code></p>
      <p><code>26   if (mqhdr-&gt;mqh_pid != 0) {</code></p>
      <p><code>27    if (kill(mqhdr-&gt;mqh_pid, 0) != –1 || errno != ESRCH) {</code></p>
      <p><code>28     errno = EBUSY;</code></p>
      <p><code>29     goto err;</code></p>
      <p><code>30    }</code></p>
      <p><code>31   }</code></p>
      <p><code>32   mqhdr-&gt;mqh_pid = pid;</code></p>
      <p><code>33   mqhdr-&gt;mqh_event = *notification;</code></p>
      <p><code>34  }</code></p>
      <p><code>35  pthread_mutex_unlock(&amp;mqhdr-&gt;mqh_lock);</code></p>
      <p><code>36  return(0);</code></p>
      <p><code>37 err:</code></p>
      <p><code>38  pthread_mutex_unlock(&amp;mqhdr-&gt;mqh_lock);</code></p>
      <p><code>39  return(-1);</code></p>
      <p><code>40 }</code></p>
      <subtitle>Снятие процесса с регистрации</subtitle>
      <p>20-24 Если второй аргумент представляет собой нулевой указатель, вызвавший процесс снимается с регистрации. Если он не зарегистрирован, никакой ошибки не возвращается.</p>
      <subtitle>Регистрация вызвавшего процесса</subtitle>
      <p>25-34 Если какой-либо процесс уже зарегистрирован, мы проверяем, существует ли он, отправкой ему сигнала с кодом 0 (называемого нулевым сигналом — null signal). Это обычная проверка на возможность ошибки, на самом деле при этом никакого сигнала процессу не отправляется, но при его отсутствии возвращается ошибка с кодом ESRCH. Если какой-либо процесс уже зарегистрирован на уведомление, функция возвращает ошибку EBUSY. В противном случае сохраняется идентификатор процесса вместе с его структурой sigevent.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Наш метод проверки существования вызвавшего процесса не идеален. Процесс мог завершить работу, а его идентификатор мог быть использован другим процессом.</p>
      </cite>
     </section>
     <section>
      <title>
       <p>Функция mq_send</p>
      </title>
      <p>В листинге 5.25 приведен текст первой половины нашей функции mqsend.</p>
      <subtitle>Инициализация</subtitle>
      <p>14-29 Мы получаем указатели на используемые структуры и блокируем взаимное исключение для данной очереди. Проверяем, не превышает ли размер сообщения максимально допустимый для данной очереди.</p>
      <subtitle>Проверка очереди на пустоту и отправка уведомления</subtitle>
      <p>30-38 Если мы помещаем первое сообщение в пустую очередь, нужно проверить, не зарегистрирован ли какой-нибудь процесс на уведомление об этом событии и нет ли потоков, заблокированных в вызове mq_receive. Для проверки второго условия мы воспользуемся сохраняемым функцией mq_receive счетчиком mqh_nwait, содержащим количество потоков, заблокированных в вызове mq_receive. Если этот счетчик имеет ненулевое значение, мы не отправляем уведомление зарегистрированному процессу. Для отправки сигнала SIGEV_SIGNAL используется функция sigqueue. Затем процесс снимается с регистрации.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Вызов sigqueue для отправки сигнала приводит к передаче сигнала SI_QUEUE обработчику сигнала в структуре типа siginfo_t (раздел 5.7), что неправильно. Отправка правильного значения si_code (а именно SI_MESGQ) из пользовательского процесса осуществляется в зависимости от реализации. На с. 433 стандарта IEEE 1996 [8] отмечается, что для отправки этого сигнала из пользовательской библиотеки необходимо воспользоваться скрытым интерфейсом механизма отправки сигналов. </p>
      </cite>
      <subtitle>Проверка заполненности очереди</subtitle>
      <p>39-48 Если очередь переполнена и установлен флаг O_NONBLOCK, мы возвращаем ошибку с кодом EAGAIN. В противном случае мы ожидаем сигнала по условной переменной mqh_wait, который, как мы увидим, отправляется функцией mq_receive при считывании сообщения из переполненной очереди.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Наша реализация упрощает ситуацию с возвращением ошибки EINTR при прерывании вызова mq_send сигналом, перехватываемым вызвавшим процессом. Проблема в том, что функция pthread_cond_wait не возвращает ошибки при возврате из обработчика сигнала: она может вернуть либо 0 (что рассматривается как ложное пробуждение), либо вообще не завершить работу. Все эти проблемы можно обойти, но это непросто. </p>
      </cite>
      <p>В листинге 5.26 приведена вторая половина функции mq_send. К моменту ее выполнения мы уже знаем о наличии в очереди свободного места для нашего сообщения.</p>
      <subtitle>Листинг 5.25. Функция mq_send: первая половина</subtitle>
      <p><code>//my_pxmsg_mmap/mq_send.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "mqueue.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mymq_send(mymqd_t mqd, const char *ptr, size_t len, unsigned int prio)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int n;</code></p>
      <p><code>7   long index, freeindex;</code></p>
      <p><code>8   int8_t *mptr;</code></p>
      <p><code>9   struct sigevent *sigev;</code></p>
      <p><code>10  struct mymq_hdr *mqhdr;</code></p>
      <p><code>11  struct mymq_attr *attr;</code></p>
      <p><code>12  struct mymsg_hdr *msghdr, *nmsghdr, *pmsghdr;</code></p>
      <p><code>13  struct mymq_info *mqinfo;</code></p>
      <p><code>14  mqinfo = mqd;</code></p>
      <p><code>15  if (mqinfo-&gt;mqi_magic != MQI_MAGIC) {</code></p>
      <p><code>16   errno = EBADF;</code></p>
      <p><code>17   return(-1);</code></p>
      <p><code>18  }</code></p>
      <p><code>19  mqhdr = mqinfo-&gt;mqi_hdr; /* указатель типа struct */</code></p>
      <p><code>20  mptr = (int8_t *) mqhdr; /* указатель на байт */</code></p>
      <p><code>21  attr = &amp;mqhdr-&gt;mqh_attr;</code></p>
      <p><code>22  if ((n = pthread_mutex_lock(&amp;mqhdr-&gt;mqh_lock)) != 0) {</code></p>
      <p><code>23   errno = n;</code></p>
      <p><code>24   return(-1);</code></p>
      <p><code>25  }</code></p>
      <p><code>26  if (len &gt; attr-&gt;mq_msgsize) {</code></p>
      <p><code>27   errno = EMSGSIZE;</code></p>
      <p><code>28   goto err;</code></p>
      <p><code>29  }</code></p>
      <p><code>30  if (attr-&gt;mq_curmsgs == 0) {</code></p>
      <p><code>31   if (mqhdr-&gt;mqh_pid != 0 &amp;&amp; mqhdr-&gt;mqh_nwait == 0) {</code></p>
      <p><code>32    sigev = &amp;mqhdr-&gt;mqh_event;</code></p>
      <p><code>33    if (sigev-&gt;sigev_notify == SIGEV_SIGNAL) {</code></p>
      <p><code>34     sigqueue(mqhdr-&gt;mqh_pid, sigev-&gt;sigev_signo,</code></p>
      <p><code>35      sigev-&gt;sigev_value);</code></p>
      <p><code>36    }</code></p>
      <p><code>37    mqhdr-&gt;mqh_pid = 0; /* снятие с регистрации */</code></p>
      <p><code>38   }</code></p>
      <p><code>39  } else if (attr-&gt;mq_curmsgs &gt;= attr-&gt;mq_maxmsg) {</code></p>
      <p><code>40   /* 4queue is full */</code></p>
      <p><code>41   if (mqinfo-&gt;mqi_flags &amp; O_NONBLOCK) {</code></p>
      <p><code>32    errno = EAGAIN;</code></p>
      <p><code>43    goto err;</code></p>
      <p><code>44   }</code></p>
      <p><code>45   /* ожидание освобождения места в очереди */</code></p>
      <p><code>46   while (attr-&gt;mq_curmsgs &gt;= attr-&gt;mq_maxmsg)</code></p>
      <p><code>47    pthread_cond_wait(&amp;mqhdr-&gt;mqh_wait, &amp;mqhdr-&gt;mqh_lock);</code></p>
      <p><code>48  }</code></p>
      <subtitle>Листинг 5.25. Функция mq_send: вторая половина</subtitle>
      <p><code><code>//my_pxmsg_mmap/mq_send.с</code></code></p>
      <p><code>49  /* nmsghdr будет указывать на новое сообщение*/</code></p>
      <p><code>50  if ((freeindex = mqhdr-&gt;mqh_free) == 0)</code></p>
      <p><code>51   err_dump("mymq_send: curmsgs = %ld; free = 0", attr-&gt;mq_curmsgs);</code></p>
      <p><code>52  nmsghdr = (struct mymsg_hdr *) &amp;mptr[freeindex];</code></p>
      <p><code>53  nmsghdr-&gt;msg_prio = prio;</code></p>
      <p><code>54  nmsghdr-&gt;msg_len = len;</code></p>
      <p><code>55  memcpy(nmsghdr + 1, ptr, len); /* копирование сообщения в очередь */</code></p>
      <p><code>56  mqhdr-&gt;mqh_free = nmsghdr-&gt;msg_next; /* новое начало списка пустых сообщений */</code></p>
      <p><code>57  /* поиск места в списке для нового сообщения */</code></p>
      <p><code>58  index = mqhdr-&gt;mqh_head;</code></p>
      <p><code>59  pmsghdr = (struct mymsg_hdr *) &amp;(mqhdr-&gt;mqh_head);</code></p>
      <p><code>60  while (index != 0) {</code></p>
      <p><code>61   msghdr = (struct mymsg_hdr *) &amp;mptr[index];</code></p>
      <p><code>62   if (prio &gt; msghdr-&gt;msg_prio) {</code></p>
      <p><code>63    nmsghdr-&gt;msg_next = index;</code></p>
      <p><code>64    pmsghdr-&gt;msg_next = freeindex;</code></p>
      <p><code>65    break;</code></p>
      <p><code>66   }</code></p>
      <p><code>67   index = msghdr-&gt;msg_next;</code></p>
      <p><code>68   pmsghdr = msghdr;</code></p>
      <p><code>69  }</code></p>
      <p><code>70  if (index == 0) {</code></p>
      <p><code>71   /* очередь была пуста или новое письмо добавлено к концу списка */</code></p>
      <p><code>72   pmsghdr-&gt;msg_next = freeindex;</code></p>
      <p><code>73   nmsghdr-&gt;msg_next = 0;</code></p>
      <p><code>74  }</code></p>
      <p><code>75  /* запускаем любой из процессов, заблокированных в mq_receive */</code></p>
      <p><code>76  if (attr-&gt;mq_curmsgs == 0)</code></p>
      <p><code>77   pthread_cond_signal(&amp;mqhdr-&gt;mqh_wait);</code></p>
      <p><code>78  attr-&gt;mq_curmsgs++;</code></p>
      <p><code>79  pthread_mutex_unlock(&amp;mqhdr-&gt;mqh_lock);</code></p>
      <p><code>80  return(0);</code></p>
      <p><code>81 err:</code></p>
      <p><code>82  pthread_mutex_unlock(&amp;mqhdr-&gt;mqh lock);</code></p>
      <p><code>83  return(-1);</code></p>
      <p><code>84 }</code></p>
      <subtitle>Получение индекса свободного блока</subtitle>
      <p>50-52 Поскольку количество свободных сообщений при создании очереди равно mq_maxmsg, ситуация, в которой mq_curmsgs будет меньше mq_maxmsg для пустого списка свободных сообщений, возникнуть не может.</p>
      <subtitle>Копирование сообщения</subtitle>
      <p>53-56 Указатель nmsghdr хранит адрес области памяти, в которую помещается сообщение. Приоритет и длина сообщения сохраняются в структуре msg_hdr, а затем в память копируется содержимое сообщения, переданного вызвавшим процессом.</p>
      <subtitle>Помещение нового сообщения в соответствующее место связного списка</subtitle>
      <p>57-74 Порядок сообщений в нашем списке зависит от их приоритета: они расположены в порядке его убывания. При добавлении нового сообщения мы проверяем, существуют ли сообщения с тем же приоритетом; в этом случае сообщение добавляется после последнего из них. Используя такой метод упорядочения, мы гарантируем, что mq_receive всегда будет возвращать старейшее сообщение с наивысшим приоритетом. По мере продвижения по списку мы сохраняем в pmsghdr адрес предыдущего сообщения, поскольку именно это сообщение будет хранить индекс нового сообщения в поле msg_next.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Наша схема может оказаться медленной в случае наличия в очереди большого количества сообщений, поскольку каждый раз при добавлении нового придется просматривать их значительную часть. Можно хранить отдельно индексы последних сообщений со всеми имеющимися значениями приоритета. </p>
      </cite>
      <subtitle>Пробуждение любого процесса, заблокированного в вызове mq_receive</subtitle>
      <p>75-77 Если очередь была пуста в момент помещения в нее нового сообщения, мы вызываем pthread_cond_signal, чтобы разблокировать любой из процессов, ожидающих сообщения.</p>
      <p>78 Увеличиваем на единицу количество сообщений в очереди mq_curmsgs.</p>
     </section>
     <section>
      <title>
       <p>Функция mq_receive</p>
      </title>
      <p>В листинге 5.27 приведен текст первой половины функции mq_receive, которая получает необходимые указатели, блокирует взаимное исключение и проверяет объем буфера вызвавшего процесса, который должен быть достаточным для помещения туда сообщения максимально возможной длины.</p>
      <subtitle>Проверка полноты очереди</subtitle>
      <p>30-40 Если очередь пуста и установлен флаг O_NONBLOCK, возвращается ошибка с кодом EAGAIN. В противном случае увеличивается значение счетчика mqh_nwait, который проверяется функцией mq_send (листинг 5.25) в случае, если очередь пуста и есть процессы, ожидающие уведомления. Затем мы ожидаем сигнала по условной переменной, который будет передан функцией mq_send (листинг 5.26).</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Наша реализация mq_receive, как и реализация mq_send, упрощает ситуацию с ошибкой EINTR, возвращаемой при прерывании ожидания сигналом, перехватываемым вызвавшим процессом.</p>
      </cite>
      <p>В листинге 5.28 приведен текст второй половины функции mq_receive. Мы уже знаем, что в очереди есть сообщение, которое можно будет возвратить вызвавшему процессу.</p>
      <subtitle>Листинг 5.27.Функция mq_receive: первая половина</subtitle>
      <p><code>//my_pxmsg_mmap/mq_receive.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "mqueue.h"</code></p>
      <empty-line/>
      <p><code>3  ssize_t</code></p>
      <p><code>4  mymq_receive(mymqd_t mqd, char *ptr, size_t maxlen, unsigned int *priop)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int n;</code></p>
      <p><code>7   long index;</code></p>
      <p><code>8   int8_t *mptr;</code></p>
      <p><code>9   ssize_t len;</code></p>
      <p><code>10  struct mymq_hdr *mqhdr;</code></p>
      <p><code>11  struct mymq_attr *attr;</code></p>
      <p><code>12  struct mymsg_hdr *msghdr;</code></p>
      <p><code>13  struct mymq_info *mqinfo;</code></p>
      <p><code>14  mqinfo = mqd;</code></p>
      <p><code>15  if (mqinfo-&gt;mqi_magic != MQI_MAGIC) {</code></p>
      <p><code>16   errno = EBADF;</code></p>
      <p><code>17   return(-1);</code></p>
      <p><code>18  }</code></p>
      <p><code>19  mqhdr = mqinfo-&gt;mqi_hdr; /* указатель struct */</code></p>
      <p><code>20  mptr = (int8_t *) mqhdr; /* указатель на байт */</code></p>
      <p><code>21  attr = &amp;mqhdr-&gt;mqh_attr;</code></p>
      <p><code>22  if ((n = pthread_mutex_lock(&amp;mqhdr-&gt;mqh_lock)) != 0) {</code></p>
      <p><code>23   errno = n;</code></p>
      <p><code>24   return(-1);</code></p>
      <p><code>25  }</code></p>
      <p><code>26  if (maxlen &lt; attr-&gt;mq_msgsize) {</code></p>
      <p><code>27   errno = EMSGSIZE;</code></p>
      <p><code>28   goto err;</code></p>
      <p><code>29  }</code></p>
      <p><code>30  if (attr-&gt;mq_curmsgs = 0) { /* очередь пуста */</code></p>
      <p><code>31   if (mqinfo-&gt;mqi_flags &amp; O_NONBLOCK) {</code></p>
      <p><code>32    errno = EAGAIN;</code></p>
      <p><code>33    goto err;</code></p>
      <p><code>34   }</code></p>
      <p><code>35   /* ожидаем помещения сообщения в очередь */</code></p>
      <p><code>36   mqhdr-&gt;mqh_nwait++;</code></p>
      <p><code>37   while (attr-&gt;mq_curmsgs == 0)</code></p>
      <p><code>38    pthread_cond_wait(&amp;mqhdr-&gt;mqh_wait, &amp;mqhdr-&gt;mqh_lock);</code></p>
      <p><code>39   mqhdr-&gt;mqh_nwait--;</code></p>
      <p><code>40  }</code></p>
      <subtitle>Листинг 5.28. Функция mq_receive: вторая половина</subtitle>
      <p><code>//my_pxmsg_mmap/mq_receive.c</code></p>
      <p><code><code>41  </code>if ((index = mqhdr-&gt;mqh_head) == 0)</code></p>
      <p><code>42   err_dump("mymq_receive: curmsgs = %ld; head = 0", attr-&gt;mq_curmsgs);</code></p>
      <p><code>43  msghdr = (struct mymsg_hdr *) &amp;mptr[index];</code></p>
      <p><code>44  mqhdr-&gt;mqh_head = msghdr-&gt;msg_next; /* новое начало списка */</code></p>
      <p><code>45  len = msghdr-&gt;msg_len;</code></p>
      <p><code>46  memcpy(ptr, msghdr + 1, len); /* копирование самого сообщения */</code></p>
      <p><code>47  if (priop != NULL)</code></p>
      <p><code>48   *priop = msghdr-&gt;msg_prio;</code></p>
      <p><code>49  /* только что считанное сообщение становится первым в списке пустых */</code></p>
      <p><code>50  msghdr-&gt;msg_next = mqhdr-&gt;mqr_free;</code></p>
      <p><code>51  mqhdr-&gt;mqh_free = index;</code></p>
      <p><code>52  /* запуск любого процесса, заблокированного в вызове mq_send */</code></p>
      <p><code>53  if (attr-&gt;mq_curmsgs == attr-&gt;mq_maxmsg)</code></p>
      <p><code>54   pthread_cond_signal(&amp;mqhdr-&gt;mqh_wait);</code></p>
      <p><code>55  attr-&gt;mq_curmsgs--;</code></p>
      <p><code>56  pthread_mutex_unlock(&amp;mqhdr-&gt;mqh_lock);</code></p>
      <p><code>57  return(len);</code></p>
      <p><code>58 err:</code></p>
      <p><code>59  pthread_mutex_unlock(&amp;mqhdr-&gt;mqh_lock);</code></p>
      <p><code>60  return(-1);</code></p>
      <p><code>61 }</code></p>
      <subtitle>Возвращение сообщения вызвавшему процессу</subtitle>
      <p>43-51 msghdr указывает на msg_hdr первого сообщения в очереди, которое мы и возвратим. Освободившееся сообщение становится первым в списке свободных. </p>
      <subtitle>Разблокирование процесса, заблокированного в вызове mq_send</subtitle>
      <p>52-54 Если очередь была полной в момент считывания сообщения, мы вызываем pthread_cond_signal для отправки сообщения любому из процессов, заблокированных в вызове mq_send.</p>
     </section>
    </section>
    <section>
     <title>
      <p>5.9. Резюме</p>
     </title>
     <p>Очереди сообщений Posix просты в использовании: новая очередь создается (или существующая открывается) функцией mq_open; закрываются очереди вызовом mq_close, а удаляются mq_unlink. Поместить сообщение в очередь можно функцией mq_send, а считать его оттуда можно с помощью mq_receive. Атрибуты очереди можно считать и установить с помощью функций mq_getattr и mq_setattr, а функция mq_notify позволяет зарегистрировать процесс на уведомление о помещении нового сообщения в пустую очередь. Каждое сообщение в очереди обладает приоритетом (небольшое целое число), и функция mq_receive всегда возвращает старейшее сообщение с наивысшим приоритетом.</p>
     <p>Изучая mq_notify, мы познакомились с сигналами реального времени стандарта Posix, которые обладают номерами от SIGMIN до SIGMAX. При установке обработчика для этих сигналов с флагом SA_SIGINFO они будут помещаться в очередь, доставляться в порядке очереди и сопровождаться двумя дополнительными аргументами (при вызове обработчика).</p>
     <p>Наконец, мы реализовали большую часть возможностей очереди сообщений Posix в приблизительно 500 строках кода на языке С, используя отображаемые в память файлы, взаимные исключения и условные переменные Posix. Эта реализация иллюстрирует обработку ситуации гонок при создании новой очереди; еще раз нам придется столкнуться с такой ситуацией в главе 10 при реализации семафоров Posix.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1.  Говоря о листинге 5.4, мы отметили, что атрибут <emphasis>attr</emphasis> функции mq_open при создании новой очереди является ненулевым; следует указать оба поля: mq_maxmsg и mq_msgsize. Как можно было бы указать только одно из них, не указывая второе, для которого использовать значения атрибутов по умолчанию?</p>
     <p>2. Измените листинг 5.8 так, чтобы при получении сигнала не вызывалась функция mq_notify. Затем поместите в очередь два сообщения и убедитесь, что для второго из них сигнал порожден не будет. Почему?</p>
     <p>3. Измените листинг 5.8 так, чтобы сообщение из очереди при получении сигнала не считывалось. Вместо этого просто вызовите mq_notify и напечатайте сообщение о получении сигнала. Затем отправьте два сообщения и убедитесь, что для второго из них сигнал не порождается. Почему?</p>
     <p>4. Что произойдет, если мы уберем преобразование двух констант к целому типу в первом вызове printf в листинге 5.14? </p>
     <p>5. Измените листинг 5.4 следующим образом: перед вызовом mq_open напечатайте сообщение и подождите 30 секунд (sleep). После возвращения из mq_open выведите еще одно сообщение и подождите еще 30 секунд, а затем вызовите mq_close. Откомпилируйте программу и запустите ее, указав большое количество сообщений (несколько сотен тысяч) и максимальный размер сообщения, скажем, в 10 байт. Задача заключается в том, чтобы создать большую очередь и проверить, используются ли в реализации отображаемые в память файлы. В течение 30-секундной паузы запустите программу типа ps и посмотрите на занимаемый программой объем памяти. Сделайте это еще раз после возвращения из mq_open. Можете ли вы объяснить происходящее?</p>
     <p>6. Что произойдет при вызове memcpy в листинге 5.26, если вызвавший процесс укажет нулевую длину сообщения?</p>
     <p>7. Сравните очередь сообщений с двусторонними каналами, описанными в разделе 4.4. Сколько очередей нужно для двусторонней связи между родительским и дочерним процессами?</p>
     <p>8. Почему мы не удаляем взаимное исключение и условную переменную в листинге 5.20?</p>
     <p>9. Стандарт Posix утверждает, что дескриптор очереди сообщений не может иметь тип массива. Почему? </p>
     <p>10. В каком состоянии проводит большую часть времени функция main из листинга 5.12? Что происходит каждый раз при получении сигнала? Как мы обрабатываем эту ситуацию?</p>
     <p>11. Не все реализации поддерживают атрибут PTHREAD_PROCESS_SHARED для взаимных исключений и условных переменных. Переделайте реализацию очередей сообщений из раздела 5.8 так, чтобы использовать семафоры Posix (глава 10) вместо взаимных исключений и условных переменных.</p>
     <p>12. Расширьте реализацию очередей сообщений Posix из раздела 5.8 так, чтобы она поддерживала SIGEV_THREAD. </p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 6</p>
     <p>Очереди сообщений System V</p>
    </title>
    <section>
     <title>
      <p>6.1. Введениеы</p>
     </title>
     <p>Каждой очереди сообщений System V сопоставляется свой <emphasis>идентификатор очереди сообщений.</emphasis> Любой процесс с соответствующими привилегиями (раздел 3.5) может поместить сообщение в очередь, и любой процесс с другими соответствующими привилегиями может сообщение из очереди считать. Как и для очередей сообщений Posix, для помещения сообщения в очередь System V не требуется наличия подключенного к ней на считывание процесса.</p>
     <p>Ядро хранит информацию о каждой очереди сообщений в виде структуры, определенной в заголовочном файле &lt;sys/msg.h&gt;:</p>
     <p><code>struct msqid_ds {</code></p>
     <p><code> struct ipc_perm msg_perm; /* Разрешения чтения и записи: раздел 3.3 */</code></p>
     <p><code> struct msg *msg_first; /* указатель на первое сообщение в очереди */</code></p>
     <p><code> struct msg *msg_last; /* указатель на последнее сообщение в очереди */</code></p>
     <p><code> msglen_t msg_cbytes; /* размер очереди в байтах */</code></p>
     <p><code> msgqnum_t msg_qnum;  /* количество сообщений в очереди */</code></p>
     <p><code> msglen_t msg_qbytes; /* максимальный размер очереди в байтах */</code></p>
     <p><code> pid_t msg_lspid;  /* идентификатор (pid) последнего процесса, вызвавшего msgsnd(); */</code></p>
     <p><code> pid_t msg_lrpid;  /* pid последнего msgrcv(); */</code></p>
     <p><code> time_t msg_stime; /* время отправки последнего сообщения */</code></p>
     <p><code> time_t msg_rtime; /* время последнего считывания сообщения */</code></p>
     <p><code> time_t msg_ctime; /* время последнего вызова msgctl(), изменившего одно из полей структуры */</code></p>
     <p><code>};</code></p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Unix 98 не требует наличия полей msg_first, msg_last и msg_cbytes. Тем не менее они имеются в большинстве существующих реализаций, производных от System V. Естественно, ничто не заставляет реализовывать очередь сообщений через связный список, который неявно предполагается при наличии полей msg_first и msg_last. Эти два указателя обычно указывают на участки памяти, принадлежащие ядру, и практически бесполезны для приложения.</p>
     </cite>
     <p>Мы можем изобразить конкретную очередь сообщений, хранимую ядром как связный список, — рис. 6.1. В этой очереди три сообщения длиной 1, 2 и 3 байта с <emphasis>типами</emphasis> 100, 200 и 300 соответственно.</p>
     <p>В этой главе мы рассмотрим функции, используемые для работы с очередями сообщений System V, и реализуем наш пример файлового сервера из раздела 4.2 с использованием очередей сообщений. </p>
     <image l:href="#Any2FbImgLoader123"/>
     <p>Рис. 6.1. Структура очереди system V в ядре</p>
    </section>
    <section>
     <title>
      <p>6.2. Функция msgget</p>
     </title>
     <p>Создать новую очередь сообщений или получить доступ к существующей можно с помощью функции msgget:</p>
     <p><code>#include &lt;sys/msg.h&gt;</code></p>
     <p><code>int msgget(key_t <emphasis>key,</emphasis> int <emphasis>oflag</emphasis>);</code></p>
     <p><code>/* Возвращает неотрицательный идентификатор в случае успешного завершения, –1 в случае ошибки */</code></p>
     <p>Возвращаемое значение представляет собой целочисленный идентификатор, используемый тремя другими функциями msg для обращения к данной очереди. Идентификатор вычисляется на основе указанного <emphasis>ключа,</emphasis> который может быть получен с помощью функции ftok или может представлять собой константу IPC_PRIVATE, как показано на рис. 3.1.</p>
     <p>Флаг <emphasis>oflag</emphasis> представляет собой комбинацию разрешений чтения-записи, показанную в табл. 3.3. К разрешениям можно добавить флаги IPC_CREAT или IPC_CREAT | IPC_EXCL с помощью логического сложения, как уже говорилось в связи с рис. 3.2.</p>
     <p>При создании новой очереди сообщений инициализируются следующие поля структуры msqid_ds:</p>
     <p>&#9632; полям uid и cuid структуры msg_perm присваивается значение действующего идентификатора пользователя вызвавшего процесса, а полям gid и cgid — действующего идентификатора группы;</p>
     <p>&#9632; разрешения чтения-записи, указанные в oflag, помещаются в msg_perm.mode;</p>
     <p>&#9632; значения msg_qnum, msg_lspid, msg_lrpid, msg_stime и msg_rtime устанавливаются в 0;</p>
     <p>&#9632; в msg_ctime записывается текущее время;</p>
     <p>&#9632; в msg_qbytes помещается системное ограничение на размер очереди.</p>
    </section>
    <section>
     <title>
      <p>6.3. Функция msgsnd</p>
     </title>
     <p>После открытия очереди сообщений с помощью функции msgget можно помещать сообщения в эту очередь с помощью msgsnd.</p>
     <p><code>#include &lt;sys/msg.h&gt;</code></p>
     <p><code>int msgsnd(int <emphasis>msqid,</emphasis> const void <emphasis>*ptr,</emphasis> size_t <emphasis>length,</emphasis> int <emphasis>flag</emphasis>); </code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения; –1 – в случае ошибки */</code></p>
     <p>Здесь <emphasis>msqid</emphasis> представляет собой идентификатор очереди, возвращаемый msgget. Указатель <emphasis>ptr</emphasis> указывает на структуру следующего шаблона, определенного в &lt;sys/ msg.h&gt;:</p>
     <p><code>struct msgbuf {</code></p>
     <p><code> long mtype; /* тип сообщения, должен быть &gt; 0 */</code></p>
     <p><code> char mtext[1]; /* данные */</code></p>
     <p><code>};</code></p>
     <p>Тип сообщения должен быть больше нуля, поскольку неположительные типы используются в качестве специальной команды функции msgrcv, о чем рассказывается в следующем разделе.</p>
     <p>Название mtext в структуре msgbuf употреблено не вполне правильно; данные в сообщении совсем не обязательно должны быть текстом. Разрешена передача любых типов данных как в двоичном, так и в текстовом формате. Ядро никак не интерпретирует содержимое сообщения.</p>
     <p>Для описания структуры мы используем термин «шаблон», поскольку <emphasis>ptr</emphasis> указывает на целое типа long, представляющее собой тип сообщения, за которым непосредственно следует само сообщение (если его длина больше 0 байт). Большинство приложений не пользуются этим определением структуры msgbuf, поскольку установленного в ней количества данных (1 байт) обычно недостаточно для прикладных задач. На количество данных в сообщении никаких ограничений при компиляции не накладывается (как правило, оно может быть изменено системным администратором), поэтому вместо объявления структуры с большим объемом данных (большим, чем поддерживается текущей реализацией) определяется этот шаблон. Большинство приложений затем определяют собственную структуру сообщений, в которой передаваемые данные зависят от нужд этих приложений.</p>
     <p>Например, если приложению нужно передавать сообщения, состоящие из 16-разрядного целого, за которым следует 8-байтовый массив символов, оно может определить свою собственную структуру так:</p>
     <p><code>#define MY_DATA 8</code></p>
     <p><code>typedef struct my_msgbuf {</code></p>
     <p><code> long mtype; /* тип сообщения */</code></p>
     <p><code> int16_t mshort; /* начало данных */</code></p>
     <p><code> char mchar[MY_DATA]; </code></p>
     <p><code>} Message;</code></p>
     <p>Аргумент <emphasis>length</emphasis> функции msgsnd указывает длину сообщения в байтах. Это длина пользовательских данных, следующих за типом сообщения (целое типа long). Длина может быть и 0. В указанном выше примере длина может быть вычислена как sizeof(Message) – sizeof(long).</p>
     <p>Аргумент <emphasis>flag</emphasis> может быть либо 0, либо IPC_NOWAIT. В последнем случае он отключает блокировку для msgsnd: если для нового сообщения недостаточно места в очереди, возврат из функции происходит немедленно. Это может произойти, если:</p>
     <p>&#9632; в данной очереди уже имеется слишком много данных (значение msg_qbytes в структуре msqid_ds);</p>
     <p>&#9632; во всей системе имеется слишком много сообщений.</p>
     <p>Если верно одно из этих условий и установлен флаг IPC_NOWAIT, функция msgsnd возвращает ошибку с кодом EAGAIN. Если флаг IPC_NOWAIT не указан, а одно из этих условий выполняется, поток приостанавливается до тех пор, пока не произойдет одно из следующего:</p>
     <p>&#9632; для сообщения освободится достаточно места;</p>
     <p>&#9632; очередь с идентификатором <emphasis>msqid</emphasis> будет удалена из системы (в этом случае возвращается ошибка с кодом EIDRM);</p>
     <p>&#9632; вызвавший функцию поток будет прерван перехватываемым сигналом (в этом случае возвращается ошибка с кодом EINTR).</p>
    </section>
    <section>
     <title>
      <p>6.4. Функция msgrcv</p>
     </title>
     <p>Сообщение может быть считано из очереди с помощью функции msgrcv.</p>
     <p><code>#include &lt;sys/msg.h&gt;</code></p>
     <p><code>ssize_t msgrcv(int <emphasis>msqid,</emphasis> void <emphasis>*ptr,</emphasis> size_t <emphasis>length,</emphasis> long <emphasis>type,</emphasis> int <emphasis>flag</emphasis>);</code></p>
     <p><code>/* Возвращает количество данных в сообщении, –1 – в случае ошибки */</code></p>
     <p>Аргумент <emphasis>ptr</emphasis> указывает, куда следует помещать принимаемые данные. Как и для msgsnd, он указывает на поле данных типа long (рис. 4.13), которое непосредственно предшествует полезным данным.</p>
     <p>Аргумент <emphasis>length</emphasis> задает размер относящейся к полезным данным части буфера, на который указывает <emphasis>ptr.</emphasis> Это максимальное количество данных, которое может быть возвращено функцией. Поле типа long не входит в эту длину.</p>
     <p>Аргумент <emphasis>type</emphasis> определяет тип сообщения, которое нужно считать из очереди:</p>
     <p>&#9632; если значение <emphasis>type</emphasis> равно 0, возвращается первое сообщение в очереди (то есть при указании типа 0 возвращается старейшее сообщение);</p>
     <p>&#9632; если тип больше 0, возвращается первое сообщение, тип которого равен указанному;</p>
     <p>&#9632; если тип меньше нуля, возвращается первое сообщение с наименьшим типом, значение которого меньше либо равно модулю аргумента <emphasis>type.</emphasis></p>
     <p>Рассмотрим пример очереди сообщений, изображенный на рис. 6.1. В этой очереди имеются три сообщения:</p>
     <p>&#9632; первое сообщение имеет тип 100 и длину 1;</p>
     <p>&#9632; второе сообщение имеет тип 200 и длину 2;</p>
     <p>&#9632; третье сообщение имеет тип 300 и длину 3.</p>
     <p>Таблица 6.1 показывает, какое сообщение будет возвращено при различных значениях аргумента <emphasis>type.</emphasis></p>
     <empty-line/>
     <p>Таблица 6.1. Возвращаемое сообщение в зависимости от аргумента type </p>
     <table>
      <tr align="left">
       <th align="left" valign="top">type</th>
       <th align="left" valign="top">Тип возвращаемого сообщения</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">0</td>
       <td align="left" valign="top">100</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">100</td>
       <td align="left" valign="top">100</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">200</td>
       <td align="left" valign="top">200</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">300</td>
       <td align="left" valign="top">300</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">-100</td>
       <td align="left" valign="top">100</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">-200</td>
       <td align="left" valign="top">100</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">-300</td>
       <td align="left" valign="top">100 </td>
      </tr>
     </table>
     <p>Аргумент <emphasis>flag </emphasis>указывает, что делать, если в очереди нет сообщения с запрошенным типом. Если установлен бит IPC_NOWAIT, происходит немедленный возврат из функции msgrcv с кодом ошибки ENOMSG. В противном случае вызвавший процесс блокируется до тех пор, пока не произойдет одно из следующего:</p>
     <p>&#9632; появится сообщение с запрошенным типом;</p>
     <p>&#9632; очередь с идентификатором <emphasis>msqid</emphasis> будет удалена из системы (в этом случае будет возвращена ошибка с кодом EIDRM);</p>
     <p>&#9632; вызвавший поток будет прерван перехватываемым сигналом (в этом случае возвращается ошибка EINTR).</p>
     <p>В аргументе <emphasis>flag</emphasis> можно указать дополнительный бит MSG_NOERROR. При установке этого бита данные, превышающие объем буфера (аргумент <emphasis>length),</emphasis> будут просто обрезаться до его размера без возвращения кода ошибки. Если этот флаг не указать, при превышении объемом сообщения аргумента <emphasis>length</emphasis> будет возвращена ошибка E2BIG.</p>
     <p>В случае успешного завершения работы msgrcv возвращает количество байтов в принятом сообщении. Оно не включает байты, нужные для хранения типа сообщения (long), который также возвращается через указатель <emphasis>ptr.</emphasis></p>
    </section>
    <section>
     <title>
      <p>6.5. Функция msgctl</p>
     </title>
     <section>
      <p>Функция msgctl позволяет управлять очередями сообщений:</p>
      <p><code>#include &lt;sys/msg.h&gt;</code></p>
      <p><code>int msgctl(int <emphasis>msqid,</emphasis> int <emphasis>cmd,</emphasis> struct msqid_ds <emphasis>*buff</emphasis>);</code></p>
      <p><code>/* Возвращает 0 в случае успешного завершения, –1 в случае ошибки */</code></p>
      <p>Команд (аргумент <emphasis>cmd)</emphasis> может быть три:</p>
      <p>&#9632; IPC_RMID — удаление очереди с идентификатором <emphasis>msqidиз</emphasis> системы. Все сообщения, имеющиеся в этой очереди, будут утеряны. Мы уже видели пример действия этой функции в листинге 3.2. Для этой команды третий аргумент функции игнорируется.</p>
      <p>&#9632; IPC_SET — установка значений четырех полей структуры msqid_ds данной очереди равными значениям соответствующих полей структуры, на которую указывает аргумент <emphasis>buff:</emphasis> msg_perm.uid, msg_perm.gid, msg_perm.mode, msg_qbytes.</p>
      <p>&#9632; IPC_STAT — возвращает вызвавшему процессу (через аргумент <emphasis>buff)</emphasis> текущее содержимое структуры msqid_ds для указанной очереди.</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Программа в листинге 6.1 создает очередь сообщений, помещает в нее сообщение с 1 байтом информации, вызывает функцию msgctl с командой IPC_STAT, выполняет команду ipcs, используя функцию system, а затем удаляет очередь, вызвав функцию msgctl с командой IPC_RMID.</p>
      <subtitle>Листинг 6.1.<a l:href="#n_1" type="note">[1]</a> Пример использования функции msgctl с командой IPC_STAT</subtitle>
      <p><code>//svmsg/ctl.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int msqid;</code></p>
      <p><code>6   struct msqid_ds info;</code></p>
      <p><code>7   struct msgbuf buf;</code></p>
      <p><code>8   msqid = Msgget(IPC_PRIVATE, SVMSG_MODE | IPC_CREAT);</code></p>
      <p><code>9   buf.mtype = 1;</code></p>
      <p><code>10  buf.mtext[0] = 1;</code></p>
      <p><code>11  Msgsnd(msqid, &amp;buf, 1, 0);</code></p>
      <p><code>12  Msgctl(msqid, IPC_STAT, &amp;info);</code></p>
      <p><code>13  printf("read-write: *03o, cbytes = %lu, qnum = %lu, qbytes = %lu\n",</code></p>
      <p><code>14   info.msg_perm.mode &amp; 0777, (ulong_t) info.msg_cbytes,</code></p>
      <p><code>15   (ulong_t) info.msg_qnum, (ulong_t) info.msg_qbytes);</code></p>
      <p><code>16  system("ipcs –q");</code></p>
      <p><code>17  Msgctl(msqid, IPC_RMID, NULL);</code></p>
      <p><code>18  exit(0);</code></p>
      <p><code>19 }</code></p>
      <p>Мы собираемся отправить сообщение размером 1 байт, поэтому можно просто воспользоваться стандартным определением структуры msgbuf из &lt;sys/msg.h&gt;. Выполнение этой программы приведет к следующему результату:</p>
      <p><code>solaris %<strong>ctl</strong></code></p>
      <p><code>read-write: 664, cbytes = 1, qnum = 1, qbytes = 4096</code></p>
      <p><code>IPC status from &lt;running system&gt; as of MOn Oct 20 15:36:49 1997</code></p>
      <p><code>T ID   Key      MODE       OWNER    GROUP</code></p>
      <p><code>Message Queues:</code></p>
      <p><code>q 1150 00000000 –rw-rw-r-- rstevens other1</code></p>
      <p>Выведенные значения соответствуют ожидаемым. Нулевое значение ключа обычно соответствует IPC_PRIVATE, как мы отмечали в разделе 3.2. В этой системе на очередь сообщений накладывается ограничение по объему в 4096 байт. Поскольку мы записали сообщение с 1 байтом данных и msg_cbytes имеет значение 1, это ограничение накладывается на объем полезных данных и не включает тип сообщения (long), указываемый для каждого сообщения.</p>
     </section>
    </section>
    <section>
     <title>
      <p>6.6. Простые примеры</p>
     </title>
     <section>
      <p>Поскольку очереди сообщений System V обладают живучестью ядра, мы можем написать несколько отдельных программ для работы с этими очередями и изучить их действие.</p>
     </section>
     <section>
      <title>
       <p>Программа msgcreate</p>
      </title>
      <p>В листинге 6.2 приведена программа msgcreate, создающая очередь сообщений.</p>
      <p>9-12 Параметр командной строки –e позволяет указать флаг IPC_EXCL.</p>
      <p>16 Полное имя файла, являющееся обязательным аргументом командной строки, передается функции ftok. Получаемый ключ преобразуется в идентификатор функцией msgget.</p>
      <subtitle>Листинг 6.2. Создание очереди сообщений System V</subtitle>
      <p><code>//svmsg/msgcreate.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int c, oflag, mqid;</code></p>
      <p><code>6   oflag = SVMSG_MODE | IPC_CREAT;</code></p>
      <p><code>7   while ((c = Getopt(argc, argv, "e")) != –1) {</code></p>
      <p><code>8    switch (c) {</code></p>
      <p><code>9    case 'e':</code></p>
      <p><code>10    oflag |= IPC_EXCL;</code></p>
      <p><code>11    break;</code></p>
      <p><code>12   }</code></p>
      <p><code>13  }</code></p>
      <p><code>14  if (optind != argc – 1)</code></p>
      <p><code>15   err_quit("usage: msgcreate [ –e ] &lt;pathname&gt;");</code></p>
      <p><code>16  mqid = Msgget(Ftok(argv[optind], 0), oflag);</code></p>
      <p><code>17  exit(0);</code></p>
      <p><code>18 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа msgsnd</p>
      </title>
      <p>Программа msgsnd приведена в листинге 6.3. Она помещает в очередь одно сообщение заданной длины и типа.</p>
      <p>Мы создаем указатель на структуру msgbuf общего вида, а затем выделяем место под реальную структуру (буфер записи) соответствующего размера, вызвав calloc. Эта функция инициализирует буфер нулем.</p>
      <subtitle>Листинг 6.3. Помещение сообщения в очередь System V</subtitle>
      <p><code>//svmsg/msgsnd.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int mqid;</code></p>
      <p><code>6   size_t len;</code></p>
      <p><code>7   long type;</code></p>
      <p><code>8   struct msgbuf *ptr;</code></p>
      <p><code>9   if (argc != 4)</code></p>
      <p><code>10   err_quit("usage: msgsnd &lt;pathname&gt; &lt;#bytes&gt; &lt;type&gt;");</code></p>
      <p><code>11  len = atoi(argv[2]);</code></p>
      <p><code>12  type = atoi(argv[3]);</code></p>
      <p><code>13  mqid = Msgget(Ftok(argv[1], 0), MSG_W);</code></p>
      <p><code>14  ptr = Calloc(sizeof(long) + len, sizeof(char));</code></p>
      <p><code>15  ptr-&gt;mtype = type;</code></p>
      <p><code>16  Msgsnd(mqid, ptr, len, 0);</code></p>
      <p><code>17  exit(0);</code></p>
      <p><code>18 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа msgrcv</p>
      </title>
      <p>В листинге 6.4 приведен текст программы msgrcv, считывающей сообщение из очереди. В командной строке может быть указан параметр –n, отключающий блокировку, а параметр –t может быть использован для указания типа сообщения в функции msgrcv.</p>
      <p>2 Не существует простого способа определить максимальный размер сообщения (об этом и других ограничениях мы поговорим в разделе 6.10), поэтому мы определим свою собственную константу.</p>
      <subtitle>Листинг 6.4. Считывание сообщения из очереди System V</subtitle>
      <p><code>//svmsg/msgrcv.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #define MAXMSG (8192 + sizeof(long))</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int c, flag, mqid;</code></p>
      <p><code>7   long type;</code></p>
      <p><code>8   ssize_t n;</code></p>
      <p><code>9   struct msgbuf *buff;</code></p>
      <p><code>10  type = flag = 0;</code></p>
      <p><code>11  while ((c = Getopt(argc, argv, "nt:")) != –1) {</code></p>
      <p><code>12   switch (c) {</code></p>
      <p><code>13   case 'n':</code></p>
      <p><code>14    flag |= IPC_NOWAIT;</code></p>
      <p><code>15    break;</code></p>
      <p><code>16   case 't':</code></p>
      <p><code>17    type = atol(optarg);</code></p>
      <p><code>18    break;</code></p>
      <p><code>19   }</code></p>
      <p><code>20  }</code></p>
      <p><code>21  if (optind != argc – 1)</code></p>
      <p><code>22   err_quit("usage: msgrcv [ –n ] [ –t type ] &lt;pathname&gt;");</code></p>
      <p><code>23  mqid = Msgget(Ftok(argv[optind], 0), MSG_R);</code></p>
      <p><code>24  buff = Malloc(MAXMSG);</code></p>
      <p><code>25  n = Msgrcv(mqid, buff, MAXMSG, type, flag);</code></p>
      <p><code>26  printf("read %d bytes, type = %ld\n", n, buff-&gt;mtype);</code></p>
      <p><code>27  exit(0);</code></p>
      <p><code>28 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа msgrmid</p>
      </title>
      <p>Для удаления очереди сообщений мы вызываем функцию msgctl с командой IPC_RMID, как показано в листинге 6.5.</p>
      <subtitle>Листинг 6.5. Удаление очереди сообщений System V</subtitle>
      <p><code>//svmsg/msgrmid.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int mqid;</code></p>
      <p><code>6   if (argc != 2)</code></p>
      <p><code>7    err_quit("usage: msgrmid &lt;pathname&gt;");</code></p>
      <p><code>8   mqid = Msgget(Ftok(argv[1], 0), 0);</code></p>
      <p><code>9   Msgctl(mqid, IPC_RMID, NULL);</code></p>
      <p><code>10  exit(0);</code></p>
      <p><code>11 }</code></p>
     </section>
     <section>
      <title>
       <p>Примеры</p>
      </title>
      <p>Теперь воспользуемся четырьмя только что написанными программами. Создадим очередь и поместим в нее три сообщения:</p>
      <p><code>solaris % <strong>msgcreate /tmp/no/such/file</strong></code></p>
      <p><code>ftok error for pathname "tmp/no/such/file" and id 0: No such file or directory</code></p>
      <p><code>solaris % <strong>touch /trap/test1</strong></code></p>
      <p><code>solaris % <strong>msgcreate /tmp/test1</strong></code></p>
      <p><code>solaris % <strong>msgsnd /tmp/test1 1 100</strong></code></p>
      <p><code>solaris % <strong>msgsnd /tmp/test1 2 200</strong></code></p>
      <p><code>solaris % <strong>msgsnd /tmp/test1 3 300</strong></code></p>
      <p><code>solaris % <strong>ipcs –qo</strong></code></p>
      <p><code>IPC status from &lt;running system&gt; as of Sat Jan 10 11:25:45 1998</code></p>
      <p><code>T ID  KEY        MODE       OWNER    GROUP  CBYTES QNUM</code></p>
      <p><code>Message Queues:</code></p>
      <p><code>q 100 0х0000113e –rw-r--r-- rstevens other1 6      3</code></p>
      <p>Сначала мы пытаемся создать очередь, используя имя несуществующего файла. Пример показывает, что файл, указываемый в качестве аргумента ftok, обязательно должен существовать. Затем мы создаем файл /tmp/test1 и используем его имя при создании очереди сообщений. После этого в очередь помещаются три сообщения длиной 1, 2 и 3 байта со значениями типа 100, 200 и 300 (вспомните рис. 6.1). Программа ipcs показывает, что в очереди находятся 3 сообщения общим объемом 6 байт.</p>
      <p>Теперь продемонстрируем использование аргумента type при вызове msgrcv для считывания сообщений в произвольном порядке:</p>
      <p><code>solaris % <strong>msgrcv –t 200 /tmp/test1</strong></code></p>
      <p><code>read 2 bytes, type = 200</code></p>
      <p><code>solaris % <strong>msgrcv –t -300 /tmp/test1</strong></code></p>
      <p><code>read 1 bytes, type = 100</code></p>
      <p><code>solaris % <strong>msgrcv /tmp/test1</strong></code></p>
      <p><code>read 3 bytes, type = 300</code></p>
      <p><code>solaris % <strong>msgrcv –n /tmp/test1</strong></code></p>
      <p><code>msgrcv error: No message of desired type</code></p>
      <p>В первом примере запрашивается сообщение с типом 200, во втором примере — сообщение с наименьшим значением типа, не превышающим 300, а в третьем — первое сообщение в очереди. Последний запуск msgrcv иллюстрирует действие флага IPC_NOWAIT.</p>
      <p>Что произойдет, если мы укажем положительное значение типа, а сообщений с таким типом в очереди не обнаружится?</p>
      <p><code>solaris % <strong>ipcs –qo</strong></code></p>
      <p><code>IPC status from &lt;running system&gt; as of Sat Jan 10 11:37:01 1998</code></p>
      <p><code>T ID  KEY        MODE       OWNER    GROUP  CBYTES QNUM</code></p>
      <p><code>Message Queues:</code></p>
      <p><code>q 100 0x0000113e –rw-r--r-- rstevens other1 0      0</code></p>
      <p><code>solaris % <strong>msgsnd /tmp/test1 1 100</strong></code></p>
      <p><code>solaris % <strong>msgrcv –t 999 /temp/test1</strong></code></p>
      <p><code>^? <emphasis>нажали клавишу прерывания выполнения программы</emphasis></code></p>
      <p><code>solaris % <strong>msgrcv –n –t999/tmp/test1</strong></code></p>
      <p><code>msgrcv error: No message of desired type</code></p>
      <p><code>solaris % <strong>grep desired /usr/include/sys/errno.h</strong></code></p>
      <p><code>#define ENOMSG 35 /* No message of desired type */</code></p>
      <p><code>solaris % <strong>msgrmid /tmp/test1</strong></code></p>
      <p>Сначала мы вызываем ipcs, чтобы убедиться, что очередь пуста, а затем помещаем в нее сообщение длиной 1 байт с типом 100. Затем мы запрашиваем сообщение с типом 999, и программа блокируется (при вызове msgrcv), ожидая помещения в очередь сообщения с указанным типом. Мы прерываем ожидание нажатием клавиши. Затем мы запускаем программу с флагом –n, предотвращающим блокировку, и видим, что в этом случае возвращается ошибка с кодом ENOMSG. После этого мы удаляем очередь с помощью программы msgrmid. Мы могли бы удалить очередь и с помощью системной команды</p>
      <p><code>solaris % <strong>ipcrm –q 100</strong></code></p>
      <p>в которой указывается идентификатор очереди, или с помощью той же команды в другом формате</p>
      <p><code>solaris % <strong>ipcrm –Q 0x113e</strong></code></p>
      <p>где указывается ключ очереди сообщений.</p>
     </section>
     <section>
      <title>
       <p>Программа msgrcvid</p>
      </title>
      <p>Покажем теперь, что для получения доступа к очереди сообщений System V не обязательно вызывать msgget: все, что нужно, — это знать идентификатор очереди сообщений, который легко получить с помощью ipcs, и считать разрешения доступа для очереди. В листинге 6.6 приведен упрощенный вариант программы msgrcv из листинга 6.4.</p>
      <p>Здесь мы уже не используем msgget. Вместо этого используется идентификатор очереди сообщений, являющийся обязательным аргументом командной строки.</p>
      <subtitle>Листинг 6.6. Считывание из очереди сообщений System V с известным идентификатором</subtitle>
      <p><code>//svmsg/msgrcvid.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #define MAXMSG (8192 + sizeof(long))</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int mqid;</code></p>
      <p><code>7   ssize_t n;</code></p>
      <p><code>8   struct msgbuf *buff;</code></p>
      <p><code>9   if (argc != 2)</code></p>
      <p><code>10   err_quit("usage: msgrcvid &lt;mqid&gt;");</code></p>
      <p><code>11  mqid = atoi(argv[1]);</code></p>
      <p><code>12  buff = Maloc(MAXMSG);</code></p>
      <p><code>13  n = Msgrcv(mqid, buff, MAXMSG, 0, 0);</code></p>
      <p><code>14  printf("read %d bytes, type = %ld\n", n, buff-&gt;mtype);</code></p>
      <p><code>15  exit(0);</code></p>
      <p><code>16 }</code></p>
      <p>Вот пример использования этой программы:</p>
      <p><code>solaris % <strong>touch /tmp/testid</strong></code></p>
      <p><code>solaris % <strong>msgcreate /tmp/testid</strong></code></p>
      <p><code>solaris % <strong>msgsnd /tmp/testid4 400</strong></code></p>
      <p><code>solaris % <strong>ipcs –qo</strong></code></p>
      <p><code>IPC status from &lt;running system&gt; as of Wed Mar 25 09:48:28 1998</code></p>
      <p><code>T ID  KEY        MODE       OWNER    GROUP  CBYTES QNUM</code></p>
      <p><code>Message Queues:</code></p>
      <p><code>q 150 0x0000118a –rw-r--r-- rstevens other1 4      1</code></p>
      <p><code>solaris % <strong>msgrcvid 150</strong></code></p>
      <p><code>read 4 bytes, type = 400</code></p>
      <p>Идентификатор очереди (150) мы узнали с помощью ipcs, его мы и предоставляем программе msgrcvid в качестве аргумента командной строки.</p>
      <p>Этот же метод можно использовать для семафоров System V (упражнение 11.1) и разделяемой памяти System V (упражнение 14.1).</p>
     </section>
    </section>
    <section>
     <title>
      <p>6.7. Пример программы клиент-сервер</p>
     </title>
     <p>Перепишем наш пример программы типа клиент-сервер из раздела 4.2 с использованием двух очередей сообщений. Одна из очередей предназначена для передачи сообщений от клиента серверу, а другая — в обратную сторону.</p>
     <p>Заголовочный файл svmsg.h приведен в листинге 6.7. Мы подключаем наш стандартный заголовочный файл и определяем ключи для каждой из очередей сообщений.</p>
     <subtitle>Листинг 6.7. Заголовочный файл svmsg.h для программы клиент-сервер, использующей очереди сообщений</subtitle>
     <p><code>//svmsgcliserv/svmsg.h</code></p>
     <p><code>1 #include "unpipc.h"</code></p>
     <p><code>2 #define MQ_KEY1 1234L</code></p>
     <p><code>3 #define MQ_KEY2 2345L</code></p>
     <p>Функция main для сервера приведена в листинге 6.8. Программа создает обе очереди сообщений, и не беда, если какая-нибудь из них уже существует, потому что мы не указываем флаг IPC_EXCL. Функция server дана в листинге 4.16. Она вызывает наши собственные функции mesgsend и mesgrecv, новые версии которых будут приведены ниже.</p>
     <subtitle>Листинг 6.8. Функция main программы-сервера, использующей очереди сообщений</subtitle>
     <p><code>//svmsgcliserv/server_main.с</code></p>
     <p><code>1  #include "svmsg.h"</code></p>
     <empty-line/>
     <p><code>2  void server(int, int);</code></p>
     <p><code>3  int</code></p>
     <p><code>4  main(int argc, char **argv)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   int readid, writeid;</code></p>
     <p><code>7   readid = Msgget(MQ_KEY1, SVMSG_MODE | IPC_CREAT);</code></p>
     <p><code>8   writeid = Msgget(MQ_KEY2, SVMSG_MODE | IPC_CREAT);</code></p>
     <p><code>9   server(readid, writeid);</code></p>
     <p><code>10  exit(0);</code></p>
     <p><code>11 }</code></p>
     <subtitle>Листинг 6.9. Функция main программы-клиента, использующей очереди сообщений</subtitle>
     <p><code>//svmsgcliserv/client_main.с</code></p>
     <p><code>1  #include "svmsg.h"</code></p>
     <p><code>2  void client(int, int);</code></p>
     <empty-line/>
     <p><code>3  int</code></p>
     <p><code>4  main(int argc, char **argv)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   int readid, writeid;</code></p>
     <p><code>7   /* assumes server has created the queues */</code></p>
     <p><code>8   writeid = Msgget(MQ_KEY1, 0);</code></p>
     <p><code>9   readid = Msgget(MQ_KEY2, 0);</code></p>
     <p><code>10  client(readid, writeid);</code></p>
     <p><code>11  /* now we can delete the queues */</code></p>
     <p><code>12  Msgctl(readid, IPC_RMID. NULL);</code></p>
     <p><code>13  Msgctl(writeid, IPC_RMID, NULL);</code></p>
     <p><code>14  exit(0);</code></p>
     <p><code>15 }</code></p>
     <p>В листинге 6.9 приведен текст функции main программы-клиента. Программа открывает две очереди сообщений и вызывает функцию client из листинга 4.15. Эта функция использует две другие: mesg_send и mesg_recv, которые будут приведены ниже.</p>
     <p>И функция client, и функция server используют формат сообщений, изображенный в листинге 4.12. Для передачи и приема сообщений они используют функции mesg_send и mesg_recv. Старые версии этих функций, приведенные в листингах 4.13 и 4.14, вызывали write и read и работали с программными каналами и FIFO, так что нам придется переписать их для использования очередей сообщений. В листингах 6.10 и 6.11 приведены новые версии этих функций. Обратите внимание, что аргументы функций не изменились, поскольку первый целочисленный аргумент может содержать как целочисленный дескриптор программного канала или FIFO, так и целочисленный дескриптор очереди сообщений.</p>
     <subtitle>Листинг 6.10. Функция mesg_send, работающая с очередью сообщений System V</subtitle>
     <p><code>//svmsgcliserv/mesg_send.с</code></p>
     <p><code>1 #include "mesg.h"</code></p>
     <empty-line/>
     <p><code>2 ssize_t</code></p>
     <p><code>3 mesg_send(int id, struct mymesg *mptr)</code></p>
     <p><code>4 {</code></p>
     <p><code>5  return(msgsnd(id, &amp;(mptr-&gt;mesg_type), mptr-&gt;mesg_len, 0));</code></p>
     <p><code>6 }</code></p>
     <subtitle>Листинг 6.11. Функция mesg_recv, работающая с очередью сообщений System V</subtitle>
     <p><code>//svmsgcliserv/mesg_recv.с</code></p>
     <p><code>1 #include "mesg.h"</code></p>
     <empty-line/>
     <p><code>2 ssize_t</code></p>
     <p><code>3 mesg_recv(int id, struct mymesg *mptr)</code></p>
     <p><code>4 {</code></p>
     <p><code>5  ssize_t n;</code></p>
     <p><code>6  n = msgrcv(id, &amp;(mptr-&gt;mesg_type), MAXMESGDATA, mptr-&gt;mesg_type, 0);</code></p>
     <p><code>7  mptr-&gt;mesg_len = n; /* количество возвращаемых данных */</code></p>
     <p><code>8  return(n); /* –1 в случае ошибки, 0 – конец файла, иначе – &gt;0 */</code></p>
     <p><code>9 }</code></p>
    </section>
    <section>
     <title>
      <p>6.8. Мультиплексирование сообщений</p>
     </title>
     <section>
      <p>Наличие поля type у каждого сообщения в очереди предоставляет две интересные возможности:</p>
      <p>1. Поле type может использоваться для идентификации сообщений, позволяя нескольким процессам <emphasis>мультиплексировать</emphasis> сообщения в одной очереди. Например, все сообщения от клиентов серверу имеют одно и то же значение типа, тогда как сообщения сервера клиентам имеют различные значения типов, уникальные для каждого клиента. Естественно, в качестве значения типа сообщения, гарантированно уникального для каждого клиента, можно использовать идентификатор процесса клиента.</p>
      <p>2. Поле type может использоваться для установки приоритета сообщений. Это позволяет получателю считывать сообщения в порядке, отличном от обычного для очередей (FIFO). В программных каналах и FIFO данные могли приниматься только в том порядке, в котором они были отправлены. Очереди System V позволяют считывать сообщения в произвольном порядке в зависимости от значений типа сообщений. Более того, можно вызывать msgrcv с флагом IPC_NOWAIT для считывания сообщений с конкретным типом и немедленного возвращения управления процессу в случае отсутствия таких сообщений.</p>
     </section>
     <section>
      <title>
       <p>Пример: одна очередь на приложение</p>
      </title>
      <p>Вспомните наш простой пример с одним процессом-сервером и одним процессом-клиентом. Если применять программные каналы или FIFO, необходимо наличие двух каналов IPC для передачи данных в обоих направлениях, поскольку эти типы IPC являются однонаправленными. Очереди сообщений позволяют передавать данные в обоих направлениях, причем поле type может использоваться для указания адресата (клиента или сервера).</p>
      <image l:href="#Any2FbImgLoader129"/>
      <p>Рис. 6.2. Мультиплексирование сообщений между несколькими клиентами и одним сервером</p>
      <empty-line/>
      <p>Рассмотрим усложненный вариант: один сервер и несколько клиентов. В этом случае можно использовать значение типа 1, например, для обозначения сообщений от любого клиента серверу. Если клиент передаст серверу свой идентификатор процесса в качестве части сообщения, сервер сможет отсылать клиенту сообщения, используя его идентификатор в качестве значения типа сообщения. Каждый клиент будет использовать свой PID в качестве аргумента <emphasis>type</emphasis> при вызове msgrcv. На рис. 6.2 приведен пример использования очереди для мультиплексирования этих сообщений между несколькими клиентами и одним сервером.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>При использовании одного канала IPC одновременно клиентами и сервером всегда существует потенциальная возможность зависания (deadlock). Клиенты могут (в этом примере) заполнить очередь своими сообщениями, не давая серверу возможности отправить ответ. В этому случае клиенты заблокируются при вызове msgsnd, как и сервер. Одно из соглашений, исключающих возможность такой взаимной блокировки, заключается в том, что сервер должен всегда отключать блокировку записи в очередь сообщений.</p>
      </cite>
      <p>Теперь мы можем переделать наш пример с клиентом и сервером, используя одну очередь сообщений с различными типами для разных адресатов. Эти программы используют следующее соглашение: сообщения с типом 1 адресованы серверу, а все остальные сообщения имеют тип, соответствующий идентификатору процесса адресата. При этом запрос клиента должен содержать его PID вместе с полным именем запрашиваемого файла, аналогично программе в разделе 4.8.</p>
      <p>В листинге 6.12 приведен текст функции main сервера. Заголовочный файл svmsg.h был приведен в листинге 6.7. Создается единственная очередь сообщений (если она существует, ошибки не возникнет). Идентификатор этой очереди сообщений используется в качестве обоих аргументов при вызове функции server.</p>
      <subtitle>Листинг 6.12. Функция main сервера</subtitle>
      <p><code>//svmsgmpx1q/server_main.с</code></p>
      <p><code>1  #include "svmsg.h"</code></p>
      <p><code>2  void server(int, int);</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int msqid;</code></p>
      <p><code>7   msqid = Msgget(MQ_KEY1, SVMSG_MODE | IPC_CREAT);</code></p>
      <p><code>8   server(msqid, msqid); /* одна очередь в обе стороны */</code></p>
      <p><code>9   exit(0);</code></p>
      <p><code>10 }</code></p>
      <p>Функция server обеспечивает работу сервера. Ее текст приведен в листинге 6.13. Эта функция представляет собой комбинацию листинга 4.10 — нашего сервера FIFO, считывавшего команды, состоявшие из идентификатора процесса и полного имени файла, — и листинга 4.16, в котором использовались функции mesg_send и mesg_recv. Обратите внимание, что идентификатор процесса, отправляемый клиентом, используется в качестве типа для всех сообщений, отправляемых сервером этому клиенту. Эта функция представляет собой бесконечный цикл, в котором считываются запросы клиентов и отсылаются запрошенные файлы. Этот сервер является последовательным (см. раздел 4.9).</p>
      <p>В листинге 6.14 приведен текст функции main клиента. Клиент открывает очередь сообщений, которая должна была быть создана сервером заранее.</p>
      <p>Функция client, текст которой дан в листинге 6.15, обеспечивает всю обработку со стороны клиента. Эта функция представляет собой комбинацию программ из листингов 4.11 и 4.15. В первой программе клиент отсылал свой идентификатор и полное имя файла, а во второй программе использовались функции mesg_send и mesg_recv. Обратите внимание, что тип сообщений, запрашиваемых функцией mesg_recv, совпадает с идентификатором процесса клиента.</p>
      <p>Функции client и server используют функции mesg_send и mesg_recv из листингов 6.9 и 6.11.</p>
      <subtitle>Листинг 6.13. Функция server</subtitle>
      <p><code>//svmsgmpx1q/server.c</code></p>
      <p><code>1  #include "mesg.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  server(int readfd, int writefd)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   FILE *fp;</code></p>
      <p><code>6   char *ptr;</code></p>
      <p><code>7   pid_t pid;</code></p>
      <p><code>8   ssize_t n;</code></p>
      <p><code>9   struct mymesg mesg;</code></p>
      <p><code>10  for (;;) {</code></p>
      <p><code>11   /* считывание полного имени из канала IPC */</code></p>
      <p><code>12   mesg.mesg_type = 1:</code></p>
      <p><code>13   if ((n = Mesg_recv(readfd, &amp;mesg)) == 0) {</code></p>
      <p><code>14    err_msg("pathname missing");</code></p>
      <p><code>15    continue;</code></p>
      <p><code>16   }</code></p>
      <p><code>17   mesg.mesg_data[n] = '\0'; /* полное имя */</code></p>
      <p><code>18   if ((ptr = strchr(mesg.mesg_data, ' ')) == NULL) {</code></p>
      <p><code>19    err_msg("bogus request: %s", mesg.mesg_data);</code></p>
      <p><code>20    continue;</code></p>
      <p><code>21   }</code></p>
      <p><code>22   *ptr++ =0; /* ptr = полное имя */</code></p>
      <p><code>23   pid = atol(mesg.mesg_data);</code></p>
      <p><code>24   mesg.mesg_type = pid; /* для обратных сообщений */</code></p>
      <p><code>25   if ((fp = fopen(ptr, "r")) == NULL) {</code></p>
      <p><code>26    /* 4error: must tell client */</code></p>
      <p><code>27    snprintf(mesg.mesg_data + n, sizeof(mesg.mesg_data) – n,</code></p>
      <p><code>28     ": can't open. %s\n", strerror(errno));</code></p>
      <p><code>29    mesg.mesg_len – strlen(ptr);</code></p>
      <p><code>30    memmove(mesg.mesg_data, ptr, mesg.mesg_len);</code></p>
      <p><code>31    Mesg_send(writefd, &amp;mesg);</code></p>
      <p><code>32   } else {</code></p>
      <p><code>33    /* файл открыт, копируем клиенту */</code></p>
      <p><code>34    while (Fgets(mesg.mesg_data, MAXMESGDATA, fp) != NULL) {</code></p>
      <p><code>35     mesg.mesg_len = strlen(mesg.mesg_data);</code></p>
      <p><code>36     Mesg_send(writefd, &amp;mesg);</code></p>
      <p><code>37    }</code></p>
      <p><code>38    Fclose(fp);</code></p>
      <p><code>39   }</code></p>
      <p><code>40   /* сообщение нулевой длины заканчивает связь */</code></p>
      <p><code>41   mesg.mesg_len = 0;</code></p>
      <p><code>42   Mesg_send(writefd, &amp;mesg);</code></p>
      <p><code>43  }</code></p>
      <p><code>44 }</code></p>
      <subtitle>Листинг 6.14. Функция main клиента</subtitle>
      <p><code>//svmsgmpx1q/client_main.c</code></p>
      <p><code>1  #include "svmsg.h"</code></p>
      <p><code>2  void client(int, int);</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int msqid;</code></p>
      <p><code>7   /* сервер должен был создать очередь */</code></p>
      <p><code>8   msqid = Msgget(MQ_KEY1, 0);</code></p>
      <p><code>9   client(msqid, msqid); /* одна очередь в обе стороны */</code></p>
      <p><code>10  exit(0);</code></p>
      <p><code>11 }</code></p>
      <subtitle>Листинг 6.15. Функция client</subtitle>
      <p><code>//svmsgmpx1q/client.с</code></p>
      <p><code>1  #include "mesg.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  client(int readfd, int writefd)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   size_t len;</code></p>
      <p><code>6   ssize_t n;</code></p>
      <p><code>7   char *ptr;</code></p>
      <p><code>8   struct mymesg mesg;</code></p>
      <p><code>9   /* инициализируем буфер идентификатором процесса и пробелом */</code></p>
      <p><code>10  snprintf(mesg.mesg_data, MAXMESGDATA. "%ld ", (long) getpid());</code></p>
      <p><code>11  len = strlen(mesg.mesg_data);</code></p>
      <p><code>12  ptr = mesg.mesg_data + len;</code></p>
      <p><code>13  /* считываем полное имя файла */</code></p>
      <p><code>14  Fgets(ptr, MAXMESGDATA – len, stdin);</code></p>
      <p><code>15  len = strlen(mesg.mesg_data);</code></p>
      <p><code>16  if (mesg.mesg_data[len-1] == '\n')</code></p>
      <p><code>17   len--; /* удаляем перевод строки fgets() */</code></p>
      <p><code>18  mesg.mesg_len = len;</code></p>
      <p><code>19  mesg.mesg_type = 1;</code></p>
      <p><code>20  /* записываем PID и имя файла в канал IPC */</code></p>
      <p><code>21  Mesg_send(writefd, &amp;mesg);</code></p>
      <p><code>22  /* считываем из канала IPC, записываем в stdout */</code></p>
      <p><code>23  mesg.mesg_type = getpid();</code></p>
      <p><code>24  while ((n = Mesg_recv(readfd, &amp;mesg)) &gt; 0)</code></p>
      <p><code>25   Write(STDOUT_FILENO, mesg.mesg_data, n);</code></p>
      <p><code>26 }</code> </p>
     </section>
     <section>
      <title>
       <p>Пример: одна очередь для каждого клиента</p>
      </title>
      <p>Изменим теперь предыдущий пример таким образом, чтобы все запросы клиентов передавались по одной очереди, но для отправки ответов использовалась бы отдельная очередь для каждого клиента. На рис. 6.3 изображена схема такого приложения. </p>
      <image l:href="#Any2FbImgLoader131"/>
      <p>Рис. 6.3. Одна очередь для сервера и по одной для каждого клиента</p>
      <empty-line/>
      <p>Ключ очереди сервера должен быть известен клиентам, а сами клиенты создают свои очереди с ключом IPC_PRIVATE. Вместо передачи серверу идентификатора процесса клиенты сообщают ему идентификатор своей очереди, в которую сервер направляет свой ответ. Этот сервер является параллельным: для каждого нового клиента порождается отдельный процесс.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>При такой схеме может возникнуть проблема в случае «гибели» клиента, потому что тогда сообщения останутся в его очереди навсегда (по крайней мере до перезагрузки ядра или явного удаления очереди другим процессом).</p>
      </cite>
      <p>Нижеследующие заголовочные файлы и функции не претерпевают изменений по сравнению с предыдущими версиями:</p>
      <p>&#9632; mesg.h (листинг 4.12);</p>
      <p>&#9632; svmsg.h (листинг 6.7);</p>
      <p>&#9632; функция main сервера (листинг 6.12);</p>
      <p>&#9632; функция mesg_send (листинг 4.13).</p>
      <p>Функция main клиента приведена в листинге 6.16; она слегка изменилась по сравнению с листингом 6.14. Мы открываем очередь сервера с известным ключом (MQ_KEY1) и создаем нашу собственную очередь с ключом IPC_PRIVATE. Два идентификатора этих очередей становятся аргументами функции client (листинг 6.17). После завершения работы клиента его персональная очередь удаляется.</p>
      <subtitle>Листинг 6.16. Функция main клиента</subtitle>
      <p><code>//svmsgmpxnq/client_main.с</code></p>
      <p><code>1  #include "svmsg.h"</code></p>
      <empty-line/>
      <p><code>2  void client(int, int);</code></p>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int readid, writeid;</code></p>
      <p><code>7   /* сервер должен создать свою очередь */</code></p>
      <p><code>8   writeid = Msgget(MQ_KEY1, 0);</code></p>
      <p><code>9   /* мы создаем свою собственную очередь */</code></p>
      <p><code>10  readid = Msgget(IPC_PRIVATE, SVMSG_MODE | IPC_CREAT);</code></p>
      <p><code>11  client(readid, writeid);</code></p>
      <p><code>12  /* и удаляем нашу собственную очередь */</code></p>
      <p><code>13  Msgctl(readid, IPC_RMID, NULL);</code></p>
      <p><code>14  exit(0);</code></p>
      <p><code>15 }</code></p>
      <subtitle>Листинг 6.17. Функция client</subtitle>
      <p><code>//svmsgmpxnq/client.с</code></p>
      <p><code>1  #include "mesg.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  client(int readid, int writeid)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   size_t len;</code></p>
      <p><code>6   ssize_t n;</code></p>
      <p><code>7   char *ptr;</code></p>
      <p><code>8   struct mymesg mesg;</code></p>
      <p><code>9   /* инициализируем буфер идентификатором очереди и пробелом */</code></p>
      <p><code>10  snprintf(mesg.mesg_data, MAXMESGDATA, "%d ", readid);</code></p>
      <p><code>11  len = strlen(mesg.mesg_data);</code></p>
      <p><code>12  ptr = mesg.mesg_data + len;</code></p>
      <p><code>13  /* считываем имя файла */</code></p>
      <p><code>14  Fgets(ptr, MAXMESGDATA – len, stdin);</code></p>
      <p><code>15  len = strlen(mesg.mesg_data);</code></p>
      <p><code>16  if (mesg.mesg_data[len-1] == '\n')</code></p>
      <p><code>17   len--; /* удаляем перевод строки fgets() */</code></p>
      <p><code>18  mesg.mesg_len = len;</code></p>
      <p><code>19  mesg.mesg_type = 1;</code></p>
      <p><code>20  /* отправляем идентификатор очереди и имя файла серверу */</code></p>
      <p><code>21  Mesg_send(writeid, &amp;mesg);</code></p>
      <p><code>22  /* считываем ответ из нашей очереди и записываем его в stdout */</code></p>
      <p><code>23  while ((n = Mesg_recv(readid, &amp;mesg)) &gt; 0)</code></p>
      <p><code>24   Write(STDOUT_FILENO, mesg.mesg_data, n);</code></p>
      <p><code>25 }</code></p>
      <p>В листинге 6.17 приведен текст функции client. Эта функция практически идентична функции из листинга 6.15, но вместо передачи идентификатора процесса клиента на сервер направляется идентификатор очереди клиента. Тип сообщения в структуре mesg остается равным 1, поскольку это значение устанавливается для сообщений, передаваемых в обе стороны.</p>
      <p>В листинге 6.19 приведена функция server. Главное отличие от листинга 6.13 в том, что эта функция представляет собой бесконечный цикл, в котором для каждого нового клиента вызывается fork.</p>
      <subtitle>Установка обработчика сигнала для SIGCHLD</subtitle>
      <p>10 Поскольку для каждого клиента порождается отдельный процесс, нужно позаботиться о процессах-зомби. В разделах 5.9 и 5.10 [24] об этом говорится подробно. Здесь мы просто установим обработчик для сигнала SIGCHLD, и наша функция sig_chld (листинг 6.18) будет вызываться при завершении работы дочернего процесса.</p>
      <p>12-18 Породивший процесс сервера блокируется в вызове mesg_recv, ожидая появления сообщения от очередного клиента.</p>
      <p>25-45 Вызовом fork порождается новый процесс, который производит попытку открыть запрошенный файл и отправляет клиенту либо сообщение об ошибке, либо содержимое файла. Мы преднамеренно поместили вызов fopen в дочерний процесс, а не в родительский, поскольку если файл находится в удаленной файловой системе, его открытие может занять довольно много времени в случае наличия проблем с сетью.</p>
      <p>Функция-обработчик для SIGCHLD приведена в листинге 6.18. Она скопирована с листинга 5.11 [24].</p>
      <subtitle>Листинг 6.18. Обработчик сигнала SIGCHLD, вызывающий waitpid</subtitle>
      <p><code>//svmsgmpxnq/sigchldwaitpid.с</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2 void</code></p>
      <p><code>3 sig_chld(int signo)</code></p>
      <p><code>4 {</code></p>
      <p><code>5  pid_t pid;</code></p>
      <p><code>6  int stat;</code></p>
      <p><code>7  while ((pid = waitpid(-1, &amp;stat, WNOHANG)) &gt; 0);</code></p>
      <p><code>8  return;</code></p>
      <p><code>9 }</code></p>
      <p>Каждый раз при вызове обработчика происходит циклический вызов waitpid для получения статуса завершения работы всех дочерних процессов, которые могли завершить работу. Затем происходит возврат из обработчика сигнала. При этом может возникнуть проблема, поскольку родительский процесс проводит большую часть времени в заблокированном состоянии (при вызове mesg_recv, листинг 6.9). При возвращении из обработчика этот вызов msgrcv прерывается. Функция возвращает ошибку с кодом EINTR, как рассказывается в разделе 5.9 [24]. </p>
      <p>Нам нужно обработать такой возврат из вызванной функции, поэтому мы пишем новую функцию-обертку Mesg_recv, приведенную в листинге 6.20. Эта программа допускает возвращение ошибки с кодом EINTR функцией mesg_recv (которая просто вызывает msgrcv), и, если это происходит, мы просто еще раз вызываем mesg_recv.</p>
      <subtitle>Листинг 6.19. Функция server</subtitle>
      <p><code>//svmsgmpxnq/server.c</code></p>
      <p><code>1  #include "mesg.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  server(int readid, int writeid)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   FILE *fp;</code></p>
      <p><code>6   char *ptr;</code></p>
      <p><code>7   ssize_t n;</code></p>
      <p><code>8   struct mymesg mesg;</code></p>
      <p><code>9   void sig_chld(int);</code></p>
      <p><code>10  Signal(SIGCHLD, sig_chld);</code></p>
      <p><code>11  for (;;) {</code></p>
      <p><code>12   /* считывание имени файла из очереди */</code></p>
      <p><code>13   mesg.mesg_type = 1;</code></p>
      <p><code>14   if ((n = Mesg_recv(readid, &amp;mesg)) == 0) {</code></p>
      <p><code>15    err_msg("pathname missing");</code></p>
      <p><code>16    continue;</code></p>
      <p><code>17   }</code></p>
      <p><code>18   mesg.mesg_data[n] = 40'; /* имя файла */</code></p>
      <p><code>19   if ((ptr = strchr(mesg.mesg_data, ' ')) = NULL) {</code></p>
      <p><code>20    err_msg("bogus request: %s", mesg.mesg_data);</code></p>
      <p><code>21    continue;</code></p>
      <p><code>22   }</code></p>
      <p><code>23   *ptr++ = 0; /* ptr = имя файла */</code></p>
      <p><code>24   writeid = atoi(mesg.mesg_data);</code></p>
      <p><code>25   if (Fork() == 0) { /* дочерний процесс */</code></p>
      <p><code>26    if ((fp = fopen(ptr, "r")) == NULL) {</code></p>
      <p><code>27     /* ошибка: нужно сообщить клиенту */</code></p>
      <p><code>28     snprintf(mesg.mesg_data + n, sizeof(mesg.mesg_data) – n,</code></p>
      <p><code>29      ": can't open, %s\n", strerror(errno));</code></p>
      <p><code>30     mesg.mesg_len = strlen(ptr);</code></p>
      <p><code>31     memmove(mesg.mesg_data, ptr, mesg.mesg_len);</code></p>
      <p><code>32     Mesg_send(writeid, &amp;mesg);</code></p>
      <p><code>33    } else {</code></p>
      <p><code>34     /* файл открыт, копируем клиенту */</code></p>
      <p><code>35     while (Fgets(mesg.mesg_data, MAXMESGDATA, fp) != NULL) {</code></p>
      <p><code>36      mesg.mesg_len = strlen(mesg.mesg_data);</code></p>
      <p><code>37      Mesg_send(writeid, &amp;mesg);</code></p>
      <p><code>38     }</code></p>
      <p><code>39     Fclose(fp);</code></p>
      <p><code>40    }</code></p>
      <p><code>41    /* отправка сообщения нулевой длины, указывающего конец файла */</code></p>
      <p><code>42    mesg.mesg_len = 0;</code></p>
      <p><code>43    Mesg_send(writeid, &amp;mesg);</code></p>
      <p><code>44    exit(0); /* завершение дочернего процесса */</code></p>
      <p><code>45   }</code></p>
      <p><code>46   /* родительский процесс просто зациклен */</code></p>
      <p><code>47  }</code></p>
      <p><code>48 }</code></p>
      <subtitle>Листинг 6.20. Функция-обертка Mesg_recv, обрабатывающая прерванный системный вызов</subtitle>
      <p><code>//svmsgmpxnq/mesg_recv.с</code></p>
      <p><code>10 ssize_t</code></p>
      <p><code>11 Mesg_recv(int id, struct mymesg *mptr)</code></p>
      <p><code>12 {</code></p>
      <p><code>13  ssize_t n;</code></p>
      <p><code>14  do {</code></p>
      <p><code>15   n = mesg_recv(id, mptr);</code></p>
      <p><code>16  } while (n == –1 &amp;&amp; errno == EINTR);</code></p>
      <p><code>17  if (n == –1)</code></p>
      <p><code>18   err_sys("mesg_recv error");</code></p>
      <p><code>19  return(n);</code></p>
      <p><code>20 }</code></p>
     </section>
    </section>
    <section>
     <title>
      <p>6.9. Использование select и poll с очередями сообщений</p>
     </title>
     <p>Одним из недостатков очередей сообщений System V является то, что они идентифицируются не дескрипторами, а идентификаторами. Поэтому с ними нельзя использовать функции select и poll (глава 6 [24]).</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>На самом деле одна из версий Unix, а именно AIX (созданная IBM), позволяет использовать select с очередями сообщений System V, а не только с дескрипторами. Но эта возможность имеется только в AIX.</p>
     </cite>
     <p>Этот недостаток часто всплывает, когда возникает необходимость написать сервер, работающий одновременно с сетевыми соединениями и с IPC. Сетевые соединения с использованием интерфейса сокетов или XTI ([24]) используют дескрипторы, что позволяет вызывать select или poll. Программные каналы и FIFO также идентифицируются дескрипторами, поэтому для них тоже допустимо использование этих функций.</p>
     <p>Одним из решений этой проблемы является следующее: сервер должен создать канал и породить процесс, который будет заблокирован при вызове msgrcv. При получении сообщения произойдет возврат из msgrcv, дочерний процесс получит это сообщение из очереди и запишет его в канал. Затем родительский процесс может использовать функцию select для канала совместно с сетевыми соединениями. Недостаток этого подхода в том, что сообщения обрабатываются трижды: при считывании дочерним процессом с помощью msgrcv, при отправке в канал и при считывании из канала родительским процессом. Для ускорения обработки порожденный процесс может создать сегмент совместно используемой с породившим процессом памяти, а канал использовать как флаг (упражнение 12.5).</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В листинге 5.12 мы привели решение с использованием очередей сообщений Posix, которое не требовало вызова fork. Для очередей сообщений Posix можно было обойтись одним процессом, поскольку они предусматривают уведомление о появлении нового сообщения с помощью сигнала. Для очередей System V такая возможность не предусмотрена, поэтому приходится порождать процесс, который будет блокироваться при вызове msgrcv.</p>
     </cite>
     <p>Другим недостатком очередей сообщений System V по сравнению с сетевым интерфейсом является невозможность считывания сообщений из оперативной памяти (возможность, предоставляемая флагом MSG_PEEK для функций recv, recvfrom, recvmsg [24, с. 356]). Если бы такая возможность имелась, в предложенной только что схеме клиент-сервер (для обхода проблемы с select) можно было бы сделать работу более эффективной, указав флаг peek при вызове msgrcv дочерним процессом и записав 1 байт в канал при приходе сообщения, а родительский процесс тогда просто считывал бы сообщение из очереди.</p>
    </section>
    <section>
     <title>
      <p>6.10. Ограничения, накладываемые на очереди сообщений</p>
     </title>
     <section>
      <p>Как отмечалось в разделе 3.8, на очереди сообщений часто накладываются системные oгрaничeния. В табл. 6.2 приведены значения этих oгрaничeний для двух конкретных реализаций. Первая колонка представляет собой традиционное имя System V для переменной ядра, хранящей это ограничение.</p>
      <empty-line/>
      <p>Таблица 6.2. Характерные значения ограничений для очередей сообщений</p>
      <table>
       <tr align="left">
        <th align="left" valign="top">Имя</th>
        <th align="left" valign="top">Описание</th>
        <th align="left" valign="top">DUnix 4.0B</th>
        <th align="left" valign="top">Solaris 2.6</th>
       </tr>
       <tr align="left">
        <td align="left" valign="top">msgmax</td>
        <td align="left" valign="top">Максимальное количество байтов в сообщении</td>
        <td align="left" valign="top">8192</td>
        <td align="left" valign="top">2048</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">msgmnb</td>
        <td align="left" valign="top">Максимальное количество байтов в очереди сообщений</td>
        <td align="left" valign="top">16384</td>
        <td align="left" valign="top">4096</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">msgmni</td>
        <td align="left" valign="top">Максимальное количество очередей сообщений в системе</td>
        <td align="left" valign="top">64</td>
        <td align="left" valign="top">50</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">msgtlq</td>
        <td align="left" valign="top">Максимальное количество сообщений в системе</td>
        <td align="left" valign="top">40</td>
        <td align="left" valign="top">40 </td>
       </tr>
      </table>
      <p>В этом разделе мы хотели показать типичные значения ограничений, чтобы помочь в планировании переносимых программ. При выполнении приложений, активно использующих очереди сообщений, обычно требуется настройка этих (или аналогичных) параметров ядра (что описано в разделе 3.8).</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>В листинге 6.21 приведен текст программы, которая определяет четыре ограничения, показанные в табл. 6.2.</p>
      <subtitle>Листинг 6.21. Определение системных ограничений для очередей сообщений System V</subtitle>
      <p><code>//svmsg/limits.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #define MAX_DATA 64*1024</code></p>
      <p><code>3  #define MAX_NMESG 4096</code></p>
      <p><code>4  #define MAX_NIDS 4096</code></p>
      <p><code>5  int max_mesg;</code></p>
      <empty-line/>
      <p><code>6  struct mymesg {</code></p>
      <p><code>7   long type;</code></p>
      <p><code>8   char data[MAX_DATA];</code></p>
      <p><code>9  } mesg;</code></p>
      <empty-line/>
      <p><code>10 int</code></p>
      <p><code>11 main(int argc, char **argv)</code></p>
      <p><code>12 {</code></p>
      <p><code>13  int i, j, msqid, qid[MAX_NIDS];</code></p>
      <p><code>14  /* определение максимального размера сообщения */</code></p>
      <p><code>15  msqid = Msgget(IPC_PRIVATE, SVMSG_MODE | IPC_CREAT);</code></p>
      <p><code>16  mesg.type = 1;</code></p>
      <p><code>17  for (i = MAX_DATA; i &gt; 0; i –= 128) {</code></p>
      <p><code>18   if (msgsnd(msqid, &amp;mesg, i, 0) == 0) {</code></p>
      <p><code>19    printf("maximum amount of data per message = %d\n", i);</code></p>
      <p><code>20    max_mesg = i;</code></p>
      <p><code>21    break;</code></p>
      <p><code>22   }</code></p>
      <p><code>23   if (errno != EINVAL)</code></p>
      <p><code>24    err_sys("msgsnd error for length %d", i);</code></p>
      <p><code>25  }</code></p>
      <p><code>26  if (i == 0)</code></p>
      <p><code>27   err_quit("i == 0");</code></p>
      <p><code>28  Msgct(lmsqid, IPC_RMID, NULL);</code></p>
      <p><code>29  /* количество сообщений в очереди */</code></p>
      <p><code>30  mesg.type = 1;</code></p>
      <p><code>31  for (i = 8; i &lt;= max_mesg; i *= 2) {</code></p>
      <p><code>32   msqid = Msgget(IPC_PRIVATE, SVMSG_MODE | IPC_CREAT);</code></p>
      <p><code>33   for (j = 0; j &lt; MAX_NMESG; j++) {</code></p>
      <p><code>34    if (msgsnd(msqid, &amp;mesg, i, IPC_NOWAIT) != 0) {</code></p>
      <p><code>35     if (errno == EAGAIN)</code></p>
      <p><code>36      break;</code></p>
      <p><code>37     err_sys("msgsnd error, i = %d, j = %d", i, j);</code></p>
      <p><code>38     break;</code></p>
      <p><code>39    }</code></p>
      <p><code>40   }</code></p>
      <p><code>41   printf("%d %d-byte messages were placed onto queue,", j, i);</code></p>
      <p><code>42   printf(" %d bytes total\n". i*j);</code></p>
      <p><code>43   Msgctl(msqid, IPC_RMID, NULL);</code></p>
      <p><code>44  }</code></p>
      <p><code>45  /* максимальное количество идентификаторов */</code></p>
      <p><code>46  mesg.type = 1;</code></p>
      <p><code>47  for (i = 0; i &lt;= MAX_NIDS; i++) {</code></p>
      <p><code>48   if ((qid[i] = msgget(IPC_PRIVATE, SVMSG_MODE | IPC_CREAT)) == –1) {</code></p>
      <p><code>49    printf("%d identifiers open at once\n", i);</code></p>
      <p><code>50    break;</code></p>
      <p><code>51   }</code></p>
      <p><code>52  }</code></p>
      <p><code>53  for (j = 0; j &lt; i; j++)</code></p>
      <p><code>54   Msgctl(qid[j], IPC_RMID, NULL);</code></p>
      <p><code>55  exit(0);</code></p>
      <p><code>56 }</code></p>
      <subtitle>Определение максимального размера сообщения</subtitle>
      <p>14-28 Для определения максимально возможного размера сообщения мы пытаемся послать сообщение, в котором будет 65 536 байт данных, и если эта попытка оказывается неудачной, уменьшаем этот объем до 65 408, и т.д., пока вызов msgsnd не окажется успешным.</p>
      <subtitle>Сколько сообщений различного размера может быть помещено в очередь?</subtitle>
      <p>29-44 Теперь мы начинаем с 8-байтовых сообщений и смотрим, сколько их поместится в очередь. После определения этого ограничения мы удаляем очередь (сбрасывая все эти сообщения) и повторяем процедуру с 16-байтовыми сообщениями. Мы повторяем это до тех пор, пока не будет достигнут максимальный размер сообщения из первого пункта. Ожидается, что небольшие сообщения будут превышать ограничение по количеству сообщений в очереди, а большие — ограничение по количеству байтов.</p>
      <subtitle>Сколько идентификаторов может быть открыто одновременно?</subtitle>
      <p>45-54 Обычно есть системное ограничение на количество одновременно открытых идентификаторов. Оно определяется непосредственно созданием очередей до тех пор, пока не произойдет ошибка при вызове msgget.</p>
      <p>Запустим эту программу сначала в Solaris 2.6, а затем в Digital Unix 4.0B, и результаты подтвердят приведенные в табл. 6.2 величины:</p>
      <p><code>solaris % <strong>limits</strong></code></p>
      <p><code>maximum amount of data per message = 2048</code></p>
      <p><code>40 8-byte messages were placed on queue, 320 bytes total</code></p>
      <p><code>40 16-byte messages were placed on queue, 640 bytes total</code></p>
      <p><code>40 32-byte messages were placed on queue, 1280 bytes total</code> </p>
      <p><code>40 64-byte messages were placed on queue, 2560 bytes total</code></p>
      <p><code>32 128-byte messages were placed on queue, 4096 bytes total</code></p>
      <p><code>16 256-byte messages were placed on queue, 4096 bytes total</code></p>
      <p><code>8 512-byte messages were placed on queue, 4096 bytes total</code></p>
      <p><code>4 1024-byte messages were placed on queue, 4096 bytes total</code></p>
      <p><code>2 2048-byte messages were placed on queue, 4096 bytes total</code></p>
      <p><code>50 identifiers open at once</code></p>
      <empty-line/>
      <p><code>alpha % <strong>limits</strong></code></p>
      <p><code>maximum amount of data per message = 8192</code></p>
      <p><code>40 8-byte messages were placed on queue, 320 bytes total</code></p>
      <p><code>40 16-byte messages were placed on queue, 640 bytes total</code></p>
      <p><code>40 32-byte messages were placed on queue, 1280 bytes total</code></p>
      <p><code>40 64-byte messages were placed on queue, 2560 bytes total</code></p>
      <p><code>40 128-byte messages were placed on queue, 5120 bytes total</code></p>
      <p><code>40 256-byte messages were placed on queue, 10240 bytes total</code></p>
      <p><code>32 512-byte messages were placed on queue, 16384 bytes total</code></p>
      <p><code>16 1024-byte messages were placed on queue, 16384 bytes total</code></p>
      <p><code>8 2048-byte messages were placed on queue, 16384 bytes total</code></p>
      <p><code>4 4096-byte messages were placed on queue, 16384 bytes total</code></p>
      <p><code>2 8192-byte messages were placed on queue, 16384 bytes total</code></p>
      <p><code>63 identifiers at once</code></p>
      <p>Причина, по которой в Digital Unix 4.0В получился результат 63 идентификатора, а не 64, как в табл. 6.2, заключается в том, что один идентификатор всегда используется системным демоном.</p>
     </section>
    </section>
    <section>
     <title>
      <p>6.11.Резюме</p>
     </title>
     <p>Очереди сообщений System V аналогичны очередям сообщений Posix. При создании новых приложений следует рассмотреть возможность использования очередей сообщений Posix, но большое количество существующих программ использует очереди сообщений System V. Тем не менее переписать их для использования очередей Posix вместо очередей System V не должно быть слишком сложно. Главный недостаток очередей Posix заключается в невозможности считывания сообщений с произвольным приоритетом. Ни один из типов очередей не использует обычные дескрипторы, что делает сложным применение функций select и poll для очередей сообщений.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Почему на рис. 6.2 для сообщений, передаваемых серверу, используется тип 1?</p>
     <p>2. Что произойдет с программой с рис. 6.2, если злоумышленник отправит на сервер множество сообщений, но не будет считывать ответы? Что в такой же ситуации произойдет с программой с рис. 6.3?</p>
     <p>3. Переделайте реализацию очередей сообщений Posix из раздела 5.8 для использования очередей сообщений System V вместо отображения в память. </p>
    </section>
   </section>
  </section>
  <section>
   <title>
    <p>ЧАСТЬ 3</p>
    <p>СИНХРОНИЗАЦИЯ</p>
   </title>
   <section>
    <title>
     <p>ГЛАВА 7</p>
     <p>Взаимные исключения и условные переменные</p>
    </title>
    <section>
     <title>
      <p>7.1. Введение</p>
     </title>
     <p>Эта глава начинается с обсуждения синхронизации — принципов синхронизации действий нескольких программных потоков или процессов. Обычно это требуется для предоставления нескольким потокам или процессам совместного доступа к данным. Взаимные исключения (mutual exclusion — mutex) и условные переменные (conditional variables) являются основными средствами синхронизации.</p>
     <p>Взаимные исключения и условные переменные появились в стандарте Posix.1 для программных потоков, и всегда могут быть использованы для синхронизации отдельных потоков одного процесса. Стандарт Posix также разрешает использовать взаимное исключение или условную переменную и для синхронизации нескольких процессов, если это исключение или переменная хранится в области памяти, совместно используемой процессами.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Эта возможность является дополнительной согласно Posix, но обязательной в Unix 98 (см. табл. 1.3).</p>
     </cite>
     <p>В этой главе мы разберем классическую схему производитель-потребитель, используя взаимные исключения и условные переменные. В примере будут использоваться программные потоки, а не процессы, поскольку предоставить потокам общий буфер данных, предполагаемый в этой задаче, легко, а вот создать буфер данных между процессами можно только с помощью одной из форм разделяемой памяти (которая будет описана только в четвертой части книги). Еще одно решение этой задачи, уже с использованием семафоров, появится в главе 10.</p>
    </section>
    <section>
     <title>
      <p>7.2. Взаимные исключения: установка и снятие блокировки</p>
     </title>
     <p>Взаимное исключение (mutex) является простейшей формой синхронизации. Оно используется для защиты критической области (critical region), предотвращая одновременное выполнение участка кода несколькими потоками (если взаимное исключение используется потоками) или процессами (если взаимное исключение используется несколькими процессами). Выглядит это обычно следующим образом:</p>
     <p><code>блокировать_mutex(…);</code></p>
     <p><code>критическая область</code></p>
     <p><code>разблокировать_mutex(…);</code></p>
     <p>Поскольку только один поток может заблокировать взаимное исключение в любой момент времени, это гарантирует, что только один поток будет выполнять код, относящийся к критической области.</p>
     <p>Взаимные исключения по стандарту Posix объявлены как переменные с типом pthread_mutex_t. Если переменная-исключение выделяется статически, ее можно инициализировать константой PTHREAD_MUTEX_INITIALIZER:</p>
     <p><code>static pthread_mutex_t lock=PTHREAD_MUTEX_INITIALIZER;</code></p>
     <p>При динамическом выделении памяти под взаимное исключение (например, вызовом mallос) или при помещении его в разделяемую память мы должны инициализировать эту переменную во время выполнения, вызвав функцию pthread_ mutex_init, как показано в разделе 7.7.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Вам может попасться код, в котором взаимные исключения не инициализируются, поскольку в реализации инициализирующая константа имеет значение 0, а статические переменные автоматически инициализируются этим значением. Однако такой код некорректен.</p>
     </cite>
     <p>Следующие три функции используются для установки и снятия блокировки взаимного исключения:</p>
     <p><code>#include &lt;pthread.h&gt;</code></p>
     <p><code>int pthread_mutex_lock(pthread_mutex_t <emphasis>*mptr</emphasis>);</code></p>
     <p><code>int pthread_mutex_trylock(pthread_mutex_t <emphasis>*mptr</emphasis>);</code></p>
     <p><code>int pthread_mutex_unlock(pthread_mutex_t <emphasis>*mptr</emphasis>);</code></p>
     <p><code>/* Все три возвращают 0 в случае успешного завершения, положительное значение Еххх – случае ошибки */</code></p>
     <p>При попытке заблокировать взаимное исключение, которое уже заблокировано другим потоком, функция pthread_mutex_lock будет ожидать его разблокирования, a pthread_mutex_trylock (неблокируемая функция) вернет ошибку с кодом EBUSY.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Если несколько процессов ожидают освобождения взаимного исключения, какой из них начнет выполняться первым? Одна из возможностей, добавленных стандартом 1003.1b-1993, заключается в установке приоритета потоков. Мы не будем углубляться в эту область, отметим лишь, что разным потокам могут быть присвоены разные значения приоритета и функции синхронизации (работающие с взаимными исключениями, блокировками чтения-записи и семафорами) будут передавать управление заблокированному потоку с наивысшим значением приоритета. Раздел 5.5 книги [3] описывает возможности планирования выполнения в Posix.1 более подробно.</p>
     </cite>
     <p>Хотя мы говорим о защите критической области кода программы, на самом деле речь идет о защите данных, с которыми работает эта часть кода. То есть взаимное исключение обычно используется для защиты совместно используемых несколькими потоками или процессами данных.</p>
     <p>Взаимные исключения представляют собой блокировку коллективного пользования. Это значит, что если совместно используемые данные представляют собой, например, связный список, то все потоки, работающие с этим списком, должны блокировать взаимное исключение. Ничто не может помешать потоку работать со списком, не заблокировав взаимное исключение. Взаимные исключения предполагают добровольное сотрудничество потоков.</p>
    </section>
    <section>
     <title>
      <p>7.3. Схема производитель-потребитель</p>
     </title>
     <p>Одна из классических задач на синхронизацию называется задачей производителя и потребителя. Она также известна как задача ограниченного буфера. Один или несколько производителей (потоков или процессов) создают данные, которые обрабатываются одним или несколькими потребителями. Эти данные передаются между производителями и потребителями с помощью одной из форм IPC.</p>
     <p>С этой задачей мы регулярно сталкиваемся при использовании каналов Unix. Команда интерпретатора, использующая канал</p>
     <p><code>grep pattern chapters.* | wc -l</code></p>
     <p>является примером такой задачи. Программа grep выступает как производитель (единственный), a wc — как потребитель (тоже единственный). Канал используется как форма IPC. Требуемая синхронизация между производителем и потребителем обеспечивается ядром, обрабатывающим команды write производителя и read покупателя. Если производитель опережает потребителя (канал переполняется), ядро приостанавливает производителя при вызове write, пока в канале не появится место. Если потребитель опережает производителя (канал опустошается), ядро приостанавливает потребителя при вызове read, пока в канале не появятся данные.</p>
     <p>Такой тип синхронизации называется неявным; производитель и потребитель не знают о том, что синхронизация вообще осуществляется. Если бы мы использовали очередь сообщений Posix или System V в качестве средства IPC между производителем и потребителем, ядро снова взяло бы на себя обеспечение синхронизации.</p>
     <p>При использовании разделяемой памяти как средства IPC производителя и потребителя, однако, требуется использование какого-либо вида явной синхронизации. Мы продемонстрируем это на использовании взаимного исключения. Схема рассматриваемого примера изображена на рис. 7.1.</p>
     <p>В одном процессе у нас имеется несколько потоков-производителей и один поток-потребитель. Целочисленный массив buff содержит производимые и потребляемые данные (данные совместного пользования). Для простоты производители просто устанавливают значение buff[0] в 0, buff [1] в 1 и т.д. Потребитель перебирает элементы массива, проверяя правильность записей.</p>
     <p>В этом первом примере мы концентрируем внимание на синхронизации между отдельными потоками-производителями. Поток-потребитель не будет запущен, пока все производители не завершат свою работу. В листинге 7.1 приведена функция main нашего примера.</p>
     <image l:href="#Any2FbImgLoader137"/>
     <p>Рис. 7.1. Производители и потребитель</p>
     <empty-line/>
     <subtitle>Листинг 7.1.<a l:href="#n_1" type="note">[1]</a> Функция main</subtitle>
     <p><code>//mutex/prodcons2.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define MAXNITEMS 1000000</code></p>
     <p><code>3  #define MAXNTHREADS 100</code></p>
     <p><code>4  int nitems; /* только для чтения потребителем и производителем */</code></p>
     <empty-line/>
     <p><code>5  struct {</code></p>
     <p><code>6   pthread_mutex_t mutex;</code></p>
     <p><code>7   int buff[MAXNITEMS];</code></p>
     <p><code>8   int nput;</code></p>
     <p><code>9   int nval;</code></p>
     <p><code>10 } shared = {</code></p>
     <p><code>11  PTHREAD_MUTEX_INITIALIZER</code></p>
     <p><code>12 };</code></p>
     <empty-line/>
     <p><code>13 void *produce(void *), *consume(void *);</code></p>
     <empty-line/>
     <p><code>14 int</code></p>
     <p><code>15 main(int argc, char **argv)</code></p>
     <p><code>16 {</code></p>
     <p><code>17  int i, nthreads, count[MAXNTHREADS];</code></p>
     <p><code>18  pthread_t tid_produce[MAXNTHREADS], tid_consume;</code></p>
     <p><code>19  if (argc != 3)</code></p>
     <p><code>20   err_quit("usage: prodcons2 &lt;#items&gt; &lt;#threads&gt;");</code></p>
     <p><code>21  nitems = min(atoi(argv[1]), MAXNITEMS);</code></p>
     <p><code>22  nthreads = min(atoi(argv[2]), MAXNTHREADS);</code></p>
     <p><code>23  Set_concurrency(nthreads);</code></p>
     <p><code>24  /* запуск всех потоков-производителей */</code></p>
     <p><code>25  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>26   count[i] = 0;</code></p>
     <p><code>27   Pthread_create(&amp;tid_produce[i], NULL, produce, &amp;count[i]);</code></p>
     <p><code>28  }</code></p>
     <p><code>29  /* ожидание завершения всех производителей */</code></p>
     <p><code>30  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>31   Pthread_join(tid_produce[i], NULL);</code></p>
     <p><code>32   printf("count[%d] = %d\n", i, count[i]);</code></p>
     <p><code>33  }</code></p>
     <p><code>34  /* запуск и ожидание завершения потока-потребителя */</code></p>
     <p><code>35  Pthread_create(&amp;tid_consume, NULL, consume, NULL);</code></p>
     <p><code>36  Pthread_join(tid_consume, NULL);</code></p>
     <p><code>37  exit(0);</code></p>
     <p><code>38 }</code></p>
     <subtitle>Совместное использование глобальных переменных потоками</subtitle>
     <p>4-12 Эти переменные совместно используются потоками. Мы объединяем их в структуру с именем shared вместе с взаимным исключением, чтобы подчеркнуть, что доступ к ним можно получить только вместе с ним. Переменная nput хранит индекс следующего элемента массива buff, подлежащего обработке, a nval содержит следующее значение, которое должно быть в него помещено (0, 1, 2 и т.д.). Мы выделяем память под эту структуру и инициализируем взаимное исключение, используемое для синхронизации потоков-производителей.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Мы всегда будем стараться размещать совместно используемые данные вместе со средствами синхронизации, к ним относящимися (взаимными исключениями, условными переменными, семафорами), в одной структуре, как мы сделали в этом примере. Это хороший стиль программирования. Однако во многих случаях совместно используемые данные являются динамическими, представляя собой, например, связный список. Мы, наверное, сможем поместить в структуру первый элемент списка вместе со средствами синхронизации (как в структуре mq_hdr в листинге 5.16), но оставшаяся часть списка в структуру не попадет. Следовательно, это решение не всегда является идеальным.</p>
     </cite>
     <subtitle>Аргументы командной строки</subtitle>
     <p>19-22 Первый аргумент командной строки указывает количество элементов, которые будут произведены производителями, а второй — количество запускаемых потоков-производителей.</p>
     <subtitle>Установка уровня параллельности</subtitle>
     <p>23 Функция set_concurrency (наша собственная) указывает подсистеме потоков количество одновременно выполняемых потоков. В Solaris 2.6 она просто вызывает thr_setconcurrency, причем ее запуск необходим, если мы хотим, чтобы у нескольких процессов-производителей была возможность начать выполняться. Если мы не сделаем этого вызова в системе Solaris, будет запущен только первый поток. В Digital Unix 4.0B наша функция set_concurrency не делает ничего, поскольку в этой системе по умолчанию все потоки процесса имеют равные права на вычислительные ресурсы.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Unix 98 требует наличия функции pthread_setconcurrency, выполняющей это же действие. Эта функция требуется для тех реализаций, которые мультиплексируют пользовательские потоки (создаваемые функцией pthread_create) на небольшое множество выполняемых потоков ядра. Такие реализации часто называются «многие-к-немногим» (many-to-few), «двухуровневые» (two-level) или «М-на-N» (M-to-N). В разделе 5.6 книги [3] отношения между пользовательскими потоками и потоками ядра рассматриваются более подробно.</p>
     </cite>
     <subtitle>Создание процессов-производителей</subtitle>
     <p>24-28 Создаются потоки-производители, каждый из которых вызывает функцию produce. Идентификаторы потоков хранятся в массиве tid_produce. Аргументом каждого потока-производителя является указатель на элемент массива count. Счетчики инициализируются значением 0, и каждый поток увеличивает значение своего счетчика на 1 при помещении очередного элемента в буфер. Содержимое массива счетчиков затем выводится на экран, так что мы можем узнать, сколько элементов было помещено в буфер каждым из потоков.</p>
     <subtitle>Ожидание завершения работы производителей, запуск потребителя</subtitle>
     <p>29-36 Мы ожидаем завершения работы всех потоков-производителей, выводя содержимое счетчика для каждого потока, а затем запускаем единственный процесс-потребитель. Таким образом (на данный момент) мы исключаем необходимость синхронизации между потребителем и производителями. Мы ждем завершения работы потребителя, а затем завершаем работу процесса. В листинге 7.2 приведен текст функций produce и consume.</p>
     <subtitle>Листинг 7.2. Функции produce и consume</subtitle>
     <p><code>//mutex/prodcons2.с</code></p>
     <p><code>39 void *</code></p>
     <p><code>40 produce(void *arg)</code></p>
     <p><code>41 {</code></p>
     <p><code>42  for (;;) {</code></p>
     <p><code>43   Pthread_mutex_lock(&amp;shared.mutex);</code></p>
     <p><code>44   if (shared.nput &gt;= nitems) {</code></p>
     <p><code>45    Pthread_mutex_unlock(&amp;shared.mutex);</code></p>
     <p><code>46    return(NULL); /* массив полный, готово */</code></p>
     <p><code>47   }</code></p>
     <p><code>48   shared.buff[shared.nput] = shared.nval;</code></p>
     <p><code>49   shared.nput++;</code></p>
     <p><code>50   shared.nval++;</code></p>
     <p><code>51   Pthread_mutex_unlock(&amp;shared.mutex);</code></p>
     <p><code>52   *((int *) arg) += 1;</code></p>
     <p><code>53  }</code></p>
     <p><code>54 }</code></p>
     <empty-line/>
     <p><code>55 void *</code></p>
     <p><code>56 consume(void *arg)</code></p>
     <p><code>57 {</code></p>
     <p><code>58  int i;</code></p>
     <p><code>59  for (i = 0; i &lt; nitems; i++) {</code></p>
     <p><code>60   if (shared.buff[i] != i)</code></p>
     <p><code>61    printf("buff[%d] = %d\n", i, shared.buff[i]);</code></p>
     <p><code>62  }</code></p>
     <p><code>63  return(NULL);</code></p>
     <p><code>64 }</code></p>
     <subtitle>Формирование данных</subtitle>
     <p>42-53 Критическая область кода производителя состоит из проверки на достижение конца массива (завершение работы)</p>
     <p><code>if (shared.nput &gt;= nitems)</code></p>
     <p>и трех строк, помещающих очередное значение в массив:</p>
     <p><code>shared.buff[shared.nput] = shared.nval;</code></p>
     <p><code>shared.nput++;</code></p>
     <p><code>shared.nval++;</code></p>
     <p>Мы защищаем эту область с помощью взаимного исключения, не забыв разблокировать его после завершения работы. Обратите внимание, что увеличение элемента count (через указатель arg) не относится к критической области, поскольку у каждого потока счетчик свой (массив count в функции main). Поэтому мы не включаем эту строку в блокируемую взаимным исключением область. Один из принципов хорошего стиля программирования заключается в минимизации объема кода, защищаемого взаимным исключением.</p>
     <subtitle>Потребитель проверяет содержимое массива</subtitle>
     <p>59-62 Потребитель проверяет правильность значений всех элементов массива и выводит сообщение в случае обнаружения ошибки. Как уже говорилось, эта функция запускается в единственном экземпляре и только после того, как все потоки-производители завершат свою работу, так что надобность в синхронизации отсутствует.</p>
     <p>При запуске только что описанной программы с пятью процессами-производителями, которые должны вместе создать один миллион элементов данных, мы получим следующий результат:</p>
     <p><code>solaris % <strong>prodcons2 1000000 5</strong></code></p>
     <p><code>count[0] = 167165</code></p>
     <p><code>count[1] = 249891</code></p>
     <p><code>count[2] = 194221</code></p>
     <p><code>count[3] = 191815</code></p>
     <p><code>count[4] = 196908</code></p>
     <p>Как мы отмечали ранее, если убрать вызов set_concurrency, в системе Solaris 2.6 значение count[0] будет 1000000, а все остальные счетчики будут нулевыми.</p>
     <p>Если убрать из этого примера блокировку с помощью взаимного исключения, он перестанет работать, как и предполагается. Потребитель обнаружит множество элементов buff[i], значения которых будут отличны от i. Также мы можем убедиться, что удаление блокировки ничего не изменит, если будет выполняться только один поток.</p>
    </section>
    <section>
     <title>
      <p>7.4. Блокировка и ожидание</p>
     </title>
     <p>Продемонстрируем теперь, что взаимные исключения предназначены для блокирования, но не для ожидания. Изменим наш пример из предыдущего раздела таким образом, чтобы потребитель запускался сразу же после запуска всех производителей. Это даст возможность потребителю обрабатывать данные по мере их формирования производителями в отличие от пpoгрaммы в листинге 7.1, в которой потребитель не запускался до тех пор, пока все производители не завершали свою работу. Теперь нам придется синхронизовать потребителя с производителями, чтобы первый обрабатывал только данные, уже сформированные последними.</p>
     <p>В листинге 7.3 приведен текст функции main. Начало кода (до объявления функции main) не претерпело никаких изменений по сравнению с листингом 7.1.</p>
     <subtitle>Листинг 7.3. Функция main: запуск потребителя сразу после запуска производителей</subtitle>
     <p><code>//mutex/prodcons3.c</code></p>
     <p><code>14 int</code></p>
     <p><code>15 main(int argc, char **argv)</code></p>
     <p><code>16 {</code></p>
     <p><code>17  int i, nthreads, count[MAXNTHREADS];</code></p>
     <p><code>18  pthread_t tid_produce[MAXNTHREADS], tid_consume;</code></p>
     <p><code>19  if (argc != 3)</code></p>
     <p><code>20   err_quit("usage: prodcons3 &lt;#items&gt; &lt;#threads&gt;");</code></p>
     <p><code>21  nitems = min(atoi(argv[1]), MAXNITEMS);</code></p>
     <p><code>22  nthreads = min(atoi(argv[2]), MAXNTHREADS);</code></p>
     <p><code>23  /* создание всех производителей и одного потребителя */</code></p>
     <p><code>24  Set_concurrency(nthreads + 1);</code></p>
     <p><code>25  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>26   count[i] = 0;</code></p>
     <p><code>27   Pthread_create(&amp;tid_produce[i], NULL, produce, &amp;count[i]);</code></p>
     <p><code>28  }</code></p>
     <p><code>29  Pthread_create(&amp;tid_consume, NULL, consume, NULL);</code></p>
     <p><code>30  /* ожидание завершения производителей и потребителя */</code></p>
     <p><code>31  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>32   Pthread_join(tid_produce[i], NULL);</code></p>
     <p><code>33   printf("count[%d] = %d\n", i, count[i]);</code></p>
     <p><code>34  }</code></p>
     <p><code>35  Pthread_join(tid_consume, NULL);</code></p>
     <p><code>36  exit(0);</code></p>
     <p><code>37 }</code></p>
     <p>24 Мы увеличиваем уровень параллельного выполнения на единицу, чтобы учесть поток-потребитель, выполняемый параллельно с производителями.</p>
     <p>25-29 Поток-потребитель создается сразу же после создания потоков-производителей.</p>
     <p>Функция produce по сравнению с листингом 7.2 не изменяется. В листинге 7.4 приведен текст функции consume, вызывающей новую функцию consume_wait. </p>
     <subtitle>Листинг 7.4. Функции consume и consume_wait</subtitle>
     <p><code>//mutex/prodcons3.с</code></p>
     <p><code>54 void</code></p>
     <p><code>55 consume wait(int i)</code></p>
     <p><code>56 {</code></p>
     <p><code>57  for (;;) {</code></p>
     <p><code>58   Pthread_mutex_lock(&amp;shared.mutex);</code></p>
     <p><code>59   if (i &lt; shared.nput) {</code></p>
     <p><code>60    Pthread_mutex_unlock(&amp;shared.mutex);</code></p>
     <p><code>61    return; /* элемент готов */</code></p>
     <p><code>62   }</code></p>
     <p><code>63   Pthread_mutex_unlock(&amp;shared.mutex);</code></p>
     <p><code>64  }</code></p>
     <p><code>65 }</code></p>
     <empty-line/>
     <p><code>66 void *</code></p>
     <p><code>67 consume(void *arg)</code></p>
     <p><code>68 {</code></p>
     <p><code>69  int i;</code></p>
     <p><code>70  for (i = 0; i &lt; nitems; i++) {</code></p>
     <p><code>71   consume_wait(i);</code></p>
     <p><code>72   if (shared.buff[i] != i)</code></p>
     <p><code>73    printf("buff[%d] = %d\n", i, shared.buff[i]);</code></p>
     <p><code>74  }</code></p>
     <p><code>75  return(NULL);</code></p>
     <p><code>76 }</code></p>
     <subtitle>Потребитель должен ждать</subtitle>
     <p>71 Единственное изменение в функции consume заключается в добавлении вызова consume_wait перед обработкой следующего элемента массива.</p>
     <subtitle>Ожидание производителей</subtitle>
     <p>57-64 Наша функция consume_wait должна ждать, пока производители не создадут i-й элемент. Для проверки этого условия производится блокировка взаимного исключения и значение i сравнивается с индексом производителя nput. Блокировка необходима, поскольку значение nput может быть изменено одним из производителей в момент его проверки.</p>
     <p>Главная проблема — что делать, если нужный элемент еще не готов. Все, что нам остается и что мы делаем в листинге 7.4, — это повторять операции в цикле, устанавливая и снимая блокировку и проверяя значение индекса. Это называется опросом (spinning или polling) и является лишней тратой времени процессора.</p>
     <p>Мы могли бы приостановить выполнение процесса на некоторое время, но мы не знаем, на какое. Что нам действительно нужно — это использовать какое-то другое средство синхронизации, позволяющее потоку или процессу приостанавливать работу, пока не произойдет какое-либо событие.</p>
    </section>
    <section>
     <title>
      <p>7.5. Условные переменные: ожидание и сигнализация</p>
     </title>
     <section>
      <p>Взаимное исключение используется для блокирования, а условная переменная — для ожидания. Это два различных средства синхронизации, и оба они нужны. Условная переменная представляет собой переменную типа pthread_cond_t. Для работы с такими переменными предназначены две функции:</p>
      <p><code>#include &lt;pthread.h&gt;</code></p>
      <p><code>int pthread_cond_wait(pthread_cond_t <emphasis>*cptr,</emphasis> pthread_m_tex_t <emphasis>*mptr</emphasis>);</code></p>
      <p><code>int pthread_cond_signal(pthread_cond_t <emphasis>*cptr</emphasis>);</code></p>
      <p><code>/* Обе функции возвращают 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
      <p>Слово signal в имени второй функции не имеет никакого отношения к сигналам Unix SIGxxx.</p>
      <p>Мы определяем условие, уведомления о выполнении которого будем ожидать.</p>
      <p>Взаимное исключение всегда связывается с условной переменной. При вызове pthread_cond_wait для ожидания выполнения какого-либо условия мы указываем адрес условной переменной и адрес связанного с ней взаимного исключения.</p>
      <p>Мы проиллюстрируем использование условных переменных, переписав пример из предыдущего раздела. В листинге 7.5 объявляются глобальные переменные.</p>
      <subtitle>Переменные производителя и взаимное исключение объединяются в структуру</subtitle>
      <p>7-13 Две переменные nput и rival ассоциируются с mutex, и мы объединяем их в структуру с именем put. Эта структура используется производителями.</p>
      <p>14-20 Другая структура, nready, содержит счетчик, условную переменную и взаимное исключение. Мы инициализируем условную переменную с помощью PTHREAD_ COND_INITIALIZER.</p>
      <p>Функция main по сравнению с листингом 7.3 не изменяется.</p>
      <subtitle>Листинг 7.5. Глобальные переменные: использование условной переменной</subtitle>
      <p><code>//mutex/prodcons6.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #define MAXNITEMS 1000000</code></p>
      <p><code>3  #define MAXNTHREADS 100</code></p>
      <empty-line/>
      <p><code>4  /* глобальные переменные для всех потоков */</code></p>
      <p><code>5  int nitems; /* только для чтения потребителем и производителем */</code></p>
      <p><code>6  int buff[MAXNITEMS];</code></p>
      <empty-line/>
      <p><code>7  struct {</code></p>
      <p><code>8   pthread_mutex_t mutex;</code></p>
      <p><code>9   int nput; /* следующий сохраняемый элемент */</code></p>
      <p><code>10  int nval; /* следующее сохраняемое значение */</code></p>
      <p><code>11 } put = {</code></p>
      <p><code>12  PTHREAD_MUTEX_INITIALIZER</code></p>
      <p><code>13 };</code></p>
      <empty-line/>
      <p><code>14 struct {</code></p>
      <p><code>15  pthread_mutex_t mutex:</code></p>
      <p><code>16  pthread_cond_t cond;</code></p>
      <p><code>17  int nready; /* количество готовых для потребителя */</code></p>
      <p><code>18 } nready = {</code></p>
      <p><code>19  PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER</code></p>
      <p><code>20 };</code></p>
      <p>Функции produce и consume претерпевают некоторые изменения. Их текст дан в листинге 7.6.</p>
      <subtitle>Листинг 7.6. Функции produce и consume</subtitle>
      <p><code>//mutex/prodcons6.c</code></p>
      <p><code>46 void *</code></p>
      <p><code>47 produce(void *arg)</code></p>
      <p><code>48 {</code></p>
      <p><code>49  for (;;) {</code></p>
      <p><code>50   Pthread_mutex_lock(&amp;put.mutex);</code></p>
      <p><code>51   if (put.nput &gt;= nitems) {</code></p>
      <p><code>52    Pthread_mutex_unlock(&amp;put.mutex);</code></p>
      <p><code>53    return(NULL); /* массив заполнен, готово */</code></p>
      <p><code>54   }</code></p>
      <p><code>55   buff[put.nput] = put.nval;</code></p>
      <p><code>56   put.nput++;</code></p>
      <p><code>57   put.nval++;</code></p>
      <p><code>58   Pthread_mutex_unlock(&amp;put.mutex);</code></p>
      <p><code>59   Pthread_mutex_lock(&amp;nready.mutex):</code></p>
      <p><code>60   if (nready.nready == 0)</code></p>
      <p><code>61    Pthread_cond_signal(&amp;nready.cond);</code></p>
      <p><code>62   nready.nready++;</code></p>
      <p><code>63   Pthread_mutex_unlock(&amp;nready.mutex);</code></p>
      <p><code>64   *((int *) arg) += 1;</code></p>
      <p><code>65  }</code></p>
      <p><code>66 }</code></p>
      <empty-line/>
      <p><code>67 void*</code></p>
      <p><code>68 consume(void *arg)</code></p>
      <p><code>69 {</code></p>
      <p><code>70  int i;</code></p>
      <p><code>71  for (i = 0; i &lt; nitems; i++) {</code></p>
      <p><code>72   Pthread_mutex_lock(&amp;nready.mutex);</code></p>
      <p><code>73   while (nready.nready == 0)</code></p>
      <p><code>74    Pthread_cond_wait(&amp;nready.cond, &amp;nready.mutex);</code></p>
      <p><code>75   nready.nready--;</code></p>
      <p><code>76   Pthread_mutex_unlock(&amp;nready.mutex);</code></p>
      <p><code>77   if (buff[i] != i)</code></p>
      <p><code>78    printf("buff[%d] = *d\n", i, buff[i]);</code></p>
      <p><code>79  }</code></p>
      <p><code>80  return(NULL);</code></p>
      <p><code>81 }</code></p>
      <subtitle>Помещение очередного элемента в массив</subtitle>
      <p>50-58 Для блокирования критической области в потоке-производителе теперь используется исключение put.mutex. </p>
      <subtitle>Уведомление потребителя</subtitle>
      <p>59-64 Мы увеличиваем счетчик nready.nready, в котором хранится количество элементов, готовых для обработки потребителем. Перед его увеличением мы проверяем, не было ли значение счетчика нулевым, и если да, то вызывается функция pthread_cond_signal, позволяющая возобновить выполнение всех потоков (в данном случае потребителя), ожидающих установки ненулевого значения этой переменной. Теперь мы видим, как взаимодействуют взаимное исключение и связанная с ним условная переменная. Счетчик используется совместно потребителем и производителями, поэтому доступ к нему осуществляется с блокировкой соответствующего взаимного исключения (nready.mutex). Условная переменная используется для ожидания и передачи сигнала.</p>
      <subtitle>Потребитель ждет, пока значение nready.nready не станет отличным от нуля</subtitle>
      <p>72-76 Потребитель просто ждет, пока значение счетчика nready. nready не станет отличным от нуля. Поскольку этот счетчик используется совместно с производителями, его значение можно проверять только при блокировке соответствующего взаимного исключения. Если при проверке значение оказывается нулевым, мы вызываем pthread_cond_wait для приостановки процесса. При этом выполняются два атомарных действия:</p>
      <p>1. Разблокируется nready.mutex.</p>
      <p>2. Выполнение потока приостанавливается, пока какой-нибудь другой поток не вызовет pthread_cond_signal для этой условной переменной.</p>
      <p>Перед возвращением управления потоку функция pthread_cond_wait блокирует nready.mutex. Таким образом, если после возвращения из функции мы обнаруживаем, что счетчик имеет ненулевое значение, мы уменьшаем этот счетчик (зная, что взаимное исключение заблокировано) и разблокируем взаимное исключение. Обратите внимание, что после возвращения из pthread_cond_wait мы всегда заново проверяем условие, поскольку может произойти ложное пробуждение при отсутствии выполнения условия. Различные реализации стремятся уменьшить количество ложных пробуждений, но они все равно происходят.</p>
      <p>Код, передающий сигнал условной переменной, выглядит следующим образом:</p>
      <p><code>struct {</code></p>
      <p><code> pthread_mutex_t mutex;</code></p>
      <p><code> pthread_cond_t cond;</code></p>
      <p><code> переменные, для которых устанавливается условие</code></p>
      <p><code>} var = { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, … };</code></p>
      <empty-line/>
      <p><code>Pthread_mutex_lock(&amp;var.mutex);</code></p>
      <p><code>установка истинного значения условия</code></p>
      <p><code>Pthread_cond_signal(&amp;var.cond);</code></p>
      <p><code>Pthread_mutex_unlock(&amp;var.mutex);</code></p>
      <p>В нашем примере переменная, для которой устанавливалось условие, представляла собой целочисленный счетчик, а установка условия означала просто увеличение счетчика. Мы оптимизировали программу, посылая сигнал только при изменении значения счетчика с 0 на 1.</p>
      <p>Код, проверяющий условие и приостанавливающий процесс, если оно не выполняется, обычно выглядит следующим образом:</p>
      <p><code>Pthread_mutex_lock(&amp;var.mutex);</code></p>
      <p><code>while (условие ложно)</code></p>
      <p><code> Pthread_cond_wait(&amp;var.cond, &amp;var.mutex);</code></p>
      <p><code>изменение условия</code></p>
      <p><code>Pthread_mutex_unlock(&amp;var.mutex);</code></p>
     </section>
     <section>
      <title>
       <p>Исключение конфликтов блокировок</p>
      </title>
      <p>В приведенном выше фрагменте кода, как и в листинге 7.6, функция pthread_cond_signal вызывалась потоком, блокировавшим взаимное исключение, относящееся к условной переменной, для которой отправлялся сигнал. Мы можем представить себе, что в худшем варианте система немедленно передаст управление потоку, которому направляется сигнал, и он начнет выполняться и немедленно остановится, поскольку не сможет заблокировать взаимное исключение. Альтернативный код, помогающий этого избежать, для листинга 7.6 будет иметь следующий вид:</p>
      <p><code>int dosignal;</code></p>
      <p><code>Pthread_mutex_lock(nready.mutex);</code></p>
      <p><code>dosignal = (nready.nready == 0);</code></p>
      <p><code>nready.nready++;</code></p>
      <p><code>Pthread_mutex_unlock(&amp;nready.mutex);</code></p>
      <p><code>if (dosignal)</code></p>
      <p><code> Pthread_cond_signal(&amp;nready.cond);</code></p>
      <p>Здесь мы отправляем сигнал условной переменной только после разблокирования взаимного исключения. Это разрешено стандартом Posix: поток, вызывающий pthread_cond_signal, не обязательно должен в этот момент блокировать связанное с переменной взаимное исключение. Однако Posix говорит, что если требуется предсказуемое поведение при одновременном выполнении потоков, это взаимное исключение должно быть заблокировано процессом, вызывающим pthread_cond_signal.</p>
     </section>
    </section>
    <section>
     <title>
      <p>7.6. Условные переменные: время ожидания и широковещательная передача</p>
     </title>
     <p>В обычной ситуации pthread_cond_signal запускает выполнение одного потока, ожидающего сигнал по соответствующей условной переменной. В некоторых случаях поток знает, что требуется пробудить несколько других процессов. Тогда можно воспользоваться функцией pthread_cond_broadcast для пробуждения всех процессов, заблокированных в ожидании сигнала данной условной переменной.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Пример ситуации, в которой требуется возобновление выполнения нескольких процессов, появится в главе 8, когда мы будем обсуждать задачу с несколькими считывающими и записывающими процессами. Когда записывающий процесс снимает блокировку, он должен разбудить все ждущие считывающие процессы, поскольку одновременное считывание в данном случае разрешено.</p>
      <p>Альтернативным (и более безопасным) методом является использование широковещательной передачи во всех тех случаях, когда требуется использование сигналов. Сигнал является оптимизацией для тех случаев, когда известно, что все ожидающие процессы правильно написаны и требуется разбудить только один из них, и какой именно будет разбужен, значения не имеет. Во всех других ситуациях следует использовать широковещательную передачу. </p>
     </cite>
     <p><code>#include &lt;pthread.h&gt;</code></p>
     <p><code>int pthread_cond_broadcast(pthread_cond_t <emphasis>*cptr</emphasis>);</code></p>
     <p><code>int pthread_cond_timedwait(pthread_cond_t <emphasis>*cptr,</emphasis> pthread_mutex_t <emphasis>*mptr,</emphasis> const struct timespec <emphasis>*abstime</emphasis>);</code></p>
     <p><code>/* Функции возвращают 0 в случае успешного завершения, положительный код Еххх — в случае ошибки */</code></p>
     <p>Функция pthread_cond_timedwait позволяет установить ограничение на время блокирования процесса. Аргумент <emphasis>abstime</emphasis> представляет собой структуру timespec:</p>
     <p><code>struct timespec {</code></p>
     <p><code> time_t tv_sec; /* секунды */</code></p>
     <p><code> long tv_nsec; /* наносекунды */</code></p>
     <p><code>};</code></p>
     <p>Эта структура задает конкретный момент системного времени, в который происходит возврат из функции, даже если сигнал по условной переменной еще не будет получен. В этом случае возвращается ошибка с кодом ETIMEDOUT.</p>
     <p>Эта величина представляет собой абсолютное значение времени, а не промежуток. Аргумент <emphasis>abstime</emphasis> задает таким образом количество секунд и наносекунд с 1 января 1970 UTC до того момента времени, в который должен произойти возврат из функции. Это отличает функцию от select, pselect и poll (глава 6 [24]), которые в качестве аргумента принимают некоторое количество долей секунды, спустя которое должен произойти возврат. (Функция select принимает количество микросекунд, pselect — наносекунд, a poll — миллисекунд.) Преимущество использования абсолютного времени заключается в том, что если функция возвратится до ожидаемого момента (например, при перехвате сигнала), ее можно будет вызвать еще раз, не изменяя содержимого структуры timespec.</p>
    </section>
    <section>
     <title>
      <p>7.7. Атрибуты взаимных исключений и условных переменных</p>
     </title>
     <section>
      <p>В наших примерах в этой главе мы хранили взаимные исключения и условные переменные как глобальные данные всего процесса, поскольку они использовались для синхронизации потоков внутри него. Инициализировали мы их с помощью двух констант: PTHREAD_MUTEX_INITIALIZER и PTHREAD_COND_INTIALIZER. Инициализируемые таким образом исключения и условные переменные приобретали значения атрибутов по умолчанию, но мы можем инициализировать их и с другими значениями атрибутов.</p>
      <p>Прежде всего инициализировать и удалять взаимное исключение и условную переменную можно с помощью функций</p>
      <p><code>#include &lt;pthread.h&gt;</code></p>
      <p><code>int pthread_mutex_imt(pthread_mutex_t *<emphasis>mptr</emphasis>, const pthread_mutexattr_t *<emphasis>attr</emphasis>);</code></p>
      <p><code>int pthread_mutex_destroy(pthread_mutex_t *<emphasis>mptr</emphasis>);</code></p>
      <p><code>int pthread_cond_init(pthread_cond_t *<emphasis>cрtr</emphasis>, const pthread_condattr_t *<emphasis>attr</emphasis>);</code></p>
      <p><code>int pthread_cond_destroy(pthread_cond_t *<emphasis>cptr</emphasis>);</code></p>
      <p><code>/* Все четыре функции возвращают 0 в случае успешного завершения работы, положительное значение Еххх – в случае ошибки */</code></p>
      <p>Рассмотрим, например, взаимное исключение. Аргумент mptr должен указывать на переменную типа pthread_mutex_t, для которой должна быть уже выделена память, и тогда функция pthread_mutex_init инициализирует это взаимное исключение. Значение типа pthread_mutexattr_t, на которое указывает второй аргумент функции pthread_mutex_init(<emphasis>attr</emphasis> ), задает атрибуты этого исключения. Если этот аргумент представляет собой нулевой указатель, используются значения атрибутов по умолчанию.</p>
      <p>Атрибуты взаимного исключения имеют тип pthread_mutexattr_t, а условной переменной — pthread_condattr_t, и инициализируются и уничтожаются с помощью следующих функций:</p>
      <p><code>#include &lt;pthread.h&gt;</code></p>
      <p><code>int pthread_mutexattr_init(pthread_mutexattr_t *<emphasis>attr</emphasis>);</code></p>
      <p><code>int pthread_mutexattr_destroy(pthread_mutexattr_t *<emphasis>attr</emphasis>);</code></p>
      <p><code>int pthread_condattr_init(pthread_condattr_t *<emphasis>attr</emphasis>);</code></p>
      <p><code>int pthread_condattr_destroy(pthread_condattr_t *<emphasis>attr</emphasis>);</code></p>
      <p><code>/* Все четыре функции возвращают 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
      <p>После инициализации атрибутов взаимного исключения или условной переменной для включения или выключения отдельных атрибутов используются отдельные функции. Например, один из атрибутов позволяет использовать данное взаимное исключение или условную переменную нескольким процессам (а не потокам одного процесса). Этот атрибут мы будем использовать в последующих главах. Его значение можно узнать и изменить с помощью следующих функций:</p>
      <p><code>#include &lt;pthread.h&gt;</code></p>
      <p><code>int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr, int *<emphasis>valptr</emphasis>);</code></p>
      <p><code>int pthread_mutexattr_setpshared(pthread_mutexattr_t *<emphasis>attr,</emphasis> int <emphasis>value</emphasis>);</code></p>
      <p><code>int pthread_condattr_getpshared(const pthread_condattr_t *<emphasis>attr</emphasis>, int *<emphasis>valptr</emphasis>);</code></p>
      <p><code>int pthread_condattr_setpshared(pthread_condattr_t *<emphasis>attr,</emphasis> int <emphasis>value</emphasis>);</code></p>
      <p><code>/* Все четыре функции возвращают 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
      <p>Две функции get возвращают текущее значение атрибута через целое, на которое указывает valptr, а две функции set устанавливают значение атрибута равным значению value. Значение value может быть либо PTHREAD_PROCESS_PRIVATE, либо PTHREAD_PROCESS_SHARED. Последнее также называется атрибутом совместного использования процессами. </p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Эта возможность поддерживается только в том случае, если константа _POSIX_THREAD_PROCESS_SHARED определена в заголовочном файле &lt;unistd.h&gt;. Она является дополнительной согласно Posix.1 и обязательной по Unix 98 (табл. 1.3). </p>
      </cite>
      <p>Нижеследующий фрагмент кода показывает, как нужно инициализировать взаимное исключение, чтобы его можно было совместно использовать нескольким процессам:</p>
      <p><code>pthread_mutex_t *mptr; /* указатель на взаимное исключение, находящееся в разделяемой памяти */</code></p>
      <p><code>pthread_mutexattr_t mattr; /* атрибуты взаимного исключения */</code></p>
      <p><code>…</code></p>
      <p><code>mptr = /* некоторое значение, указывающее на разделяемую память */</code></p>
      <p><code>Pthread_mutexattr_init(&amp;mattr);</code></p>
      <p><code>#ifdef _POSIX_THREAD_PROCESS_SHARED</code></p>
      <p><code> Pthread_mutexattr_setpshared(&amp;mattr, PTHREAD_PROCESS_SHARED);</code></p>
      <p><code>#else</code></p>
      <p><code> # error Эта реализация не поддерживает _POSIX_THREAD_PROCESS_SHARED</code></p>
      <p><code>#endif</code></p>
      <p><code>Pthread_mutex_init(mptr, &amp;mattr);</code></p>
      <p>Мы объявляем переменную mattr типа pthread_mutexattr_t, инициализируем ее значениями атрибутов по умолчанию, а затем устанавливаем атрибут PTHREAD_PROCESS_SHARED, позволяющий совместно использовать взаимное исключение нескольким процессам. Затем pthread_mutex_init инициализирует само исключение с соответствующими атрибутами. Количество разделяемой памяти, которое следует выделить под взаимное исключение, равно sizeof(pthread_mutex_t).</p>
      <p>Практически такая же последовательность команд (с заменой mutex на cond) позволяет установить атрибут PTHREAD_PROCESS_SHARED для условной переменной, хранящейся в разделяемой несколькими процессами памяти.</p>
      <p>Пример совместно используемых несколькими процессами взаимных исключений и условных переменных был приведен в листинге 5.18.</p>
     </section>
     <section>
      <title>
       <p>Завершение процесса, заблокировавшего ресурс</p>
      </title>
      <p>Когда взаимное исключение используется совместно несколькими процессами, всегда существует возможность, что процесс будет завершен (возможно, принудительно) во время работы с заблокированным им ресурсом. Не существует способа заставить систему автоматически снимать блокировку во время завершения процесса. Мы увидим, что это свойственно и блокировкам чтения-записи, и семафорам Posix. Единственный тип блокировок, автоматически снимаемых системой при завершении процесса, — блокировки записей fcntl (глава 9). При использовании семафоров System V можно специально указать ядру, следует ли автоматически снимать блокировки при завершении работы процесса (функция SEM_UNDO, о которой будет говориться в разделе 11.3).</p>
      <p>Поток также может быть завершен в момент работы с заблокированным ресурсом, если его выполнение отменит (cancel) другой поток или он сам вызовет pthread_exit. Последнему варианту не следует уделять много внимания, поскольку поток должен сам знать, блокирует ли он взаимное исключение в данный момент или нет, и в зависимости от этого вызывать pthread_exit. На случай отмены другим потоком можно предусмотреть обработчик сигнала, вызываемый при отмене потока, что продемонстрировано в разделе 8.5. Если же для потока возникают фатальные условия, это обычно приводит к завершению работы всего процесса. Например, если поток делает некорректную операцию с указателем, что приводит к отправке сигнала SIGSEGV, это приводит к остановке всего процесса, если сигнал не перехватывается, и мы возвращаемся к предыдущей ситуации с гибелью процесса, заблокировавшего ресурс.</p>
      <p>Даже если бы система автоматически разблокировала ресурсы после завершения процесса, это не всегда решало бы проблему. Блокировка защищала критическую область, в которой, возможно, изменялись какие-то данные. Если процесс был завершен посреди этой области, что стало с данными? Велика вероятность того, что возникнут несоответствия, если, например, новый элемент будет не полностью добавлен в связный список. Если бы ядро просто разблокировало взаимное исключение при завершении процесса, следующий процесс, обратившийся к списку, обнаружил бы, что тот поврежден.</p>
      <p>В некоторых случаях автоматическое снятие блокировки (или счетчика — для семафора) при завершении процесса не вызывает проблем. Например, сервер может использовать семафор System V (с функцией SEM_UNDO) для подсчета количества одновременно обслуживаемых клиентов. Каждый раз при порождении процесса вызовом fork он увеличивает значение семафора на единицу, уменьшая его при завершении работы дочернего процесса. Если дочерний процесс завершит работу досрочно, ядро само уменьшит значение семафора. Пример, в котором автоматическое снятие блокировки ядром (а не уменьшение счетчика, как в вышеописанной ситуации) также не вызывает проблем, приведен в разделе 9.7. Демон блокирует один из файлов данных при записи в него и не снимает эту блокировку до завершения работы. Если кто-то попробует запустить копию демона, она завершит работу досрочно, когда обнаружит наличие блокировки на запись. Это гарантирует работу единственного экземпляра демона. Если же демон досрочно завершит работу, ядро само снимет блокировку, что позволит запустить копию демона.</p>
     </section>
    </section>
    <section>
     <title>
      <p>7.8. Резюме</p>
     </title>
     <p>Взаимные исключения (mutual exclusion — mutex) используются для защиты критических областей кода, запрещая его одновременное выполнение несколькими потоками. В некоторых случаях потоку, заблокировавшему взаимное исключение, требуется дождаться выполнения какого-либо условия для выполнения последующих действий. В этом случае используется ожидание сигнала по условной переменной. Условная переменная всегда связывается с каким-либо взаимным исключением. Функция pthread_cond_wait, приостанавливающая работу процесса, разблокирует взаимное исключение перед остановкой работы и заново блокирует его при возобновлении работы процесса спустя некоторое время. Сигнал по условной переменной передается каким-либо другим потоком, и этот поток может разбудить либо только один произвольный поток из множества ожидающих (pthread_cond_signal), либо все их одновременно (pthread_cond_broadcast).</p>
     <p>Взаимные исключения и условные переменные могут быть статическими. В этом случае они инициализируются также статически. Они могут быть и динамическими, что требует динамической инициализации. Динамическая инициализация дает возможность указать атрибуты, в частности атрибут совместного использования несколькими процессами, что действенно, если взаимное исключение или условная переменная находится в разделяемой этими процессами памяти.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Удалите взаимное исключение из листинга 7.2 и убедитесь, что программа работает неправильно, если одновременно запущено более одного производителя.</p>
     <p>2. Что произойдет с листингом 7.1, если убрать вызов Pthread_join для потока-потребителя?</p>
     <p>3. Напишите пpoгрaммy, вызывающую pthread_mutexatt_init и pthread_condattr_init в бесконечном цикле. Следите за используемой этим процессом памятью с помощью какой-нибудь программы, например ps. Что происходит? Теперь добавьте вызовы pthread_mutexattr_destroy и pthread_condattr_destroy и убедитесь, что утечки памяти нет.</p>
     <p>4. В программе из листинга 7.6 производитель вызывает pthread_cond_signal только при изменении nready.nready с 0 на 1. Чтобы убедиться в эффективности этой оптимизации, вызывайте pthread_cond_signal каждый раз, когда nready.nready увеличивается на 1, и выведите его значение в главном потоке после завершения работы потребителя. </p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 8</p>
     <p>Блокировки чтения-записи</p>
    </title>
    <section>
     <title>
      <p>8.1. Введение</p>
     </title>
     <p>Взаимное исключение используется для предотвращения одновременного доступа нескольких потоков к критической области. Критическая область кода обычно содержит операции считывания или изменения данных, используемых потоками совместно. В некоторых случаях можно провести различие между считыванием данных и их изменением.</p>
     <p>В этой главе описываются блокировки чтения-записи, причем существует различие между получением такой блокировки для считывания и для записи. Правила действуют следующие:</p>
     <p>1. Любое количество потоков могут заблокировать ресурс для считывания, если ни один процесс не заблокировал его на запись.</p>
     <p>2. Блокировка чтения-записи может быть установлена на запись, только если ни один поток не заблокировал ресурс для чтения или для записи.</p>
     <p>Другими словами, произвольное количество потоков могут считывать данные, если ни один поток не изменяет их в данный момент. Данные могут быть изменены, только если никто другой их не считывает и не изменяет.</p>
     <p>В некоторых приложениях данные считываются чаще, чем изменяются, поэтому такие приложения выиграют в быстродействии, если при их реализации будут использованы блокировки чтения-записи вместо взаимных исключений. Возможность совместного считывания данных произвольным количеством процессов позволит выполнять операции параллельно, и при этом данные все равно будут защищены от других потоков на время изменения их данным потоком.</p>
     <p>Такой вид совместного доступа к ресурсу также носит название совместно-исключающей блокировки (shared-exclusive), поскольку тип используемой блокировки на чтение называется совместной блокировкой (shared lock), а тип используемой блокировки на запись называется исключающей блокировкой (exclusive lock). Существует также специальное название для данной задачи (несколько считывающих процессов и один записывающий): задача читателей и писателей (readers and writers problem), и говорят также о блокировке читателей и писателя (readers-writer lock). В последнем случае слово «читатель» специально употреблено во множественном числе, а «писатель» — в единственном, чтобы подчеркнуть сущность задачи.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Обычным примером, иллюстрирующим необходимость использования блокировок чтения-записи, является банковский счет. Считывать баланс со счета могут несколько потоков одновременно, но если какой-либо поток захочет изменить данные, ему придется подождать, пока считывающие потоки не закончат свои операции, и только после этого ему будет разрешено вносить изменения. До окончания процесса записи никакие другие процессы не должны получить доступа к счету.</p>
      <p>Функции, описываемые в этой главе, определены стандартом Unix 98, поскольку блокировки чтения-записи не были частью стандарта Posix.1 1996 года. Эти функции были разработаны группой производителей Unix, известной под названием Aspen Group, в 1995 году вместе с другими расширениями, которые еще не были определены Posix.1. Рабочая группа Posix (1003.1j) в настоящее время разрабатывает набор расширений Pthreads, включающий блокировки чтения-записи, который, хочется верить, совпадет с описываемым в этой главе.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>8.2. Получение и сброс блокировки чтения-записи</p>
     </title>
     <p>Блокировка чтения-записи имеет тип pthread_rwlock_t. Если переменная этого типа является статической, она может быть проинициализирована присваиванием значения константы PTHREAD_RWLOCK_INITIALIZER.</p>
     <p>Функция pthread_rwlock_rdlock позволяет заблокировать ресурс для чтения, причем вызвавший процесс будет заблокирован, если блокировка чтения-записи уже установлена записывающим процессом. Функция pthread_rwlock_wrlock позволяет заблокировать ресурс для записи, причем вызвавший процесс будет заблокирован, если блокировка чтения-записи уже установлена каким-либо другим процессом (считывающим или записывающим). Функция pthread_rwlock_unlock снимает блокировку любого типа (чтения или записи):</p>
     <p>#include &lt;pthread.h&gt;</p>
     <p><code>int pthread_rwlock_rdlock(pthread_rwlock_t <emphasis>*rwptr</emphasis>);</code></p>
     <p><code>int pthread_rwlock_wrlock(pthread_rwlock_t <emphasis>*rwptr</emphasis>);</code></p>
     <p><code>int pthread_rwlock_unlock(pthread_rwlock_t <emphasis>*rwptr</emphasis> );</code></p>
     <p><code>/* Все функции возвращают 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
     <p>Следующие две функции производят попытку заблокировать ресурс для чтения или записи, но если это невозможно, возвращают ошибку с кодом EBUSY, вместо того чтобы приостановить выполнение вызвавшего процесса:</p>
     <p><code>#include &lt;pthread.h&gt;</code></p>
     <p><code>int pthread_rwlock_tryrdlock(pthread_rwlock_t <emphasis>*rwptr</emphasis>);</code></p>
     <p><code>int pthread_rwlock_trywrlock(pthread_rwlock_t <emphasis>*rwptr</emphasis>);</code></p>
     <p><code>/* Обе функции возвращают 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
    </section>
    <section>
     <title>
      <p>8.3. Атрибуты блокировки чтения-записи</p>
     </title>
     <p>Мы уже отмечали, что статическая блокировка может быть проинициализирована присваиванием ей значения PTHREAD_RWLOCK_INITIALIZER. Эти переменные могут быть проинициализированы и динамически путем вызова функции pthread_rwlock_init. </p>
     <p>Когда поток перестает нуждаться в блокировке, он может вызвать pthread_rwlock_ destroy:</p>
     <p><code>#include &lt;pthread.h&gt;</code></p>
     <p><code>int pthread_rwlock_init(pthread_rwlock_t <emphasis>*rwptr,</emphasis> const pthread_rwlockattr_t <emphasis>*attr</emphasis>);</code></p>
     <p><code>int pthread_rwlock_destroy(pthread_rwlock_t <emphasis>*rwptr</emphasis>);</code></p>
     <p><code>/* Обе функции возвращают 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
     <p>Если при инициализации блокировки чтения-записи <emphasis>attr</emphasis> представляет собой нулевой указатель, атрибутам присваиваются значения по умолчанию. Для присваивания атрибутам других значений следует воспользоваться двумя нижеследующими функциями:</p>
     <p><code>#include &lt;pthread.h&gt;</code></p>
     <p><code>int pthread_rwlockattr_init(pthread_rwlockattr_t <emphasis>*attr</emphasis>);</code></p>
     <p><code>int pthread_rwlockattr_destroy(pthread_rwlockattr_t <emphasis>*attr</emphasis>);</code></p>
     <p><code>/* Обе функции возвращают 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
     <p>После инициализации объекта типа pthread_rwlockattr_t для установки или сброса отдельных атрибутов используются специальные функции. Единственный определенный на настоящее время атрибут — PTHREAD_PROCESS_SHARED, который указывает на то, что блокировка используется несколькими процессами, а не отдельными потоками одного процесса. Две приведенные ниже функции используются для получения и установки значения этого атрибута:</p>
     <p><code>#include &lt;pthread.h&gt;</code></p>
     <p><code>int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t <emphasis>*attr,</emphasis> int <emphasis>*valptr</emphasis>);</code></p>
     <p><code>int pthread_rwlockattr_setpshared(pthread_rwlockattr_t <emphasis>*attr,</emphasis> int <emphasis>value</emphasis> );</code></p>
     <p><code>/* Обе функции возвращают 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
     <p>Первая функция возвращает текущее значение в целом, на которое указывает аргумент <emphasis>valptr.</emphasis> Вторая функция устанавливает значение этого атрибута равным <emphasis>value,</emphasis> которое может быть либо PTHREAD_PROCESS_PRIVATE, либо PTHREAD_ PROCESS_SHARED.</p>
    </section>
    <section>
     <title>
      <p>8.4. Реализация с использованием взаимных исключений и условных переменных</p>
     </title>
     <section>
      <p>Для реализации блокировок чтения-записи достаточно использовать взаимные исключения и условные переменные. В этом разделе мы рассмотрим одну из возможных реализаций, в которой предпочтение отдается ожидающим записи потокам. Это не является обязательным; возможны альтернативы.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Этот и последующие разделы данной главы содержат усложненный материал, который можно при первом чтении пропустить.</p>
       <p>Другие реализации блокировок чтения записи заслуживают отдельного изучения. В разделе 7.1.2 книги [3] представлена реализация, в которой приоритет имеют ожидающие записи потоки и предусмотрена обработка отмены выполнения потока (о которой мы вскоре будем говорить подробнее). В разделе В.18.2.3.1 стандарта IEEE 1996 [8] представлена другая реализация, в которой предпочтение имеют ожидающие записи потоки и в которой также предусмотрена обработка отмены. В главе 14 книги [12] также приводится возможная реализация, в которой приоритет имеют ожидающие записи процессы. Реализация, приведенная в этом разделе, взята из пакета АСЕ (http://www.cs.wustl.edu/~schmidt/ACE.html), автором которого является Дуг Шмидт (Doug Schmidt). Аббревиатура АСЕ означает Adaptive Communications Environment. Во всех четырех реализациях используются взаимные исключения и условные переменные. </p>
      </cite>
     </section>
     <section>
      <title>
       <p>Тип данных pthread_rwlock_t</p>
      </title>
      <p>В листинге 8.1<a l:href="#n_1" type="note">[1]</a> приведен текст заголовочного файла pthread_rwlock .h, в котором определен основной тип pthread_rwlock_t и прототипы функций, работающих с блокировками чтения и записи. Обычно все это находится в заголовочном файле &lt;pthread.h&gt;.</p>
      <subtitle>Листинг 8.1. Определение типа данных pthread_rwlock_t</subtitle>
      <p><code>//my_rwlock/pthread_rwlock.h</code></p>
      <p><code>1  #ifndef __pthread_rwlock_h</code></p>
      <p><code>2  #define __pthread_rwlock_h</code></p>
      <empty-line/>
      <p><code>3  typedef struct {</code></p>
      <p><code>4   pthread_mutex_t rw_mutex; /* блокировка для структуры */</code></p>
      <p><code>5   pthread_cond_t rw_condreaders; /* для ждущих читающих потоков */</code></p>
      <p><code>6   pthread_cond_t rw_condwriters; /* для ждущих пишущих потоков */</code></p>
      <p><code>7   int rw_magic; /* для проверки ошибок */</code></p>
      <p><code>8   int rw_nwaitreaders;/* число ожидающих */</code></p>
      <p><code>9   int rw_nwaitwriters;/* число ожидающих */</code></p>
      <p><code>10  int rw_refcount;</code></p>
      <p><code>11  /* –1, если блокировка на запись, иначе – количество блокировок на чтение */</code></p>
      <p><code>12 } pthread_rwlock_t;</code></p>
      <empty-line/>
      <p><code>13 #define RW_MAGIC 0x19283746</code></p>
      <p><code>14 /* порядок должен быть такой же, как у элементов структуры */</code></p>
      <p><code>15 #define PTHREAD_RWLOCK_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, \</code></p>
      <p><code>16  PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, \</code></p>
      <p><code>17  RW_MAGIC, 0, 0, 0 }</code></p>
      <empty-line/>
      <p><code>18 typedef int pthread_rwlockattr_t; /* не поддерживается */</code></p>
      <empty-line/>
      <p><code>19 /* прототипы функций */</code></p>
      <p><code>20 int pthread_rwlock_destroy(pthread_rwlock_t *);</code></p>
      <p><code>21 int pthread_rwlock_init(pthread_rwlock_t *, pthread_rwlockattr_t *);</code></p>
      <p><code>22 int pthread_rwlock_rdlock(pthread_rwlock_t *);</code></p>
      <p><code>23 int pthread_rwlock_tryrdlock(pthread_rwlock_t *);</code></p>
      <p><code>24 int pthread_rwlock_trywrlock(pthread_rwlock_t *);</code></p>
      <p><code>25 int pthread_rwlock_unlock(pthread_rwlock_t *);</code></p>
      <p><code>26 int pthread_rwlock_wrlock(pthread_rwlock_t *);</code></p>
      <empty-line/>
      <p><code>27 /* и наши функции-обертки */</code></p>
      <p><code>28 void pthread_rwlock_destroy(pthread_rwlock_t *);</code></p>
      <p><code>29 void pthread_rwlock_init(pthread_rwlock_t*, pthread_rwlockattr_t *);</code></p>
      <p><code>30 void Pthread_rwlock_rdlock(pthread_rwlock_t *);</code></p>
      <p><code>31 int Pthread_rwlock_tryrdlock(pthread_rwlock_t *);</code></p>
      <p><code>32 int pthread_rwlock_trywrlock(pthread_rwlock_t *);</code></p>
      <p><code>33 void pthread_rwlock_unlock(pthread_rwlock_t *);</code></p>
      <p><code>34 void pthread_rwlock_wrlock(pthread_rwlock_t *);</code></p>
      <empty-line/>
      <p><code>35 #endif __pthread_rwlock_h</code></p>
      <p>3-13 Наш тип pthread_rwlock_t содержит одно взаимное исключение, две условные переменные, один флаг и три счетчика. Мы увидим, для чего все это нужно, когда будем разбираться с работой функций нашей программы. При просмотре или изменении содержимого этой структуры мы должны устанавливать блокировку rw_mutex. После успешной инициализации структуры полю rw_magic присваивается значение RW_MAGIC. Значение этого поля проверяется всеми функциями — таким образом гарантируется, что вызвавший поток передал указатель на проинициализированную блокировку. Оно устанавливается в 0 после уничтожения блокировки.</p>
      <p>Обратите внимание, что в счетчике rw_refcount всегда хранится текущий статус блокировки чтения-записи: –1 обозначает блокировку записи (и только одна такая блокировка может существовать в любой момент времени), 0 обозначает, что блокировка доступна и может быть установлена, а любое положительное значение соответствует количеству установленных блокировок на чтение.</p>
      <p>14-17 Мы также определяем константу для статической инициализации нашей структуры.</p>
     </section>
     <section>
      <title>
       <p>Функция pthread_rwlock_init</p>
      </title>
      <p>Первая функция, pthread_rwlock_init, динамически инициализирует блокировку чтения-записи. Ее текст приведен в листинге 8.2.</p>
      <p>7-8 Присваивание атрибутов с помощью этой функции не поддерживается, поэтому мы проверяем, чтобы указатель attr был нулевым.</p>
      <p>9-19 Мы инициализируем взаимное исключение и две условные переменные, которые содержатся в нашей структуре. Все три счетчика устанавливаются в 0, а полю rw_magiс присваивается значение, указывающее на то, что структура была проинициализирована.</p>
      <p>20-25 Если при инициализации взаимного исключения или условной переменной возникает ошибка, мы аккуратно уничтожаем проинициализированные объекты и возвращаем код ошибки.</p>
      <subtitle>Листинг 8.2. Функция pthread_rwlock_init: инициализация блокировки чтения-записи</subtitle>
      <p><code>//my_rwlock/pthread_rwlock_init.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "pthread_rwlock.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  pthread_rwlock_init(pthread_rwlock_t *rw, pthread_rwlockattr_t *attr)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int result;</code></p>
      <p><code>7   if (attr != NULL)</code></p>
      <p><code>8    return(EINVAL); /* not supported */</code></p>
      <p><code>9   if ((result = pthread_mutex_init(&amp;rw-&gt;rw_mutex, NULL)) != 0)</code></p>
      <p><code>10   goto err1;</code></p>
      <p><code>11  if ((result = pthread_cond_init(&amp;rw-&gt;rw_condreaders, NULL)) != 0)</code></p>
      <p><code>12   goto err2;</code></p>
      <p><code>13  if ((result = pthread_cond_init(&amp;rw-&gt;rw_condwriters, NULL)) != 0)</code></p>
      <p><code>14   goto err3;</code></p>
      <p><code>15  rw-&gt;rw_nwaitreaders = 0;</code></p>
      <p><code>16  rw-&gt;rw_nwaitwriters = 0;</code></p>
      <p><code>17  rw-&gt;rw_refcount = 0;</code></p>
      <p><code>18  rw-&gt;rw_magic = RW_MAGIC;</code></p>
      <p><code>19  return(0);</code></p>
      <p><code>20 err3:</code></p>
      <p><code>21  pthread_cond_destroy(&amp;rw-&gt;rw_condreaders);</code></p>
      <p><code>22 err2;</code></p>
      <p><code>23  pthread_mutex_destroy(&amp;rw-&gt;rw_mutex);</code></p>
      <p><code>24 err1:</code></p>
      <p><code>25  return(result); /* значение errno */</code></p>
      <p><code>26 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция pthread_rwlock destroy</p>
      </title>
      <p>В листинге 8.3 приведена функция pthread_rwlock_destroy, уничтожающая блокировку чтения записи после окончания работы с ней.</p>
      <p>8-13 Прежде всего проверяется, не используется ли блокировка в данный момент, а затем вызываются соответствующие функции для уничтожения взаимного исключения и двух условных переменных.</p>
      <subtitle>Листинг 8.З. Функция pthread_rwlock_destroy: уничтожение блокировки чтения-записи</subtitle>
      <p><code>//my_rwlock/pthread_rwlock_destroy.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "pthread_rwlock.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  pthread_rwlock_destroy(pthread_rwlock_t *rw)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   if (rw-&gt;rw_magic != RW_MAGIC)</code></p>
      <p><code>7    return(EINVAL);</code></p>
      <p><code>8   if (rw-&gt;rw_refcount != 0 ||</code></p>
      <p><code>9    rw-&gt;rw_nwaitreaders != 0 || rw-&gt;rw_nwaitwriters != 0)</code></p>
      <p><code>10   return(EBUSY);</code></p>
      <p><code>11  pthread_mutex_destroy(&amp;rw-&gt;rw_mutex);</code></p>
      <p><code>12  pthread_cond_destroy(&amp;rw-&gt;rw_condreaders);</code></p>
      <p><code>13  pthread_cond_destroy(&amp;rw-&gt;rw_condwriters);</code></p>
      <p><code>14  rw-&gt;rw_magic = 0;</code></p>
      <p><code>15  return(0);</code></p>
      <p><code>16 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция pthread_rwlock_rdlock</p>
      </title>
      <p>Текст функции pthread_rwlock_rdlock приведен в листинге 8.4.</p>
      <subtitle>Листинг 8.4. Функция pthread_rwlock_rdlock: получение блокировки на чтение</subtitle>
      <p><code>//my_rwlock/pthread_rwlock_rdlock.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "pthread_rwlock.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  pthread_rwlock_rdlock(pthread_rwlock_t *rw)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int result;</code></p>
      <p><code>7   if (rw-&gt;rw_magic != RW_MAGIC)</code></p>
      <p><code>8    return(EINVAL);</code></p>
      <p><code>9   if ((result = pthread_mutex_lock(&amp;rw-&gt;rw_mutex)) != 0)</code></p>
      <p><code>10   return(result);</code></p>
      <p><code>11  /* предпочтение отдается ожидающим разрешения на запись процессам */</code></p>
      <p><code>12  while (rw-&gt;rw_refcount &lt; 0 || rw-&gt;rw_nwaitwriters &gt; 0) {</code></p>
      <p><code>13   rw-&gt;rw_nwaitreaders++;</code></p>
      <p><code>14   result = pthread_cond_wait(&amp;rw-&gt;rw_condreaders, &amp;rw-&gt;rw_mutex);</code></p>
      <p><code>15   rw-&gt;rw_nwaitreaders--;</code></p>
      <p><code>16   if (result != 0)</code></p>
      <p><code>17    break;</code></p>
      <p><code>18  }</code></p>
      <p><code>19  if (result == 0)</code></p>
      <p><code>20   rw-&gt;rw_refcount++; /* блокировка на чтение уже кем-то установлена */</code></p>
      <p><code>21  pthread_mutex_unlock(&amp;rw-&gt;rw_mutex);</code></p>
      <p><code>22  return (result);</code></p>
      <p><code>23 }</code></p>
      <p>9-10 При работе со структурой pthread_rwl ock_t всегда устанавливается блокировка на rw_mutex, являющееся ее полем.</p>
      <p>11-18 Нельзя получить блокировку на чтение, если rw_refcount имеет отрицательное значение (блокировка установлена на запись) или имеются потоки, ожидающие возможности получения блокировки на запись (rw_nwaitwriters больше 0). Если одно из этих условий верно, мы увеличиваем значение rw_nwaitreaders и вызываем pthread_cond_wait для условной переменной rw_condreaders. Вскоре мы увидим, что при разблокировании ресурса прежде всего проверяется наличие процессов, ожидающих возможности установить блокировку на запись, и если таковых не существует, проверяется наличие ожидающих возможности считывания. Если они имеются, для условной переменной rw_condreaders передается широковещательный сигнал.</p>
      <p>19-20 При получении блокировки на чтение мы увеличиваем значение rw_refcount. Блокировка взаимного исключения после этого снимается.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>В этой функции есть проблема: если вызвавший поток будет заблокирован в функции pthread_cond_wait и после этого его выполнение будет отменено, он завершит свою работу, не разблокировав взаимное исключение, и значение rw_nwaitreaders окажется неверным. Та же проблема есть и в функции pthread_rwlock_wrlock в листинге 8.6. Эти проблемы будут исправлены в разделе 8.5.</p>
      </cite>
     </section>
     <section>
      <title>
       <p>Функция pthread_rwlock_tryrdlock</p>
      </title>
      <p>В листинге 8.5 показана наша реализация функции pthread_rwlock_tryrdlock, которая не вызывает приостановления вызвавшего ее потока.</p>
      <subtitle>Листинг 8.5. Функция pthread_rwlock_tryrdlock: попытка заблокировать ресурс для чтения</subtitle>
      <p><code>//my_rwlock/pthread_rwlock_tryrdlock.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "pthread_rwlock.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  pthread_rwlock_tryrdlock(pthread_rwlock_t *rw)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int result;</code></p>
      <p><code>7   if (rw-&gt;rwjnagic != RW_MAGIC)</code></p>
      <p><code>8    return(EINVAL);</code></p>
      <p><code>9   if ((result = pthread_mutex_lock(&amp;rw-&gt;rw_mutex)) != 0)</code></p>
      <p><code>10   return(result);</code></p>
      <p><code>11  if (rw-&gt;rw_refcount &lt; 0 || rw-&gt;rw_nwaitwriters &gt; 0)</code></p>
      <p><code>12   result = EBUSY; /* блокировка установлена пишущим потоком или есть пишущие потоки, ожидающие освобождения ресурса */</code></p>
      <p><code>13  else</code></p>
      <p><code>14   rw-&gt;rw_refcount++; /* увеличение количества блокировок на чтение */</code></p>
      <p><code>15  pthread_mutex_unlock(&amp;rw-&gt;rw_mutex);</code></p>
      <p><code>16  return(result);</code></p>
      <p><code>17 }</code></p>
      <p>11-14 Если блокировка в данный момент установлена на запись или есть процессы, ожидающие возможности установить ее на запись, возвращается ошибка с кодом EBUSY. В противном случае мы устанавливаем блокировку, увеличивая значение счетчика rw_refcount.</p>
     </section>
     <section>
      <title>
       <p>Функция pthread_rwlock_wrlock</p>
      </title>
      <p>Текст функции pthread_rwlock_wrlock приведен в листинге 8.6.</p>
      <p>11-17 Если ресурс заблокирован на считывание или запись (значение rw_refcount отлично от 0), мы приостанавливаем выполнение потока. Для этого мы увеличиваем rw_nwaitwriters и вызываем pthread_cond_wait с условной переменной rw_condwriters. Для этой переменной посылается сигнал при снятии блокировки чтения-записи, если имеются ожидающие разрешения на запись процессы.</p>
      <p>18-19 После получения блокировки на запись мы устанавливаем значение rw_refcount в –1.</p>
      <subtitle>Листинг 8.6. Функция pthread_rwlock_wrlock: получение блокировки на запись</subtitle>
      <p><code>//my_rwlock/pthread_rwlock_wrlock.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "pthread_rwlock.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  pthread_rwlock_wrlock(pthread_rwlock_t *rw)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int result;</code></p>
      <p><code>7   if (rw-&gt;rw_magic != RW_MAGIC)</code></p>
      <p><code>8    return(EINVAL);</code></p>
      <p><code>9   if ((result = pthread_mutex_lock(&amp;rw-&gt;rw_mutex)) != 0)</code></p>
      <p><code>10   return(result);</code></p>
      <p><code>11  while (rw-&gt;rw_refcount != 0) {</code></p>
      <p><code>12   rw-&gt;rw_nwaitwriters++;</code></p>
      <p><code>13   result = pthread_cond_wait(&amp;rw-&gt;rw_condwriters, &amp;rw-&gt;rw_mutex);</code></p>
      <p><code>14   rw-&gt;rw_nwaitwriters--;</code></p>
      <p><code>15   if (result != 0)</code></p>
      <p><code>16    break;</code></p>
      <p><code>17  }</code></p>
      <p><code>18  if (result == 0)</code></p>
      <p><code>19   rw-&gt;rw_refcount = –1;</code></p>
      <p><code>20  pthread_mutex_unlock(&amp;rw-&gt;rw_mutex);</code></p>
      <p><code>21  return(result);</code></p>
      <p><code>22 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция pthread_rwlock_trywrlock</p>
      </title>
      <p>Неблокируемая функция pthread_rwlock_trywrlock показана в листинге 8.7.</p>
      <p>11-14 Если значение счетчика rw_refcount отлично от нуля, блокировка в данный момент уже установлена считывающим или записывающим процессом (это безразлично) и мы возвращаем ошибку с кодом EBUSY. В противном случае мы устанавливаем блокировку на запись, присвоив переменной rw_refcount значение –1.</p>
      <subtitle>Листинг 8.7. Функция pthread_rwlock_trywrlock: попытка получения блокировки на запись</subtitle>
      <p><code>//my_rwlock/pthread_rwlock_trywrlock.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "pthread_rwlock.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  pthread_rwlock_trywrlock(pthread_rwlock_t *rw)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int result;</code></p>
      <p><code>7   if (rw-&gt;rw_magic != RW_MAGIC)</code></p>
      <p><code>8    return(EINVAL);</code></p>
      <p><code>9   if ((result = pthread_mutex_lock(&amp;rw-&gt;rw_mutex)) != 0)</code></p>
      <p><code>10   return(result);</code></p>
      <p><code>11  if (rw-&gt;rw_refcount != 0)</code></p>
      <p><code>12   result = EBUSY; /* заблокирован пишущим потоком или ожидающим возможности записи */</code></p>
      <p><code>13  else</code></p>
      <p><code>14   rw-&gt;rw_refcount = –1; /* доступна */</code></p>
      <p><code>15  pthread_mutex_unlock(&amp;rw-&gt;rw_mutex);</code></p>
      <p><code>16  return(result);</code></p>
      <p><code>17 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция pthread<strong>_rwlock_unlock</strong></p>
      </title>
      <p>Последняя функция, pthread_rwlock_unlock, приведена в листинге 8.8.</p>
      <subtitle>Листинг 8.8. Функция pthread_rwlock_unlock: разблокирование ресурса</subtitle>
      <p><code>//my_rwlock/pthread_rwlock_unlock.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "pthread_rwlock.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  pthread_rwlock_unlock(pthread_rwlock_t *rw)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int result;</code></p>
      <p><code>7   if (rw-&gt;rw_magic != RW_MAGIC)</code></p>
      <p><code>8    return(EINVAL);</code></p>
      <p><code>9   if ((result = pthread_mutex_lock(&amp;rw-&gt;rw_mutex)) != 0)</code></p>
      <p><code>10   return(result);</code></p>
      <p><code>11  if (rw-&gt;rw_refcount &gt; 0)</code></p>
      <p><code>12   rw-&gt;rw_refcount--; /* снятие блокировки на чтение */</code></p>
      <p><code>13  else if (rw-&gt;rw_refcount == –1)</code></p>
      <p><code>14   rw-&gt;rw_refcount = 0; /* снятие блокировки на запись */</code></p>
      <p><code>15  else</code></p>
      <p><code>16   err_dump("rw_refcount = %d", rw-&gt;rw_refcount);</code></p>
      <p><code>17  /* преимущество отдается ожидающим возможности записи потокам */</code></p>
      <p><code>18  if (rw-&gt;rw_nwaitwriters &gt; 0) {</code></p>
      <p><code>19   if (rw-&gt;rw_refcount == 0)</code></p>
      <p><code>20    result = pthread_cond_signal(&amp;rw-&gt;rw_condwriters);</code></p>
      <p><code>21  } else if (rw-&gt;rw_nwaitreaders &gt; 0)</code></p>
      <p><code>22   result = pthread_cond_broadcast(&amp;rw-&gt;rw_condreaders);</code></p>
      <p><code>23  pthread_mutex_unlock(&amp;rw-&gt;rw_mutex);</code></p>
      <p><code>24  return(result);</code></p>
      <p><code>25 }</code></p>
      <p>11-16 Если rw_refcount больше 0, считывающий поток снимает блокировку на чтение. Если rw_refcount равно –1, записывающий поток снимает блокировку на запись.</p>
      <p>17-22 Если имеются ожидающие разрешения на запись потоки, по условной переменной rw_condwriters передается сигнал (если блокировка свободна, то есть значение счетчика rw_refcount равно 0). Мы знаем, что только один поток может осуществлять запись, поэтому используем функцию pthread_cond_signal. Если нет потоков, ожидающих возможности записи, но есть потоки, ожидающие возможности чтения, мы вызываем pthread_cond_broadcast для переменной rw_condreaders, поскольку возможно одновременное считывание несколькими потоками. Обратите внимание, что мы перестаем устанавливать блокировку для считывающих потоков, если появляются потоки, ожидающие возможности записи. В противном случае постоянно появляющиеся потоки с запросами на чтение могли бы заставить поток, ожидающий возможности записи, ждать целую вечность. По этой причине мы используем два отдельных оператора if и не можем написать просто:</p>
      <p><code>/* предпочтение отдается записывающим процессам */</code></p>
      <p><code>if (rw-&gt;rw_nwaitreaders &gt; 0 &amp;&amp; rw-&gt;rw_refcount == 0)</code></p>
      <p><code> result = pthread_cond_signal(&amp;rw-&gt;rw_condwriters);</code></p>
      <p><code>else if (rw-&gt;rw_nwaitreaders &gt; 0)</code></p>
      <p><code> result = pthread_cond_broadcast(&amp;rw-&gt;rw_condreaders);</code></p>
      <p>Мы могли бы исключить и проверку rw-&gt;rw_refcount, но это может привести к вызовам pthread_cond_signal даже при наличии блокировок на чтение, что приведет к потере эффективности.</p>
     </section>
    </section>
    <section>
     <title>
      <p>8.5. Отмена выполнения потоков</p>
     </title>
     <section>
      <p>Обсуждая листинг 8.4, мы обратили внимание на наличие проблемы, возникающей при отмене выполнения потока, заблокированного вызовом pthread_cond_wait. Выполнение потока может быть отменено в том случае, если какой-нибудь другой поток вызовет функцию pthread_cancel, единственным аргументом которой является идентификатор потока, выполнение которого должно быть отменено:</p>
      <p><code>#include &lt;pthread.h&gt;</code></p>
      <p><code>int pthread_cancel(pthread_t <emphasis>tid</emphasis>);</code></p>
      <p><code>/* Возвращает 0 в случае успешного завершения, положительное значение Еххх –в случае ошибки */</code></p>
      <p>Отмена выполнения может быть использована в том случае, если несколько потоков начинают работу над какой-то задачей (например, поиск записи в базе данных) и один из них завершает работу раньше всех остальных. Тогда он может отменить их выполнение. Другим примером является обнаружение ошибки одним из одновременно выполняющих задачу потоков, который затем может отменить выполнение и всех остальных.</p>
      <p>Для обработки отмены выполнения поток может установить (push) или снять (pop) обработчик-очиститель (cleanup handler):</p>
      <p><code>#include &lt;pthread.h&gt;</code></p>
      <p><code>void pthread_cleanup_push(void (*<emphasis>function)</emphasis> (void *) void <emphasis>*arg</emphasis>);</code></p>
      <p><code>void pthread_cleanup_pop(int <emphasis>execute</emphasis>);</code></p>
      <p>Эти обработчики представляют собой обычные функции, которые вызываются:</p>
      <p>&#9632; в случае отмены выполнения потока (другим потоком, вызвавшим pthread_ cancel);</p>
      <p>&#9632; в случае добровольного завершения работы (вызовом pthread_exit или выходом из начальной функции потока).</p>
      <p>Обработчики-очистители выполняют всю необходимую работу по восстановлению значений переменных, такую как разблокирование взаимных исключений и семафоров, которые могли быть заблокированы данным потоком.</p>
      <p>Аргумент <emphasis>function</emphasis> представляет собой адрес вызываемой функции, а <emphasis>arg</emphasis> — ее единственный аргумент. Функция pthread_cleanup_pop всегда удаляет обработчик из верхушки стека и вызывает эту функцию, если значение <emphasis>execute</emphasis> отлично от 0.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Мы снова встретимся с проблемой отмены выполнения потоков в связи с листингом 15.26, где может произойти отмена выполнения сервера с дверьми при завершении работы клиента в процессе обработки вызванной им процедуры. </p>
      </cite>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Легче всего продемонстрировать проблему нашей реализации из предыдущего раздела с помощью примера. На рис. 8.1 изображена временная диаграмма выполнения нашей программы, а текст самой программы приведен в листинге 8.9. </p>
      <image l:href="#Any2FbImgLoader147"/>
      <p>Рис. 8.1. Временная диаграмма выполнения программы из листинга 8.9</p>
      <empty-line/>
      <subtitle>Создание двух потоков</subtitle>
      <p>10-13 Создаются два потока, первый из которых выполняет функцию thread1, а второй — thread2. После создания первого делается пауза длительностью в одну секунду, чтобы он успел заблокировать ресурс на чтение. </p>
      <subtitle>Ожидание завершения потоков</subtitle>
      <p>14-23 Мы ожидаем завершения работы второго потока и проверяем, что его статус имеет значение PTHREAD_CANCEL. Затем мы ждем завершения работы первого потока и проверяем, что его статус представляет собой нулевой указатель. Затем мы выводим значение трех счетчиков в структуре pthread_rwlock_t и уничтожаем блокировку.</p>
      <subtitle>Листинг 8.9. Тестовая программа, иллюстрирующая отмену выполнения потока</subtitle>
      <p><code>//my_rwlock_cancel/testcancel.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "pthread_rwlock.h"</code></p>
      <empty-line/>
      <p><code>3  pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;</code></p>
      <p><code>4  pthread_t tid1, tid2;</code></p>
      <p><code>5  void *thread1(void *), *thread2(void *);</code></p>
      <empty-line/>
      <p><code>6  int</code></p>
      <p><code>7  main(int argc, char **argv)</code></p>
      <p><code>8  {</code></p>
      <p><code>9   void *status;</code></p>
      <p><code>10  Set_concurrency(2);</code></p>
      <p><code>11  Pthread_create(&amp;tid1, NULL, thread1, NULL);</code></p>
      <p><code>12  sleep(1); /* даем первому потоку возможность получить блокировку */</code></p>
      <p><code>13  Pthread_create(&amp;tid2, NULL, thread2, NULL);</code></p>
      <p><code>14  Pthread_join(tid2, &amp;status);</code></p>
      <p><code>15  if (status != PTHREAD_CANCELED)</code></p>
      <p><code>16   printf("thread2 status = %p\n", status);</code></p>
      <p><code>17  Pthread_join(tid1, &amp;status);</code></p>
      <p><code>18  if (status != NULL)</code></p>
      <p><code>19   printf("thread1 status = %p\n", status);</code></p>
      <p><code>20  printf("rw_refcount = %d, rw_nwaitreaders = %d, rw_nwaitwriters = %d\n",</code></p>
      <p><code>21   rwlock.rw_refcount, rwlock.rw_nwaitreaders,</code></p>
      <p><code>22   rwlock.rw_nwaitwriters);</code></p>
      <p><code>23  Pthread_rwlock_destroy(&amp;rwlock);</code></p>
      <p><code>24  exit(0);</code></p>
      <p><code>25 }</code></p>
      <empty-line/>
      <p><code>26 void *</code></p>
      <p><code>27 thread1(void *arg)</code></p>
      <p><code>28 {</code></p>
      <p><code>29  Pthread_rwlock_rdlock(&amp;rwlock);</code></p>
      <p><code>30  printf("thread1() got a read lock\n");</code></p>
      <p><code>31  sleep(3); /* даем второму потоку возможность заблокироваться при вызове pthread_rwlock_wrlock() */</code></p>
      <p><code>32  pthread_cancel(tid2);</code></p>
      <p><code>33  sleep(3);</code></p>
      <p><code>34  Pthread_rwlock_unlock(&amp;rwlock);</code></p>
      <p><code>35  return(NULL);</code></p>
      <p><code>36 }</code></p>
      <empty-line/>
      <p><code>37 void *</code></p>
      <p><code>38 thread2(void *arg)</code></p>
      <p><code>39 {</code></p>
      <p><code>40  printf("thread2() trying to obtain a write lock\n"):</code></p>
      <p><code>41  Pthread_rwlock_wrlock(&amp;rwlock);</code></p>
      <p><code>42  printf("thread2() got a write lock\n"); /* не будет выполнено */</code></p>
      <p><code>43  sleep(1);</code></p>
      <p><code>44  Pthread_rwlock_unlock(&amp;rwlock);</code></p>
      <p><code>45  return(NULL);</code></p>
      <p><code>46 }</code></p>
      <subtitle>Функция thread1</subtitle>
      <p>26-36 Поток получает блокировку на чтение и ждет 3 секунды. Эта пауза дает возможность другому потоку вызвать pthread_rwlock_wrlock и заблокироваться при вызове pthread_cond_wait, поскольку блокировка на запись не может быть установлена из-за наличия блокировки на чтение. Затем первый поток вызывает pthread_cancel для отмены выполнения второго потока, ждет 3 секунды, освобождает блокировку на чтение и завершает работу.</p>
      <subtitle>Функция thread2</subtitle>
      <p>37-46 Второй поток делает попытку получить блокировку на запись (которую он получить не может, поскольку первый поток получил блокировку на чтение). Оставшаяся часть функции никогда не будет выполнена.</p>
      <p>При запуске этой программы с использованием функций из предыдущего раздела мы получим следующий результат:</p>
      <p><code>solaris % <strong>testcancel</strong></code></p>
      <p><code>thread1() got a read lock</code></p>
      <p><code>thread2() trying to obtain a write lock</code></p>
      <p>и мы никогда не вернемся к приглашению интерпретатора. Программа зависнет. Произошло вот что:</p>
      <p>1. Второй поток вызвал pthread_rwlock_wrlock (листинг 8.6), которая была заблокирована в вызове pthread_cond_wait.</p>
      <p>2. Первый поток вернулся из вызова slеер(3) и вызвал pthread_cancel.</p>
      <p>3. Второй поток был отменен и завершил работу. При отмене потока, заблокированного в ожидании сигнала по условной переменной, взаимное исключение блокируется до вызова первого обработчика-очистителя. (Мы не устанавливали обработчик, но взаимное исключение все равно блокируется до завершения потока.) Следовательно, при отмене выполнения второго потока взаимное исключение осталось заблокированным и значение rw_nwaitwriters в листинге 8.6 было увеличено.</p>
      <p>4. Первый поток вызывает pthread_rwlock_unlock и блокируется навсегда при вызове pthread_mutex_lock (листинг 8.8), потому что взаимное исключение все еще заблокировано отмененным потоком.</p>
      <p>Если мы уберем вызов pthread_rwlock_unlock в функции thread1, функция main выведет вот что:</p>
      <p><code>rw_refcount = 1, rw_nwaitreaders = 0, rw_nwaitwriters = 1</code></p>
      <p><code>pthread_rwlock_destroy error: Device busy</code> </p>
      <p>Первый счетчик имеет значение 1, поскольку мы удалили вызов pthread_rwlock_ unlock, а последний счетчик имеет значение 1, поскольку он был увеличен вторым потоком до того, как тот был отменен.</p>
      <p>Исправить эту проблему просто. Сначала добавим две строки к функции pthread_rwlock_rdlock в листинге 8.4. Строки отмечены знаком +:</p>
      <p><code>  rw-&gt;rw_nwaitreaders++;</code></p>
      <p><code>+ pthread_cleanup_push(rwlock_cancelrdwait, (void *) rw);</code></p>
      <p><code>  result = pthread_cond_wait(&amp;rw-&gt;rw_condreaders, &amp;rw-&gt;rw_mutex);</code></p>
      <p><code>+ pthread_cleanup_pop(0);</code></p>
      <p><code>  rw-&gt;rw_nwaitreaders++;</code></p>
      <p>Первая новая строка устанавливает обработчик-очиститель (функцию rwlock_cancelrdwait), а его единственным аргументом является указатель rw. После возвращения из pthread_cond_wait вторая новая строка удаляет обработчик. Аргумент функции pthread_cleanup_pop означает, что функцию-обработчик при этом вызывать не следует. Если этот аргумент имеет ненулевое значение, обработчик будет сначала вызван, а затем удален.</p>
      <p>Если поток будет отменен при вызове pthread_cond_wait, возврата из нее не произойдет. Вместо этого будут запущены обработчики (после блокирования соответствующего взаимного исключения, как мы отметили в пункте 3 чуть выше).</p>
      <p>В листинге 8.10 приведен текст функции rwlock_cancelrdwait, являющейся обработчиком-очистителем для phtread_rwlock_rdlock.</p>
      <subtitle>Листинг 8.10. Функция rwlock_cancelrdwait: обработчик для блокировки чтения</subtitle>
      <p><code>//my_rwlock_cancel/pthread_rwlock_rdlock.с</code></p>
      <p><code>3  static void</code></p>
      <p><code>4  rwlock_cancelrdwait(void *arg)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   pthread_rwlock_t *rw;</code></p>
      <p><code>7   rw = arg;</code></p>
      <p><code>8   rw-&gt;rw_nwaitreaders--;</code></p>
      <p><code>9   pthread_mutex_unlock(&amp;rw-&gt;rw_mutex);</code></p>
      <p><code>10 }</code></p>
      <p>8-9 Счетчик rw_nwaitreaders уменьшается, а затем разблокируется взаимное исключение. Это состояние, которое должно быть восстановлено при отмене потока.</p>
      <p>Аналогично мы исправим текст функции pthread_rwlock_wrlock из листинга 8.6. Сначала добавим две новые строки рядом с вызовом pthread_cond_wait:</p>
      <p><code>  rw-&gt;rw_nwaitreaders++;</code></p>
      <p><code>+ pthread_cleanup_push(rwlock_cancelrwrwait, (void*) rw);</code></p>
      <p><code>  result = pthread_cond_wait(&amp;rw-&gt;rw_condwriters, &amp;rw-&gt;rw_mutex);</code></p>
      <p><code>+ pthread_cleanup_pop(0);</code></p>
      <p><code>  rw-&gt;rw_nwaitreaders--;</code></p>
      <p>В листинге 8.11 приведен текст функции rwlock_cancelwrwait, являющейся обработчиком-очистителем для запроса блокировки на запись.</p>
      <subtitle>Листинг 8.11. Функция rwlock_cancelwrwait: обработчик для блокировки записи</subtitle>
      <p><code>//my_rwlock_cancel/pthread_rwlock_wrlock.с</code></p>
      <p><code>3  static void</code></p>
      <p><code>4  rwlock_cancelwrwait(void *arg)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   pthread_rwlock_t *rw;</code></p>
      <p><code>7   rw = arg;</code></p>
      <p><code>8   rw-&gt;rw_nwaitwriters––;</code></p>
      <p><code>9   pthread_mutex_unlock(&amp;rw-&gt;rw_mutex);</code></p>
      <p><code>10 }</code></p>
      <p>8-9 Счетчик rw_nwaitwriters уменьшается, и взаимное исключение разблокируется. При запуске нашей тестовой программы из листинга 8.9 с этими новыми функциями мы получим правильные результаты:</p>
      <p><code>solaris %<strong>testcancel</strong></code></p>
      <p><code>thread1() got a read lock</code></p>
      <p><code>thread2() trying to obtain a write lock</code></p>
      <p><code>rw_refcount = 0, rw_nwaitreaders = 0, rw_nwaitwriters = 0</code></p>
      <p>Теперь три счетчика имеют правильные значения, первый поток возвращается из вызова pthread_rwlock_unlock, а функция pthread_rwlock_destroy не возвращает ошибку EBUSY.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Этот раздел представляет собой обзор вопросов, связанных с отменой выполнения потоков. Для более детального изучения этих проблем можно обратиться, например, к разделу 5.3 книги [3].</p>
      </cite>
     </section>
    </section>
    <section>
     <title>
      <p>8.6. Резюме</p>
     </title>
     <p>Блокировки чтения-записи позволяют лучше распараллелить работу с данными, чем обычные взаимные исключения, если защищаемые данные чаще считываются, чем изменяются. Функции для работы с этими блокировками определены стандартом Unix 98, их мы и описываем в этой главе. Аналогичные или подобные им функции должны появиться в новой версии стандарта Posix. По виду функции аналогичны функциям для работы со взаимными исключениями (глава 7).</p>
     <p>Блокировки чтения-записи легко реализовать с использованием взаимных исключений и условных переменных. Мы приводим пример возможной реализации. В нашей версии приоритет имеют записывающие потоки, но в некоторых других версиях приоритет может быть отдан и считывающим потокам.</p>
     <p>Потоки могут быть отменены в то время, когда они находятся в заблокированном состоянии, в частности при вызове pthread_cond_wait, и на примере нашей реализации мы убедились, что при этом могут возникнуть проблемы. Решить эту проблему можно путем использования обработчиков-очистителей.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Измените реализацию в разделе 8.4 таким образом, чтобы приоритет имели считывающие, а не записывающие потоки.</p>
     <p>2. Сравните скорость работы нашей реализации из раздела 8.4 с предоставленной производителем. </p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 9</p>
     <p>Блокирование записей</p>
    </title>
    <section>
     <title>
      <p>9.1. Введение</p>
     </title>
     <p>Блокировки чтения-записи, описанные в предыдущей главе, представляют собой хранящиеся в памяти переменные типа pthread_rwlock_t. Эти переменные могут использоваться потоками одного процесса (этот режим работы установлен по умолчанию) либо несколькими процессами при условии, что переменные располагаются в разделяемой этими процессами памяти и при их инициализации был установлен атрибут PTHREAD_PROCESS_SHARED,</p>
     <p>В этой главе описан усовершенствованный тип блокировки чтения-записи, который может использоваться родственными и неродственными процессами при совместном доступе к файлу. Обращение к блокируемому файлу осуществляется через его дескриптор, а функция для работы с блокировкой называется fcntl. Такой тип блокировки обычно хранится в ядре, причем информация о владельце блокировки хранится в виде его идентификатора процесса. Таким образом, блокировки записей fcntl могут использоваться только несколькими процессами, но не отдельными потоками одного процесса.</p>
     <p>В этой главе мы в первый раз встретимся с нашим примером на увеличение последовательного номера. Рассмотрим следующую ситуацию, с которой столкнулись, например, разработчики спулера печати для Unix (команда lpr в BSD и lp в System V). Процесс, помещающий задания в очередь печати для последующей их обработки другим процессом, должен присваивать каждому из них уникальный последовательный номер. Идентификатор процесса, уникальный во время его выполнения, не может использоваться как последовательный номер, поскольку задание может просуществовать достаточно долго для того, чтобы этот идентификатор был повторно использован другим процессом. Процесс может также отправить на печать несколько заданий, каждому из которых нужно будет присвоить уникальный номер. Метод, используемый спулерами печати, заключается в том, чтобы хранить очередной порядковый номер задания для каждого принтера в отдельном файле. Этот файл содержит всего одну строку с порядковым номером в формате ASCII. Каждый процесс, которому нужно воспользоваться этим номером, должен выполнить следующие три действия:</p>
     <p>1. Считать порядковый номер из файла.</p>
     <p>2. Использовать этот номер.</p>
     <p>3. Увеличить его на единицу и записать обратно в файл.</p>
     <p>Проблема в том, что пока один процесс выполняет эти три действия, другой процесс может параллельно делать то же самое. В итоге возникнет полный беспорядок с номерами, как мы увидим в следующих примерах.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Описанная выше проблема называется проблемой взаимных исключений. Она может быть решена с использованием взаимных исключений из главы 7 или блокировок чтения-записи из главы 8. Различие состоит в том, что здесь мы предполагаем неродственность процессов, что усложняет использование предложенных выше методов. Мы могли бы использовать разделяемую память (подробно об этом говорится в четвертой части книги), поместив в нее переменную синхронизации одного из этих типов, но для неродственных процессов проще воспользоваться блокировкой fcntl. Другим фактором в данном случае стало то, что проблема со спулерами печати возникла задолго до появления взаимных исключений, условных переменных и блокировок чтения-записи. Блокировка записей была добавлена в Unix в начале 80-х, до того как появились концепции разделяемой памяти и программных потоков.</p>
     </cite>
     <p>Таким образом, процессу нужно заблокировать файл, чтобы никакой другой процесс не мог получить к нему доступ, пока первый выполняет свои три действия. В листинге 9.2 приведен текст простой программы, выполняющей соответствующие действия. Функции my_lock и my_unlock обеспечивают блокирование и разблокирование файла в соответствующие моменты. Мы приведем несколько возможных вариантов реализации этих функций.</p>
     <p>20 Каждый раз при прохождении цикла мы выводим имя программы (argv[0]) перед порядковым номером, поскольку эта функция main будет использоваться с различными версиями функций блокировки и нам бы хотелось видеть, какая версия программы выводит данную последовательность порядковых номеров.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Вывод идентификатора процесса требует преобразования переменной типа pid_t к типу long и последующего использования строки формата %ld. Проблема тут в том, что идентификатор процесса принадлежит к одному из целых типов, но мы не знаем, к какому именно, поэтому предполагается наиболее вместительный — long. Если бы мы предположили, что идентификатор имеет тип int и использовали бы строку %d, a pid_t на самом деле являлся бы типом long, код мог бы работать неправильно.</p>
     </cite>
     <p>Посмотрим, что будет, если не использовать блокировку. В листинге 9.1<a l:href="#n_1" type="note">[1]</a> приведены версии функций my_lock и my_unlock, которые вообще ничего не делают.</p>
     <subtitle>Листинг 9.1. Функции, не осуществляющие блокировку</subtitle>
     <p><code>//lock/locknone.c</code></p>
     <p><code>1  void</code></p>
     <p><code>2  my_lock(int fd)</code></p>
     <p><code>3  {</code></p>
     <p><code>4   return;</code></p>
     <p><code>5  }</code></p>
     <empty-line/>
     <p><code>6  void</code></p>
     <p><code>7  my_unlock(int fd)</code></p>
     <p><code>8  {</code></p>
     <p><code>9   return;</code></p>
     <p><code>10 }</code></p>
     <subtitle>Листинг 9.2. Функция main для примеров с блокировкой файла</subtitle>
     <p><code>//lock/lockmain.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define SEQFILE "seqno" /* имя файла */</code></p>
     <empty-line/>
     <p><code>3  void my_lock(int), my_unlock(int);</code></p>
     <p><code>4  int</code></p>
     <p><code>5  main(int argc, char **argv)</code></p>
     <p><code>6  {</code></p>
     <p><code>7   int fd;</code></p>
     <p><code>8   long i, seqno;</code></p>
     <p><code>9   pid_t pid;</code></p>
     <p><code>10  ssize_t n;</code></p>
     <p><code>11  char line[MAXLINE + 1];</code></p>
     <p><code>12  pid = getpid();</code></p>
     <p><code>13  fd = Open(SEQFILE, O_RDWR, FILE_MODE);</code></p>
     <p><code>14  for (i = 0; i &lt; 20; i++) {</code></p>
     <p><code>15   my_lock(fd); /* блокируем файл */</code></p>
     <p><code>16   Lseek(fd, 0L, SEEK_SET); /* переходим к его началу */</code></p>
     <p><code>17   n = Read(fd, line, MAXLINE);</code></p>
     <p><code>18   line[n] = '\0'; /* завершающий 0 для sscanf */</code></p>
     <p><code>19   n = sscanf(line, "%ld\n", &amp;seqno);</code></p>
     <p><code>20   printf(%s; pid = %ld, seq# = %ld\n", argv[0], (long) pid, seqno);</code></p>
     <p><code>21   seqno++; /* увеличиваем порядковый номер */</code></p>
     <p><code>22   snprintf(line, sizeof(line), "%ld\n", seqno);</code></p>
     <p><code>23   Lseek(fd, 0L, SEEK_SET); /* переходим на начало перед записью */</code></p>
     <p><code>24   Write(fd, line, strlen(line));</code></p>
     <p><code>25   my_unlock(fd); /* разблокируем файл */</code></p>
     <p><code>26  }</code></p>
     <p><code>27  exit(0);</code></p>
     <p><code>28 }</code></p>
     <p>Если начальное значение порядкового номера в файле было 1 и был запущен только один экземпляр программы, мы увидим следующий результат:</p>
     <p><code>solaris % <strong>locknone</strong></code></p>
     <p><code>locknone: pid = 15491, seq# = 1</code></p>
     <p><code>locknone: pid = 15491, seq# = 2</code></p>
     <p><code>locknone: pid = 15491, seq# = 3</code></p>
     <p><code>locknone: pid = 15491, seq# = 4</code></p>
     <p><code>locknone: pid = 15491. seq# = 5</code></p>
     <p><code>locknone: pid = 15491, seq# = 6</code></p>
     <p><code>locknone: pid = 15491, seq# = 7</code></p>
     <p><code>locknone: pid = 15491, seq# – 8</code></p>
     <p><code>locknone: pid = 15491, seq# = 9</code></p>
     <p><code>locknone: pid = 15491, seq# = 10</code></p>
     <p><code>locknone: pid = 15491, seq# = 11</code></p>
     <p><code>locknone: pid = 15491, seq# = 12</code></p>
     <p><code>locknone: pid = 15491, seq# = 13</code></p>
     <p><code>locknone: pid = 15491, seq# = 14</code></p>
     <p><code>locknone: pid = 15491, seq# = 15</code></p>
     <p><code>locknone: pid = 15491, seq# = 16</code></p>
     <p><code>locknone: pid = 15491, seq# = 17</code></p>
     <p><code>locknone: pid = 15491, seq# = 18</code></p>
     <p><code>locknone: pid = 15491, seq# = 19</code></p>
     <p><code>locknone: pid = 15491, seq# = 20</code></p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Обратите внимание, что функция main хранится в файле lockmain.c, но мы компилируем и компонуем эту программу с функциями, не осуществляющими никакой блокировки (листинг 9.1), поэтому мы называем ее locknone. Ниже будут использоваться другие версии функций my_lock и my_unlock, и исполняемый файл будет называться по-другому в соответствии с используемым методом блокировки.</p>
     </cite>
     <p>Установим значение последовательного номера в файле обратно в единицу и запустим программу в двух экземплярах в фоновом режиме. Результат будет такой:</p>
     <p><code>solaris % <strong>locknone &amp; locknone&amp;</strong></code></p>
     <p><code>solaris % locknone: pid = 15498, seq# = 1</code></p>
     <p><code>locknone: pid = 15498, seq# = 2</code></p>
     <p><code>locknone: pid = 15498, seq# = 3</code></p>
     <p><code>locknone: pid = 15498, seq# = 4</code></p>
     <p><code>locknone: pid = 15498, seq# = 5</code></p>
     <p><code>locknone: pid = 15498, seq# = 6</code></p>
     <p><code>locknone: pid = 15498, seq# = 7</code></p>
     <p><code>locknone: pid = 15498, seq# = 8</code></p>
     <p><code>locknone: pid = 15498, seq# = 9</code></p>
     <p><code>locknone: pid = 15498, seq# = 10</code></p>
     <p><code>locknone: pid = 15498, seq# = 11</code></p>
     <p><code>locknone: pid = 15498, seq# = 12</code></p>
     <p><code>locknone: pid = 15498, seq# = 13</code></p>
     <p><code>locknone: pid = 15498, seq# = 14</code></p>
     <p><code>locknone: pid = 15498, seq# = 15</code></p>
     <p><code>locknone: pid = 15498, seq# = 16</code></p>
     <p><code>locknone: pid = 15498, seq# = 17</code></p>
     <p><code>locknone: pid = 15498, seq# = 18</code></p>
     <p><code>locknone: pid = 15498, seq# = 19</code></p>
     <p><code>locknone: pid = 15498, seq# = 20</code></p>
     <p><code>locknone: pid = 15499, seq# = 1</code></p>
     <p><code>locknone: pid = 15499, seq# = 2</code></p>
     <p><code>locknone: pid = 15499, seq# = 3</code></p>
     <p><code>locknone: pid = 15499, seq# = 4</code></p>
     <p><code>locknone: pid = 15499, seq# = 5</code></p>
     <p><code>locknone: pid = 15499, seq# = 6</code></p>
     <p><code>locknone: pid = 15499, seq# = 7</code></p>
     <p><code>locknone: pid = 15499, seq# = 8</code></p>
     <p><code>locknone: pid = 15499, seq# = 9</code></p>
     <p><code>locknone: pid – 15499, seq# = 10</code></p>
     <p><code>locknone: pid = 15499, seq# = 11</code></p>
     <p><code>locknone: pid = 15499, seq# – 12</code></p>
     <p><code>locknone: pid = 15499, seq# = 13</code></p>
     <p><code>locknone: pid = 15499, seq# = 14</code></p>
     <p><code>locknone: pid = 15499, seq# = 15</code></p>
     <p><code>locknone: pid = 15499, seq# = 16</code></p>
     <p><code>locknone: pid = 15499, seq# = 17</code></p>
     <p><code>locknone: pid = 15499, seq# = 18</code></p>
     <p><code>locknone: pid = 15499, seq# = 19</code></p>
     <p><code>locknone: pid = 15499, seq# = 20</code></p>
     <p>Первое, на что мы обращаем внимание, — подсказка интерпретатора, появившаяся до начала текста, выводимого программой. Это нормально и всегда имеет место при запуске программ в фоновом режиме.</p>
     <p>Первые двадцать строк вывода не содержат ошибок. Они были сформированы первым экземпляром программы (с идентификатором 15 498). Проблема возникает в первой строке, выведенной вторым экземпляром (идентификатор 15499): он напечатал порядковый номер 1. Получилось это, скорее всего, так: второй процесс был запущен ядром, считал из файла порядковый номер (1), а затем управление было передано первому процессу, который работал до завершения. Затем второй процесс снова получил управление и продолжил выполняться с тем значением порядкового номера, которое было им уже считано (1). Это не то, что нам нужно. Каждый процесс считывает значение, увеличивает его и записывает обратно 20 раз (на экран выведено ровно 40 строк), поэтому конечное значение номера должно быть 40.</p>
     <p>Нам нужно каким-то образом предотвратить изменение файла с порядковым номером на протяжении выполнения трех действий одним из процессов. Эти действия должны выполняться как атомарная операция по отношению к другим процессам. Код между вызовами my_lock и my_unlock представляет собой критическую область (глава 7).</p>
     <p>При запуске двух экземпляров программы в фоновом режиме результат на самом деле непредсказуем. Нет никакой гарантии, что при каждом запуске мы будем получать один и тот же результат. Это нормально, если три действия будут выполняться как одна атомарная операция; в этом случае конечное значение порядкового номера все равно будет 40. Однако при неатомарном выполнении конечное значение часто будет отличным от 40, и это нас не устраивает. Например, нам безразлично, будет ли порядковый номер увеличен от 1 до 20 первым процессом и от 21 до 40 вторым или же процессы будут по очереди увеличивать его значение на единицу. Неопределенность не делает результат неправильным, а вот атомарность выполнения операций — делает. Однако неопределенность выполнения усложняет отладку программ.</p>
    </section>
    <section>
     <title>
      <p>9.2. Блокирование записей и файлов</p>
     </title>
     <section>
      <p>Ядро Unix никак не интерпретирует содержимое файла, оставляя всю обработку записей приложениям, работающим с этим файлом. Тем не менее для описания предоставляемых возможностей используется термин «блокировка записей». В действительности приложение указывает диапазон байтов файла для блокирования или разблокирования. Сколько логических записей помещается в этот диапазон — значения не имеет.</p>
      <p>Стандарт Posix определяет один специальный диапазон с началом в 0 (начало файла) и длиной 0 байт, который устанавливает блокировку для всего файла целиком. Мы будем говорить о блокировке записей, подразумевая блокировку файла как частный случай.</p>
      <p>Термин «степень детализации» (granularity) используется для описания минимального размера блокируемого объекта. Для стандарта Posix эта величина составляет 1 байт. Обычно степень детализации связана с максимальным количеством одновременных обращений к файлу. Пусть, например, с некоторым файлом одновременно работают пять процессов, из которых три считывают данные из файла и два записывают в него. Предположим также, что каждый процесс работает со своим набором записей и каждый запрос требует примерно одинакового времени для обработки (1 секунда). Если блокировка осуществляется на уровне файла (самый низкий уровень детализации), три считывающих процесса смогут работать со своими записями одновременно, а двум записывающим придется ждать окончания их работы. Затем запись будет произведена сначала одним из оставшихся процессов, а потом другим. Полное затраченное время будет порядка 3 секунд (это, разумеется, очень грубая оценка). Если же уровень детализации соответствует размеру записи (наилучший уровень детализации), все пять процессов смогут работать одновременно, поскольку они обрабатывают разные записи. При этом на выполнение будет затрачена только одна секунда.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Потомки BSD поддерживают лишь блокировку файла целиком с помощью функции flock. Возможность заблокировать диапазон байтов не предусматривается. </p>
      </cite>
     </section>
     <section>
      <title>
       <p>История</p>
      </title>
      <p>За долгие годы было разработано множество методов блокировки файлов и записей. Древние программы вроде UUCP и демонов печати играли на реализации файловой системы (три из них описаны в разделе 9.8). Они работали достаточно медленно и не подходили для баз данных, которые стали появляться в начале 80-х.</p>
      <p>Первый раз возможность блокировать файлы и записи появилась в Version 7, куда она была добавлена Джоном Бассом John Bass) в 1980 году в виде нового системного вызова locking. Это блокирование было обязательным (mandatory locking); его унаследовали многие версии System III и Xenix. (Разница между обязательным и рекомендательным блокированием и между блокированием записей и файлов описана далее в этой главе.)</p>
      <p>Версия 4.2BSD предоставила возможность блокирования файлов (а не записей) функцией flock в 1983. В 1984 году стандарт /usr/group (один из предшественников Х/Open) определил функцию lockf, которая осуществляла только исключающую блокировку (на запись), но не совместную.</p>
      <p>В 1984 году в System V Release 2 была добавлена возможность рекомендательной блокировки записей с помощью fcntl. Функция lockf в этой версии также имелась, но она осуществляла просто вызов fcntl. (Многие нынешние версии также реализуют lockf через вызов fcntl.) В 1986 году в версии System V Release 3 появилась обязательная блокировка записей с помощью fcntl. При этом использовался бит set-group-ID (установка идентификатора группы) — об этом методе рассказано в разделе 9.5.</p>
      <p>В 1988 году стандарт Posix.1 включил в себя рекомендательную и обязательную блокировку файлов и записей с помощью функции fcntl, и это именно то, что является предметом обсуждения данной главы. Стандарт X/Open Portability Guide Issue 3 (XPG3, 1988) также указывает на необходимость осуществления блокировки записей через fcntl.</p>
     </section>
    </section>
    <section>
     <title>
      <p>9.3. Блокирование записей с помощью fcntl по стандарту Posix</p>
     </title>
     <section>
      <p>Согласно стандарту Posix, интерфейсом для блокировки записей является функция fcntl:</p>
      <p><code>#include &lt;fcntl.h&gt;</code></p>
      <p><code>int fcntl(int <emphasis>fd,</emphasis> int <emphasis>cmd,… /*</emphasis> struct flock <emphasis>*arg</emphasis> */);</code></p>
      <p><code>/* Возвращает –1 в случае ошибки: результат, возвращаемый в случае успешного завершения, зависит от аргумента <emphasis>cmd</emphasis> */</code></p>
      <p>Для блокировки записей используются три различных значения аргумента <emphasis>cmd.</emphasis> Эти три значения требуют, чтобы третий аргумент, <emphasis>arg,</emphasis> являлся указателем на структуру flock:</p>
      <p><code>struct flock {</code></p>
      <p><code> short l_type;   /* F_RDLCK, F_WRLCK, F_UNLCK */</code></p>
      <p><code> short l_whence; /* SEEK_SET, SEEK_CUR, SEEK_END */</code></p>
      <p><code> off_t l_start;  /* относительный сдвиг в байтах */</code></p>
      <p><code> off_t l_len;    /* количество байтов; 0 означает до конца файла */</code></p>
      <p><code> pid_t l_pid;    /* PID, возвращаемый F_GETLK */</code></p>
      <p><code>};</code></p>
      <p>Вот три возможные команды (значения аргумента <emphasis>cmd</emphasis> ):</p>
      <p>&#9632; F_SETLK — получение блокировки (l_type имеет значение либо F_RDLCK, либо F_WRLCK) или сброс блокировки (l_type имеет значение F_UNLCK), свойства которой определяются структурой flock, на которую указывает <emphasis>arg.</emphasis> Если процесс не может получить блокировку, происходит немедленный возврат с ошибкой EACCESS или EAGAIN.</p>
      <p>&#9632; F_SETLKW — эта команда идентична предыдущей. Однако при невозможности блокирования ресурса процесс приостанавливается, до тех пор пока блокировка не сможет быть получена (W в конце команды означает «wait»).</p>
      <p>&#9632; F_GETLK — проверка состояния блокировки, на которую указывает <emphasis>arg.</emphasis> Если в данный момент блокировка не установлена, поле l_type структуры flock, на которую указывает <emphasis>arg,</emphasis> будет иметь значение F_UNLCK. В противном случае в структуре flock, на которую указывает <emphasis>arg,</emphasis> возвращается информация об установленной блокировке, включая идентификатор процесса, заблокировавшего ресурс. </p>
      <p>Обратите внимание, что последовательный вызов F_GETLK и F_SETLK не является атомарной операцией. Если мы вызвали F_GETLK и она вернула значение F_UNLCK в поле l_type, это не означает, что немедленный вызов F_SETLK будет успешным. Между этими двумя вызовами другой процесс мог уже заблокировать ресурс.</p>
      <p>Причина, по которой была введена команда F_GETLK, — необходимость получения информации о блокировке в том случае, когда F_SETLK возвращает ошибку. Мы можем узнать, кто и каким образом заблокировал ресурс (на чтение или на запись). Но и в этом случае мы должны быть готовы к тому, что F_GETLK вернет результат F_UNLCK, поскольку между двумя вызовами другой процесс мог освободить ресурс.</p>
      <p>Структура flock описывает тип блокировки (чтение или запись) и блокируемый диапазон. Как и в 1 seek, начальный сдвиг представляет собой сдвиг относительно начала файла, текущего положения или конца файла, и интерпретируется в зависимости от значения поля l_whence (SEEK_SET, SEEK_CUR, SEEK_END).</p>
      <p>Поле l_len указывает длину блокируемого диапазона. Значение 0 соответствует блокированию от l_start до конца файла. Существуют, таким образом, два способа заблокировать файл целиком:</p>
      <p>1. Указать l_whence = SEEK_SET, l_start = 0 и l_len = 0.</p>
      <p>2. Перейти к началу файла с помощью lseek, затем указать l_whence = SEEK_CUR, l_start = 0 и l_len = 0.</p>
      <p>Чаще всего используется первый метод, поскольку он предусматривает единственный вызов (fcntl — см. также упражнение 9.10).</p>
      <p>Блокировка может быть установлена либо на чтение, либо на запись, и для конкретного байта файла может быть задан только один тип блокировки. Более того, на конкретный байт может быть установлено несколько блокировок на чтение, но только одна блокировка на запись. Это соответствует тому, что говорилось о блокировках чтения-записи в предыдущей главе. Естественно, при попытке установить блокировку на чтение для файла, открытого только на запись, будет возвращена ошибка.</p>
      <p>Все блокировки, установленные конкретным процессом, снимаются при закрытии дескриптора файла этим процессом и при завершении его работы. Блокировки не наследуются дочерним процессом при вызове fork.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Снятие блокировок при завершении процесса обеспечивается только для блокировок записей fcntl и (в качестве дополнительной возможности) для семафоров System V. Для других средств синхронизации (взаимных исключений, условных переменных, блокировок чтения-записи и семафоров Posix) автоматическое снятие при завершении процесса не предусматривается. Об этом мы говорили в конце раздела 7.7. </p>
      </cite>
      <p>Блокировка записей не должна использоваться со стандартной библиотекой ввода-вывода, поскольку функции из этой библиотеки осуществляют внутреннюю буферизацию. С заблокированными файлами следует использовать функции read и write, чтобы не возникало неожиданных проблем. </p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Вернемся к нашему примеру из листинга 9.2 и перепишем функции my_lock и my_unlock из листинга 9.1 так, чтобы воспользоваться блокировкой записей Posix. Текст этих функций приведен в листинге 9.3.</p>
      <subtitle>Листинг 9.3. Блокировка записей fcntl по стандарту Posix</subtitle>
      <p><code>//lock/lockfcntl.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  my_lock(int fd)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   struct flock lock;</code></p>
      <p><code>6   lock.l_type = F_WRLCK;</code></p>
      <p><code>7   lock.l_whence = SEEK_SET;</code></p>
      <p><code>8   lock.l_start = 0;</code></p>
      <p><code>9   lock.l_len = 0; /* блокирование всего файла на запись */</code></p>
      <p><code>10  Fcntl(fd, F_SETLKW, &amp;lock);</code></p>
      <p><code>11 }</code></p>
      <empty-line/>
      <p><code>12 void</code></p>
      <p><code>13 my_unlock(int fd)</code></p>
      <p><code>14 {</code></p>
      <p><code>15  struct flock lock;</code></p>
      <p><code>16  lock.l_type = F_UNLCK;</code></p>
      <p><code>17  lock.l_whence = SEEK_SET;</code></p>
      <p><code>18  lock.l_start = 0;</code></p>
      <p><code>19  lock.l_len = 0; /* разблокирование всего файла */</code></p>
      <p><code>20  Fcntl(fd. F_SETLK, &amp;lock);</code></p>
      <p><code>21 }</code></p>
      <p>Обратите внимание, что мы устанавливаем блокировку на запись, что гарантирует единственность изменяющего данные процесса (см. упражнение 9.4). При получении блокировки мы используем команду F_SETLKW, чтобы приостановить выполнение процесса при невозможности установки блокировки.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Зная определение структуры flock, приведенное выше, мы могли бы проинициализировать структуру my_lock как</p>
       <p><code>static struct flock lock = { F_WRLCK, SEEK_SET, 0, 0, 0 };</code></p>
       <p>но это неверно. Posix определяет только обязательные поля структуры, а реализации могут менять их порядок и добавлять к ним дополнительные.</p>
      </cite>
      <p>Мы не приводим результат работы пpoгрaммы, но она, судя по всему, работает правильно. Выполнение этой программы не дает возможности утверждать, что в ней нет ошибок. Если результат оказывается неправильным, то можно сказать с уверенностью, что что-то не так. Но успешное выполнение программы еще ни о чем не говорит. Ядро могло выполнить сначала одну программу, затем другую, и если они не выполнялись параллельно, мы не имеем возможности увидеть ошибку. Увеличить шансы обнаружения ошибки можно, изменив функцию main таким образом, чтобы последовательный номер увеличивался 10000 раз, и запустив 20 экземпляров программы одновременно. Если начальное значение последовательного номера в файле было 1, мы можем ожидать, что после завершения работы всех этих процессов мы увидим в файле число 200001.</p>
     </section>
     <section>
      <title>
       <p>Пример: упрощение с помощью макросов</p>
      </title>
      <p>В листинге 9.3 установка и снятие блокировки занимали шесть строк кода. Мы должны выделить место под структуру, инициализировать ее и затем вызвать fcntl. Программы можно упростить, если определить следующие семь макросов, которые взяты из раздела 12.3 [21]:</p>
      <p><code>#define read_lock(fd, offset, whence, len) \</code></p>
      <p><code> lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)</code></p>
      <p><code>#define readw_lock(fd, offset, whence, len) \</code></p>
      <p><code> lock_reg(fd, F_SETLKW, F_RDlCK, offset, whence, len)</code></p>
      <p><code>#define write_lock(fd, offset, whence, len) \</code></p>
      <p><code> lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)</code></p>
      <p><code>#define writew_lock(fd, offset, whence, len) \</code></p>
      <p><code> lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)</code></p>
      <p><code>#define un_lock(fd, offset, whence, len) \</code></p>
      <p><code> lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)</code></p>
      <p><code>#define is_read_lockable(fd, offset, whence, len) \</code></p>
      <p><code> lock_test(fd, F_RDLCK, offset, whence, len)</code></p>
      <p><code>#define is_write_lockable(fd, offset, whence, len) \</code></p>
      <p><code> lock_test(fd, F_WRLCK, offset, whence, len)</code></p>
      <p>Эти макросы используют наши функции lock_reg и lock_test, текст которых приведен в листингах 9.4 и 9.5. С ними нам уже не нужно заботиться об инициализации структур и вызове функций. Первые три аргумента специально сделаны совпадающими с первыми тремя аргументами функции lseek.</p>
      <p>Мы также определяем две функции-обертки, Lock_reg и Lock_test, завершающие свое выполнение с возвратом ошибки fcntl, и семь макросов с именами, начинающимися с заглавной буквы, чтобы эти функции вызывать.</p>
      <p>С помощью новых макросов мы можем записать функции my_lock и my_unlock из листинга 9.3 как</p>
      <p><code>#define my_lock(fd) (Writew_lock(fd, 0, SEEK_SET, 0))</code></p>
      <p><code>#define my_unlock(fd) (Un_lock(fd, 0, SEEK_SET, 0))</code></p>
      <subtitle>Листинг 9.4. Вызов fcntl для получения и снятия блокировки</subtitle>
      <p><code>//lib/lock_reg.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  lock_reg(int fd, int cmd, int type, off_t offset, int whence, off_t len)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   struct flock lock;</code></p>
      <p><code>6   lock.l_type = type; /* F_RDLCK, F_WRLCK, F_UNLCK */</code></p>
      <p><code>7   lock.l_start = offset; /* сдвиг по отношению к l_whence */</code></p>
      <p><code>8   lock.l_whence = whence; /* SEEK SET. SEEK CUR, SEEK END */</code></p>
      <p><code>9   lock.l_len = len; /* количество байтов (0 – до конца файла) */</code></p>
      <p><code>10  return(fcnt(fd, cmd, &amp;lock)"); /* –1 в случае ошибки */</code></p>
      <p><code>11 }</code></p>
      <subtitle>Листинг 9.5. Вызов fcntl для проверки состояния блокировки</subtitle>
      <p><code>//lib/lock_test.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  pid_t</code></p>
      <p><code>3  lock_test(int fd, int type, off_t offset, int whence, off_t len)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   struct flock lock;</code></p>
      <p><code>6   lock.l_type = type; /* F_RDLCK or F_WRLCK */</code></p>
      <p><code>7   lock.l_start = offset; /* сдвиг по отношению к l_whence */</code></p>
      <p><code>8   lock.l_whence = whence; /* SEEK_SET, SEEK_CUR, SEEK_END */</code></p>
      <p><code>9                      lock.l_len = len; /* количество байтов. 0 – до конца файла */</code></p>
      <p><code>10 if (fcntl(fd, F_GETLK, &amp;lock) == –1)</code></p>
      <p><code>11 return(-1); /* непредвиденная ошибка */</code></p>
      <p><code>12 if (lock.l_type == F_UNLCK)</code></p>
      <p><code>13 return(0); /* false, область не заблокирована другим процессом */</code></p>
      <p><code>14 return(lock.l_pid); /* true, возвращается положительный PID процесса. заблокировавшего ресурс */</code></p>
      <p><code>15 }</code></p>
     </section>
    </section>
    <section>
     <title>
      <p>9.4. Рекомендательная блокировка</p>
     </title>
     <section>
      <p>Блокировка записей по стандарту Posix называется рекомендательной. Ядро хранит информацию обо всех заблокированных различными процессами файлах, но оно не предотвращает запись в заблокированный на чтение процесс. Ядро также не предотвращает чтение из файла, заблокированного на запись. Процесс может игнорировать рекомендательную блокировку (advisory lock) и действовать по своему усмотрению (если у него имеются соответствующие разрешения на чтение и запись).</p>
      <p>Рекомендательные блокировки отлично подходят для сотрудничающих процессов (cooperating processes). Примером сотрудничающих процессов являются сетевые демоны: все они находятся под контролем системного администратора. Пока в файл, содержащий порядковый номер, запрещена запись, никакой процесс не сможет его изменить.</p>
     </section>
     <section>
      <title>
       <p>Пример: несотрудничающие процессы</p>
      </title>
      <p>Мы можем проиллюстрировать рекомендательный характер блокировок, запустив два экземпляра нашей программы, один из которых (lockfcntl) использует функции из листинга 9.3 и блокирует файл перед увеличением последовательного номера, а другой (locknone) использует функции из листинга 9.1 и не устанавливает никаких блокировок:</p>
      <p><code>solaris % <strong>lockfcntl &amp; locknone &amp;</strong></code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 1</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 2</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 3</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 4</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 5</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 6</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 7</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 8</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 9</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 10</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 11</code></p>
      <p><code>locknone: pid = 18817, seq# = 11</code></p>
      <p><code>locknone: pid = 18817, seq# = 12</code></p>
      <p><code>locknone: pid = 18817, seq# = 13</code></p>
      <p><code>locknone: pid = 18817, seq# = 14</code></p>
      <p><code>locknone: pid = 18817, seq# = 15</code></p>
      <p><code>locknone: pid = 18817, seq# = 16</code></p>
      <p><code>locknone: pid = 18817, seq# = 17</code></p>
      <p><code>locknone: pid = 18817, seq# = 18</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 12</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 13</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 14</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 15</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 16</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 17</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 18</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 19</code></p>
      <p><code>lockfcntl: pid = 18816, seq# = 20</code></p>
      <p><code>locknone: pid = 18817, seq# = 19</code></p>
      <p><code>locknone: pid = 18817, seq# = 20</code></p>
      <p><code>locknone: pid = 18817, seq# = 21</code></p>
      <p><code>locknone: pid = 18817, seq# = 22</code></p>
      <p><code>locknone: pid = 18817, seq# = 23</code></p>
      <p><code>locknone: pid = 18817, seq# = 24</code></p>
      <p><code>locknone: pid = 18817, seq# = 25</code></p>
      <p><code>locknone: pid = 18817, seq# = 26</code></p>
      <p><code>locknone: pid = 18817, seq# = 27</code></p>
      <p><code>locknone: pid = 18817, seq# = 28</code></p>
      <p><code>locknone: pid = 18817, seq# = 29</code></p>
      <p><code>locknone: pid = 18817, seq# = 30</code></p>
      <p>Программа lockfcntl запускается первой, но в тот момент, когда она выполняет три действия для увеличения порядкового номера с 11 до 12 (в этот момент файл заблокирован), ядро переключается на второй процесс и запускает пpoгрaмму locknone. Этот процесс считывает значение 11 из файла с порядковым номером и использует его. Рекомендательная блокировка, установленная для этого файла пpoгрaммoй lockfcntl, никак не влияет на работу программы locknone.</p>
     </section>
    </section>
    <section>
     <title>
      <p>9.5. Обязательная блокировка</p>
     </title>
     <section>
      <p>Некоторые системы предоставляют возможность установки блокировки другого типа — обязательной (mandatory locking). В этом случае ядро проверяет все вызовы read и write, блокируя их при необходимости. Если для дескриптора установлен флаг O_NONBLOCK, вызов read или write, конфликтующий с установленной блокировкой, вернет ошибку EAGAIN. Если флаг O_NONBLOCK не установлен, выполнение процесса в такой ситуации будет отложено до тех пор, пока ресурс не освободится.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Стандарты Posix.1 и Unix 98 определяют только рекомендательную блокировку. Во многих реализациях, производных от System V, имеется возможность установки как рекомендательной, так и обязательной блокировки. Обязательная блокировка записей впервые появилась в System V Release 3.</p>
      </cite>
      <p>Для установки обязательной блокировки какого-либо файла требуется выполнение двух условий:</p>
      <p>&#9632; бит group-execute должен быть снят;</p>
      <p>&#9632; бит set-group–ID должен быть установлен.</p>
      <p>Обратите внимание, что установка бита set-user– ID без установки user-execute смысла не имеет; аналогично и с битами set-group-ID и group-execute. Таким образом, добавление возможности обязательной блокировки никак не повлияло на работу используемого программного обеспечения. Не потребовалось и добавлять новые системные вызовы.</p>
      <p>В системах, поддерживающих обязательную блокировку записей, команда ls просматривает файлы на наличие указанной специальной комбинации битов и выводит буквы l или L, указывающие на то, что для данного файла включена обязательная блокировка. Аналогично команда chmod принимает аргумент l, позволяющий включить для указанного файла обязательную блокировку.</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>На первый взгляд, использование обязательной блокировки должно решить проблему с несотрудничающими процессами, поскольку все операции чтения и записи будут приостановлены до снятия блокировки. К сожалению, проблемы с одновременными обращениями к ресурсу являются гораздо более сложными, чем кажется, что мы можем легко продемонстрировать.</p>
      <p>Чтобы использовать в нашем примере обязательную блокировку, изменим биты разрешений файла seqno. Кроме того, мы будем использовать новую версию функции main, которая принимает количество проходов цикла for в качестве аргумента командной строки (вместо использования константы 20) и не вызывает printf при каждом проходе цикла:</p>
      <p><code>solaris % <strong>cat &gt; seqno    </strong><emphasis>инициализируем файл единицей</emphasis></code></p>
      <p><code><strong>1</strong></code></p>
      <p><code><strong>^D                      </strong><emphasis>конец файла</emphasis></code></p>
      <p><code>solaris % <strong>ls –l seqno</strong></code></p>
      <p><code>-rw-r--r-- 1 rstevens other1 2 Oct 7 11:24 seqno</code></p>
      <p><code>solaris % <strong>chmod +l seqno </strong><emphasis>включение обязательной блокировки</emphasis></code></p>
      <p><code>solaris % <strong>ls -l seqno</strong></code></p>
      <p><code>-rq-r-lr-- 1 rstevens other1 2 Oct 7 11:24 seqno</code></p>
      <p>Теперь запустим две программы в качестве фоновых процессов: loopfcntl использует блокировку записей fcntl, а loopnone не использует блокировку вовсе. </p>
      <p>Укажем в командной строке аргумента 10000 — количество последовательных увеличений порядкового номера.</p>
      <p><code>solaris % <strong>loopfcntl 10000 &amp; loopnone 10000 &amp;</strong> <emphasis>запуск фоновых процессов</emphasis></code></p>
      <p><code>solaris % <strong>wait</strong>                                   <emphasis>ожидание их завершения</emphasis></code></p>
      <p><code>solaris % <strong>cat seqno</strong>                             <emphasis>вывод последовательного номера</emphasis></code></p>
      <p><code>14378                                            <emphasis>ошибка, должно быть 20001</emphasis></code></p>
      <image l:href="#Any2FbImgLoader152"/>
      <p>Рис. 9.1. Временная диаграмма работы программ loopfcntl и loopnone</p>
      <empty-line/>
      <p>Каждый раз при выполнении этих программ результат будет между 14000 и 16000. Если бы блокировка работала так как надо, он всегда был бы равен 20001. Чтобы понять, где же возникает ошибка, нарисуем временную диaгрaммy выполнения процессов, изображенную на рис. 9.1. </p>
      <p>Предположим, что loopfcntl запускается первой и выполняет первые восемь действий, изображенных на рисунке. Затем ядро передает управление другому процессу в тот момент, когда установлена блокировка на файл с порядковым номером. Запускается процесс loopnone, но он блокируется в первом вызове read, потому что на файл, который он пытается читать, установлена обязательная блокировка. Затем ядро передает управление первому процессу, который выполняет шаги 13-15. Пока все работает именно так, как мы предполагали, — ядро защищает файл от чтения несотрудничающим процессом, когда этот файл заблокирован.</p>
      <p>Дальше ядро передает управление программе loopnone, которая выполняет шаги 17-23. Вызовы read и write разрешены, поскольку файл был разблокирован на шаге 15. Проблема возникает в тот момент, когда программа считывает значение 5 на шаге 23, а ядро в этот момент передает управление другому процессу. Он устанавливает блокировку и также считывает значение 5. Затем он дважды увеличивает это значение (получается 7), и управление передается loopnone на шаге 36. Однако эта программа записывает в файл значение 6. Так и возникает ошибка.</p>
      <p>На этом примере мы видим, что обязательная блокировка предотвращает доступ к заблокированному файлу (шаг 11), но это не решает проблему. Проблема заключается в том, что левый процесс (на рисунке) может обновить содержимое файла (шаги 25-34) в тот момент, когда процесс справа также находится в состоянии обновления данных (шаги 23, 36 и 37). Если файл обновляется несколькими процессами, все они должны сотрудничать, используя некоторую форму блокировки. Один неподчиняющийся процесс может все разрушить.</p>
     </section>
    </section>
    <section>
     <title>
      <p>9.6. Приоритет чтения и записи</p>
     </title>
     <section>
      <p>В нашей реализации блокировок чтения-записи в разделе 8.4 приоритет предоставлялся ожидающим записи процессам. Теперь мы изучим детали возможного решения задачи читателей и писателей с помощью блокировки записей fcntl. Хочется узнать, как обрабатываются накапливающиеся запросы на блокировку, когда ресурс уже заблокирован. Стандарт Posix этого никак не оговаривает.</p>
     </section>
     <section>
      <title>
       <p>Пример: блокировка на чтение при наличии в очереди блокировки на запись</p>
      </title>
      <p>Первый вопрос, на который мы попытаемся найти ответ, звучит так: если ресурс заблокирован на чтение и какой-то процесс послал запрос на установление блокировки на запись, будет ли при этом разрешена установка еще одной блокировки на чтение? Некоторые решения задачи читателей и писателей не разрешают установки еще одной блокировки на чтение в случае, если есть ожидающий своей очереди пишущий процесс, поскольку если бы разрешалось непрерывное подключение считывающих процессов, запрос на запись, возможно, никогда бы не был удовлетворен.</p>
      <p>Чтобы проверить, как эта ситуация разрешится при использовании блокировки записей fcntl, напишем тестовую программу, устанавливающую блокировку на чтение для всего файла и затем порождающую два процесса с помощью fork. </p>
      <p>Первый из них пытается установить блокировку на запись (и блокируется, поскольку родительский процесс установил блокировку на чтение для всего файла), а второй процесс секунду спустя пытается получить блокировку на чтение. Временная диаграмма этих запросов изображена на рис. 9.2, а в листинге 9.6 приведен текст нашей программы. </p>
      <image l:href="#Any2FbImgLoader153"/>
      <p>Рис. 9.2. Определение возможности установки блокировки на чтение при наличии<strong>в</strong>очереди блокировки на запись</p>
      <empty-line/>
      <subtitle>Листинг 9.6. Определение возможности установки блокировки на чтение при наличии в очереди блокировки на запись</subtitle>
      <p><code>//lock/test2.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int fd;</code></p>
      <p><code>6   fd = Open("test1.data", O_RDWR | O_CREAT, FILE_MODE);</code></p>
      <p><code>7   Read_lock(fd, 0, SEEK_SET, 0); /* родительский процесс блокирует весь файл на чтение */</code></p>
      <p><code>8   printf("%s: parent has read lock\n", Gf_time());</code></p>
      <p><code>9   if (Fork() == 0) {</code></p>
      <p><code>10   /* первый дочерний процесс */</code></p>
      <p><code>11   sleep(1);</code></p>
      <p><code>12   printf("%s: first child tries to obtain write lock\n", Gf_time());</code></p>
      <p><code>13   Writew_lock(fd, 0, SEEK_SET, 0); /* здесь он будет заблокирован */</code></p>
      <p><code>14   printf("%s: first child obtains write lock\n", Gf_time());</code></p>
      <p><code>15   sleep(2);</code></p>
      <p><code>16   Un_lock(fd, 0, SEEK_SET, 0);</code></p>
      <p><code>17   printf("ls: first child releases write lock\n", Gf_time());</code></p>
      <p><code>18   exit(0);</code></p>
      <p><code>19  }</code></p>
      <p><code>20  if (Fork() == 0) {</code></p>
      <p><code>21   /* второй дочерний процесс */</code></p>
      <p><code>22   sleep(3);</code></p>
      <p><code>23   printf("%s: second child tries to obtain read lock\n", Gf_time());</code></p>
      <p><code>24   Readw_lock(fd, 0, SEEK_SET, 0);</code></p>
      <p><code>25   printf("%s: second child obtains read lock\n", Gf_time());</code></p>
      <p><code>26   sleep(4);</code></p>
      <p><code>27   Un_lock(fd, 0, SEEK_SET, 0);</code></p>
      <p><code>28   printf("%s: second child releases read lock\n", Gf_time());</code></p>
      <p><code>29   exit(0);</code></p>
      <p><code>30  }</code></p>
      <p><code>31  /* родительский процесс */</code></p>
      <p><code>32  sleep(5);</code></p>
      <p><code>33  Un_lock(fd, 0, SEEK_SET, 0);</code></p>
      <p><code>34  printf("%s: parent releases read lock\n", Gf_time());</code></p>
      <p><code>35  exit(0);</code></p>
      <p><code>36 }</code></p>
      <subtitle>Родительский процесс открывает файл и получает блокировку на чтение</subtitle>
      <p>6-8 Родительский процесс открывает файл и устанавливает блокировку на чтение для всего файла целиком. Обратите внимание, что мы вызываем read_lock (которая возвращает ошибку в случае недоступности ресурса), а не readw_lock (которая ждет его освобождения), потому что мы ожидаем, что эта блокировка будет установлена немедленно. Мы также выводим значение текущего времени функцией gf_time [24, с. 404], когда получаем блокировку.</p>
      <subtitle>Первый дочерний процесс</subtitle>
      <p>9-19 Порождается первый процесс, который ждет 1 секунду и блокируется в ожидании получения блокировки на запись для всего файла. Затем он устанавливает эту блокировку, ждет 2 секунды, снимает ее и завершает работу.</p>
      <subtitle>Второй дочерний процесс</subtitle>
      <p>20-30 Порождается второй процесс, который ждет 3 секунды, давая возможность первому попытаться установить блокировку на запись, а затем пытается получить блокировку на чтение для всего файла. По моменту возвращения из функции readw_lock мы можем узнать, был ли ресурс предоставлен немедленно или второму процессу пришлось ждать первого. Блокировка снимается через четыре секунды.</p>
      <subtitle>Родительский процесс блокирует ресурс 5 секунд</subtitle>
      <p>31-35 Родительский процесс ждет пять секунд, снимает блокировку и завершает работу.</p>
      <p>На рис. 9.2 приведена временная диаграмма выполнения программы в Solaris 2.6, Digital Unix 4.0B и BSD/OS 3.1. Как видно, блокировка чтения предоставляется второму дочернему процессу немедленно, несмотря на наличие в очереди запроса на блокировку записи. Существует вероятность, что запрос на запись так и не будет выполнен, если будут постоянно поступать новые запросы на чтение. Ниже приведен результат выполнения программы, в который были добавлены пустые строки для улучшения читаемости:</p>
      <p><code>alpha % <strong>test2</strong></code></p>
      <p><code>16:32:29.674453: parent has read lock</code></p>
      <empty-line/>
      <p><code>16:32:30.709197: first child tries to obtain write lock</code></p>
      <empty-line/>
      <p><code>16:32:32.725810: second child tries to obtain read lock</code></p>
      <p><code>16:32:32.728739: second child obtains read lock</code></p>
      <empty-line/>
      <p><code>16:32:34.722282: parent releases read lock</code></p>
      <empty-line/>
      <p><code>16:32:36.729738: second child releases read lock</code></p>
      <p><code>16:32:36.735597: first child obtains write lock</code></p>
      <empty-line/>
      <p><code>16:32:38.736938: first child releases write lock</code></p>
     </section>
     <section>
      <title>
       <p>Пример: имеют ли приоритет запросы на запись перед запросами на чтение?</p>
      </title>
      <p>Следующий вопрос, на который мы попытаемся дать ответ, таков: есть ли приоритет у запросов на блокировку записи перед запросами на блокировку чтения, если все они находятся в очереди? Некоторые решения задачи читателей и писателей предусматривают это.</p>
      <p>В листинге 9.7 приведен текст нашей тестовой программы, а на рис. 9.3 — временная диаграмма ее выполнения.</p>
      <subtitle>Листинг 9.7. Есть ли у писателей приоритет перед читателями</subtitle>
      <p><code>//lock/test3.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int fd;</code></p>
      <p><code>6   fd = Open("test1.data", O_RDWR | O_CREAT, FILE_MODE);</code></p>
      <p><code>7   Write_lock(fd, 0, SEEK_SET, 0); /* родительский процесс блокирует весь файл на запись */</code></p>
      <p><code>8   printf("ls: parent has write lock\n", Gf_time());</code></p>
      <p><code>9   if (Fork() == 0) {</code></p>
      <p><code>10   /* первый дочерний процесс */</code></p>
      <p><code>11   sleep(1);</code></p>
      <p><code>12   printf("ls: first child tries to obtain write lock\n", Gf_time());</code></p>
      <p><code>13   Writew_lock(fd, 0, SEEK_SET, 0); /* здесь процесс будет заблокирован */</code></p>
      <p><code>14   printf("%s: first child obtains write lock\n", Gf_time());</code></p>
      <p><code>15   sleep(2);</code></p>
      <p><code>16   Un_lock(fd, 0, SEEK_LET, 0);</code></p>
      <p><code>17   printf("ls: first child releases write lock\n", Gf_time());</code></p>
      <p><code>18   exit(0);</code></p>
      <p><code>19  }</code></p>
      <p><code>20  if (Fork() == 0) {</code></p>
      <p><code>21   /* второй дочерний процесс */</code></p>
      <p><code>22   sleep(3);</code></p>
      <p><code>23   printf("ls: second child tries to obtain read lock\n", Gf_time());</code></p>
      <p><code>24   Readw_lock(fd, 0, SEEK_SET, 0);</code></p>
      <p><code>25   printf(%s: second child obtains read lock\n", Gf_time());</code></p>
      <p><code>26   sleep(4);</code></p>
      <p><code>27   Un_lock(fd, 0, SEEK_SET, 0);</code></p>
      <p><code>28   printf("ls: second child releases read lock\n", Gf_time());</code></p>
      <p><code>29   exit(0);</code></p>
      <p><code>30  }</code></p>
      <p><code>31  /* родительский процесс */</code></p>
      <p><code>32  sleep(5);</code></p>
      <p><code>33  Un_lock(fd, 0, SEEK_SET, 0);</code></p>
      <p><code>34  printf("ls: parent releases write lock\n", Gf_time());</code></p>
      <p><code>35  exit(0);</code></p>
      <p><code>36 }</code></p>
      <subtitle>Родительский процесс создает файл и устанавливает блокировку на запись</subtitle>
      <p>6-8 Родительский процесс создает файл и блокирует его целиком на запись.</p>
      <subtitle>Первый дочерний процесс</subtitle>
      <p>9-19 Порождается первый процесс, который ждет одну секунду, а затем запрашивает блокировку на запись для всего файла. Мы знаем, что при этом процесс будет заблокирован, поскольку родительский процесс установил блокировку и снимет ее только через пять секунд, и мы хотим, чтобы этот запрос был помещен в очередь.</p>
      <subtitle>Второй дочерний процесс</subtitle>
      <p>20-30 Порождается второй процесс, который ждет три секунды, а затем запрашивает блокировку на чтение на весь файл. Этот запрос будет также помещен в очередь.</p>
      <p>И в Solaris 2.6, и в Digital Unix 4.0B мы видим, что блокировка на запись предоставляется первому процессу, как изображено на рис. 9.3. Но это еще не означает, что у запросов на запись есть приоритет перед запросами на чтение, поскольку, возможно, ядро предоставляет блокировку в порядке очереди вне зависимости от того, на чтение она или на запись. Чтобы проверить это, мы создаем еще одну тестовую программу, практически идентичную приведенной в листинге 9.7, но в ней блокировка на чтение запрашивается через одну секунду, а блокировка на запись — через три секунды. Эти две программы иллюстрируют, что Solaris и Digital Unix обрабатывают запросы в порядке очереди вне зависимости от типа запроса. Однако в BSD/OS 3.1 приоритет имеют запросы на чтение. </p>
      <image l:href="#Any2FbImgLoader154"/>
      <p>Рис. 9.3. Есть ли у писателей приоритет перед читателями</p>
      <empty-line/>
      <p>Вот вывод программы из листинга 9.7, на основании которого была составлена временная диaгрaммa на рис. 9.3:</p>
      <p><code>alpha % <strong>test3</strong></code></p>
      <p><code>16:34:02.810285: parent has write lock</code></p>
      <p><code>16:34:03.848166: first child tries to obtain write lock</code></p>
      <p><code>16:34:05.861082: second child tries to obtain read lock</code></p>
      <p><code>16:34:07.858393: parent releases write lock</code></p>
      <p><code>16:34:07.865222: first child obtains write lock</code></p>
      <p><code>16:34:09.865987: first child releases write lock</code></p>
      <p><code>16:34:09.872823: second child obtains read lock</code></p>
      <p><code>16:34:13.873822: second child releases read lock</code></p>
     </section>
    </section>
    <section>
     <title>
      <p>9.7. Запуск единственного экземпляра демона</p>
     </title>
     <p>Часто блокировки записей используются для обеспечения работы какой-либо пpoгрaммы (например, демона) в единственном экземпляре. Фрагмент кода, приведенный в листинге 9.8, должен выполняться при запуске демона.</p>
     <subtitle>Листинг 9.8. Гарантия выполнения единственного экземпляра программы</subtitle>
     <p><code>//lock/onedaemon.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define PATH_PIDFILE "pidfile"</code></p>
     <empty-line/>
     <p><code>3  int</code></p>
     <p><code>4  main(int argc, char **argv)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   int pidfd;</code></p>
     <p><code>7   char line[MAXLINE];</code></p>
     <p><code>8   /* открытие или создание файла с идентификатором процесса */</code></p>
     <p><code>9   pidfd = Open(PATH_PIDFILE, O_RDWR | O_CREAT, FILE_MODE);</code></p>
     <p><code>10  /* попытка блокирования всего файла на запись */</code></p>
     <p><code>11  if (write_lock(pidfd, 0, SEEK_SET, 0) &lt; 0) {</code></p>
     <p><code>12   if (errno == EACCES || errno == EAGAIN)</code></p>
     <p><code>13    err_quit("unable to lock %s, is %s already running?",</code></p>
     <p><code>14     PATH_PIDFILE, argv[0]);</code></p>
     <p><code>15   else</code></p>
     <p><code>16    err_sys("unable to lock %s", PATH_PIDFILE):</code></p>
     <p><code>17  }</code></p>
     <p><code>18  /* запись идентификатора: файл остается открытым, чтобы он был заблокирован */</code></p>
     <p><code>19  snprintf(line, sizeof(line), "%ld\n", (long) getpid());</code></p>
     <p><code>20  Ftruncate(pidfd, 0);</code></p>
     <p><code>21  Write(pidfd, line, strlen(line));</code></p>
     <p><code>22  /* основной текст программы демона… */</code></p>
     <p><code>23  pause();</code></p>
     <p><code>24 }</code></p>
     <subtitle>Открытие и блокирование файла</subtitle>
     <p>8-17 Демон создает однострочный файл, в который записывает свой идентификатор процесса. Этот файл открывается или создается, а затем делается попытка Заблокировать его на запись целиком. Если блокировку установить не удается, мы понимаем, что один экземпляр демона уже запущен, поэтому выводится сообщение об ошибке и программа завершает работу.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Во многих версиях Unix демоны записывают свои идентификаторы в файл. Solaris 2.6 хранит подобные файлы в каталоге /etc, a Digital Unix 4.0B и BSD/OS — в каталоге /var/run.</p>
     </cite>
     <subtitle>Запись идентификатора процесса в файл</subtitle>
     <p>18-21 Мы укорачиваем файл до 0 байт, а затем записываем в него строку с нашим идентификатором. Причина, по которой нужно укорачивать файл, заключается в том, что у предыдущего экземпляра демона идентификатор мог быть представлен более длинным числом, чем у данного, поэтому в результате в файле может образоваться смесь двух идентификаторов.</p>
     <p>Вот результат работы программы из листинга 9.8:</p>
     <p><code>solaris % <strong>onedaemon&amp;</strong>   <emphasis>запускаем первый экземпляр</emphasis></code></p>
     <p><code>[1] 22388</code></p>
     <p><code>solaris % <strong>cat pidfile </strong><emphasis>проверяем идентификатор</emphasis></code></p>
     <p><code>22388</code></p>
     <p><code>solaris % <strong>onedaemon   </strong><emphasis>пытаемся запустить второй экземпляр</emphasis></code></p>
     <p><code>unable to lock pidfile, is onedaemon already running?</code></p>
     <p>Существуют и другие способы предотвращения запуска нескольких экземпляров демонов, например семафоры. Преимущество данного метода в том, что многим демонам и так приходится записывать в файл свои идентификаторы, а при досрочном завершении работы демона блокировка с файла снимается автоматически.</p>
    </section>
    <section>
     <title>
      <p>9.8. Блокирование файлов</p>
     </title>
     <p>Стандарт Posix.1 гарантирует, что если функция open вызывается с флагами O_CREAT (создать файл, если он еще не существует) и O_EXCL (исключающее открытие), функция возвращает ошибку, если файл уже существует. Более того, проверка существования файла и его создание (если он еще не существует) должны представлять собой атомарную по отношению к другим процессам операцию. Следовательно, мы можем использовать создаваемый таким методом файл как блокировку. Можно быть уверенным, что только один процесс сможет создать файл (то есть получить блокировку), а для снятия этой блокировки файл можно удалить командой unlink.</p>
     <p>В листинге 9.9 приведен текст наших функций установки и снятия блокировки, использующих этот метод. При успешном выполнении функции open мы считаем, что блокировка установлена, и успешно возвращаемся из функции my_lock. Файл мы закрываем, потому что его дескриптор нам не нужен. О наличии блокировки свидетельствует само существование файла вне зависимости от того, открыт он или нет. Если функция open возвращает ошибку EEXIST, значит, файл существует и мы должны еще раз попытаться открыть его. </p>
     <p>У этого метода есть три недостатка.</p>
     <p>1. Если процесс, установивший блокировку, завершится досрочно, не сняв ее, файл не будет удален. Существуют способы борьбы с этой проблемой, например проверка времени доступа к файлу и удаление его спустя некоторый определенный промежуток времени, — но все они несовершенны. Другое решение заключается в записи в файл идентификатора процесса, чтобы другие процессы могли считать его и проверить, существует ли еще такой процесс. Этот метод также несовершенен, поскольку идентификатор может быть использован повторно.</p>
     <p>В такой ситуации лучше пользоваться блокировкой fcntl, которая автоматически снимается по завершении процесса.</p>
     <p>2. Если файл открыт каким-либо другим процессом, мы должны еще раз вызвать open, повторяя эти вызовы в бесконечном цикле. Это называется опросом и является напрасной тратой времени процессора. Альтернативным методом является вызов sleep на 1 секунду, а затем повторный вызов open (этапроблема обсуждалась в связи с листингом 7.4).</p>
     <p>Эта проблема также исчезает при использовании блокировки fcntl, если использовать команду F_SETLKW. Ядро автоматически приостанавливает выполнение процесса до тех пор, пока ресурс не станет доступен.</p>
     <p>3. Создание и удаление файла вызовом open и unlink приводит к обращению к файловой системе, что обычно занимает существенно больше времени, чем вызов fcntl (обращение производится дважды: один раз для получения блокировки, а второй — для снятия). При использовании fcntl программа выполнила 10000 повторов цикла с увеличением порядкового номера в 75 раз быстрее, чем программа, вызывавшая open и unlink.</p>
     <subtitle>Листинг 9.9. Функции блокировки с использованием open с флагами O_CREAT и O_EXCL</subtitle>
     <p><code>//lock/lockopen.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define LOCKFILE "/tmp/seqno.lock"</code></p>
     <empty-line/>
     <p><code>3  void</code></p>
     <p><code>4  my_lock(int fd)</code></p>
     <p><code>5  {</code></p>
     <empty-line/>
     <p><code>6   int tempfd;</code></p>
     <p><code>7   while ((tempfd = open(LOCKFILE, O_RDWR|O_CREAT|O_EXCL, FILE_MODE)) &lt; 0) {</code></p>
     <p><code>8    if (errno != EEXIST)</code></p>
     <p><code>9     err_sys("open error for lock file");</code></p>
     <p><code>10   /* блокировка установлена кем-то другим, повторяем попытку */</code></p>
     <p><code>11  }</code></p>
     <p><code>12  Close(tempfd); /* открыли файл, блокировка установлена */</code></p>
     <p><code>13 }</code></p>
     <empty-line/>
     <p><code>14 void</code></p>
     <p><code>15 my_unlock(int fd)</code></p>
     <p><code>16 {</code></p>
     <p><code>17  Unlink(LOCKFILE); /* снимаем блокировку удалением файла */</code></p>
     <p><code>18 }</code></p>
     <p>Есть еще две особенности файловой системы Unix, которые использовались для реализации блокировок. Первая заключается в том, что функция link возвращает ошибку, если имя новой ссылки уже существует. Для получения блокировки создается уникальный временный файл, полное имя которого содержит в себе его идентификатор процесса (или комбинацию идентификаторов процесса и потока, если требуется осуществлять блокировку между отдельными потоками). Затем вызывается функция link для создания ссылки на этот файл с каким-либо определенным заранее именем. После успешного создания сам файл может быть удален вызовом unlink. После осуществления работы с блокировкой файл с известным именем удаляется командой unlink. Если link возвращает ошибку EEXIST, поток должен попытаться создать ссылку еще раз (аналогично листингу 9.9). Одно из требований к этому методу — необходимо, чтобы и временный файл, и ссылка находились в одной файловой системе, поскольку большинство версий Unix не допускают создания жестких ссылок (результат вызова link) в разных файловых системах.</p>
     <p>Вторая особенность заключается в том, что функция open возвращает ошибку в случае существования файла, если указан флаг O_TRUNC и запрещен доступ на запись. Для получения блокировки мы вызываем open, указывая флаги O_CREAT | O_WRONLY | O_TRUNC и аргумент <emphasis>mode</emphasis> со значением 0 (то есть разрешения на доступ к файлу установлены в 0). Если вызов оказывается успешным, блокировка установлена и мы просто удаляем файл вызовом unlink после завершения работы. Если вызов open возвращает ошибку EACESS, поток должен сделать еще одну попытку (аналогично листингу 9.9). Этот трюк не срабатывает, если поток обладает правами привилегированного пользователя.</p>
     <p>Урок, который можно извлечь из этих примеров, прост: нужно пользоваться блокировкой fcntl. Тем не менее вы можете столкнуться с программой, в которой используются старые методы блокировки, и особенно часто это будет встречаться в программах, написанных до широкого распространения реализации с блокировкой fcntl.</p>
    </section>
    <section>
     <title>
      <p>9.9. Блокирование в NFS</p>
     </title>
     <p>Аббревиатура NFS расшифровывается как Network File System (сетевая файловая система); эта система подробно обсуждается в главе 29 [22]. Блокировка записей fcntl представляет собой расширение NFS, поддерживаемое большинством ее реализаций. Обслуживается эта блокировка двумя дополнительными демонами: lockd и statd. При вызове fcntl для получения блокировки ядро обнаруживает, что файл находится в файловой системе NFS. Тогда локальный демон lockd посылает демону lockd сервера запрос на получение блокировки. Демон statd хранит информацию о клиентах, установивших блокировку, и взаимодействует с lockd для обеспечения снятия блокировок в случае завершения процессов.</p>
     <p>Установка блокировки записи в NFS должна занимать в среднем больше времени, чем для локального файла, поскольку для установки и снятия блокировки требуется передача информации по сети. Для проверки работы блокировки NFS нужно всего лишь изменить имя файла, определяемое константой SEQFILE в листинге 9.2. Если измерить время, требуемое для выполнения 10000 операций по увеличению порядкового номера новой версией программы, оно окажется примерно в 80 раз больше, чем для локального файла. Однако нужно понимать, что в этом случае происходит передача информации по сети и при операциях чтения и записи (для изменения порядкового номера).</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Блокировка записей в NFS была связана с проблемами в течение многих лет, и большинство проблем были следствием плохой реализации. Несмотря на тот факт, что большинство производителей Unix все-таки доделали эту реализацию, использование блокировки fcntl через NFS все еще далеко от совершенства. Не будем делать безответственных утверждений: блокировка fcntl должна работать и в NFS, но будет ли — зависит от реализации демона и сервера. </p>
     </cite>
    </section>
    <section>
     <title>
      <p>9.10. Резюме</p>
     </title>
     <p>Блокирование записей с помощью fcntl предоставляет возможность установки рекомендательной или обязательной блокировки для файла, указываемого с помощью открытого дескриптора. Эти блокировки предназначены для сотрудничества процессов, но не отдельных потоков одного процесса. Термин «запись» используется не вполне корректно, поскольку ядро не различает отдельные записи в файле. Лучше использовать термин «блокировка диапазона», поскольку при установке блокировки или ее снятии указывается именно диапазон байтов в файле. Практически во всех случаях применения этой блокировки она является рекомендательной и используется при совместной работе сотрудничающих процессов, поскольку даже обязательная блокировка не может исключить повреждения данных.</p>
     <p>При использовании fcntl не гарантируется, что читающие или пишущие процессы имеют приоритет при ожидании (в отличие от того, что мы реализовали в главе 8 с блокировками чтения-записи). Если это важно для приложения, придется реализовать блокировки самостоятельно (как в разделе 8.4) с тем приоритетом, который требуется.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Создайте программу locknone из листингов 9.2 и 9.1 и выполните ее много раз. Убедитесь, что программа не работает и результат непредсказуем.</p>
     <p>2. Измените листинг 9.2 так, чтобы стандартный поток вывода не буферизовался. Как это повлияет на работу программы?</p>
     <p>3. Продолжайте изменять программу, вызывая putchar для каждого выводимого символа (вместо printf). Как изменится результат?</p>
     <p>4. Измените блокировку в функции my_lock из листинга 9.3 так, чтобы устанавливалась блокировка на чтение, а не на запись. Что произойдет?</p>
     <p>5. Измените вызов open в программе loopmain.c, указав также флаг O_NONBLOCK. Создайте программу loopfcntlnonb и запустите два экземпляра. Что произойдет? </p>
     <p>6. Продолжите предыдущий пример, используя неблокируемую версию loopmain.с для создания программы loopnonenonb (используя файл locknone.c). Включите обязательную блокировку для файла seqno. Запустите один экземпляр этой программы и один экземпляр программы loopfcntlnonb из предыдущего примера одновременно. Что произойдет?</p>
     <p>7. Создайте программу loopfcntl и запустите ее 10 раз в фоновом режиме из сценария интерпретатора команд. Каждому из 10 экземпляров следует указать аргумент 10000. Измерьте скорость работы сценария при использовании обязательной и рекомендательной блокировок. Как влияет обязательная блокировка на производительность?</p>
     <p>8. Почему мы вызывали fork в листингах 9.6 и 9.7 для порождения процессов, вместо того чтобы воспользоваться pthread_create для создания потоков?</p>
     <p>9. В листинге 9.9 мы вызываем ftruncate для установки размера файла в 0 байт. Почему бы нам просто не указать флаг O_TRUNC при открытии файла?</p>
     <p>10. Какой из констант — SEEK_SET, SEEK_CUR или SEEK_END — следует пользоваться при указании блокируемого диапазона при написании многопоточного приложения и почему? </p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 10</p>
     <p>Семафоры Posix</p>
    </title>
    <section>
     <title>
      <p>10.1.Введение</p>
     </title>
     <p>Семафор представляет собой простейшее средство синхронизации процессов и потоков. Мы рассматриваем три типа семафоров:</p>
     <p>&#9632; именованные семафоры Posix, идентифицируемые именами, соответствующими стандарту Posix для IPC (см. раздел 2.2);</p>
     <p>&#9632; размещаемые в разделяемой памяти семафоры Posix;</p>
     <p>&#9632; семафоры System V (глава 11), обслуживаемые ядром.</p>
     <p>Все три типа семафоров могут использоваться для синхронизации как отдельных процессов, так и потоков одного процесса. Мы начнем с рассмотрения проблем синхронизации между разными процессами с помощью бинарного семафора, то есть такого, который может принимать только значения 0 и 1. Пример подобной схемы приведен на рис. 10.1.</p>
     <image l:href="#Any2FbImgLoader157"/>
     <p>Рис. 10.1. Два процесса взаимодействуют с помощью бинарного семафора</p>
     <empty-line/>
     <p>На этом рисунке изображен бинарный семафор, хранящийся в ядре (семафор System V).</p>
     <p>Семафоры Posix не обязательно должны обрабатываться ядром. Их особенностью является наличие имен, которые могут соответствовать именам реальных файлов в файловой системе. На рис. 10.2 изображена схема, лучше иллюстрирующая предмет обсуждения данной главы — именованный семафор Posix.</p>
     <image l:href="#Any2FbImgLoader159"/>
     <p>Рис. 10.2. Два процесса, использующие бинарный именованный семафор Posix</p>
     <empty-line/>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В отношении рис. 10.2 необходимо сделать одно уточнение: хотя именованные семафоры Posix обладают именами в файловой системе, они не обязательно должны храниться в файлах. Во встроенной системе реального времени значение семафора, скорее всего, будет размещаться в ядре, а имя файла будет использоваться исключительно для идентификации семафора. При реализации с помощью отображения файлов в память (пример такой реализации приведен в разделе 10.15) значение семафора будет действительно храниться в файле, который будет отображаться в адресное пространство всех процессов, использующих семафор. </p>
     </cite>
     <p>На рис. 10.1 и 10.2 мы указали три операции, которые могут быть применены к семафорам:</p>
     <p>1. Создание семафора. При этом вызвавший процесс должен указать начальное значение (часто 1, но может быть и 0).</p>
     <p>2. Ожидание изменения значения семафора <emphasis>(wait).</emphasis> При этом производится проверка его значения и процесс блокируется, если значение оказывается меньшим либо равным 0, а при превышении 0 значение уменьшается на 1. Это может быть записано на псевдокоде как </p>
     <p><code>while (semaphore_value &lt;= 0); /* wait: т.е. поток или процесс блокируется */</code></p>
     <p><code>semaphore_value--; /* семафор разрешает выполнение операций */</code></p>
     <p>Основным требованием является атомарность выполнения операций проверки значения в цикле while и последующего уменьшения значения семафора (то есть как одной операции) по отношению к другим потокам (это одна из причин, по которой семафоры System V были реализованы в середине 80-х как часть ядра. Поскольку операции с ними выполнялись с помощью системных вызовов, легко было гарантировать их атомарность по отношению к другим процессам).</p>
     <p>У этой операции есть несколько общеупотребительных имен. Изначально она называлась Р, от голландского proben (проверка, попытка), — это название было введено Эдсгером Дейкстрой. Используются также и термины down (поскольку значение семафора уменьшается) и lock, но мы будем следовать стандарту Posix и говорить об ожидании <emphasis>(wait).</emphasis> </p>
     <p>3. Установка значения семафора <emphasis>(post). </emphasis>Значение семафора увеличивается одной командой, которая может быть записана на псевдокоде как</p>
     <p><code>semaphore_value++;</code></p>
     <p>Если в системе имеются процессы, ожидающие изменения значения семафора до величины, превосходящей 0, один из них может быть пробужден. Как и операция ожидания, операция установки значения семафора также должна быть атомарной по отношению к другим процессам, работающим с этим семафором.</p>
     <p>Для этой операции также имеется несколько общеупотребительных терминов. Изначально она называлась V, от голландского verhogen (увеличивать). Называют ее up (значение семафора увеличивается), unlock и signal. Мы, следуя стандарту Posix, называем эту операцию <emphasis>post.</emphasis></p>
     <p>Очевидно, что реальный код для работы с семафором будет более сложным, чем приведенный выше. Все процессы, ожидающие изменения какого-либо семафора, должны помещаться в очередь, и один из них должен запускаться при выполнении требуемого условия. К счастью, это обеспечивается реализацией.</p>
     <p>Обратите внимание, что приведенный псевдокод не ограничен в применении только бинарными семафорами. Код работает с семафором, инициализируемым любым неотрицательным значением. Такие семафоры называют также семафорами-счетчиками. Обычно они инициализируются некоторым значением N, которое указывает количество доступных ресурсов (например, буферов). В этой главе есть примеры использования как бинарных семафоров, так и семафоров-счетчиков.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Мы часто проводим различие между бинарными и многозначными семафорами, но делаем это исключительно в образовательных целях. В системной реализации семафоров никакой разницы нет.</p>
     </cite>
     <p>Бинарный семафор может использоваться в качестве средства исключения (подобно взаимному исключению). В листинге 10.1 приведен пример для сравнения этих средств.</p>
     <subtitle>Листинг 10.1. Сравнение бинарных семафоров и взаимных исключений</subtitle>
     <p><code>инициализация взаимного исключения;  инициализация семафора единицей;</code></p>
     <p><code>pthread_mutex_lock(&amp;mutex);          sem_wait(&amp;sem);</code></p>
     <p><code>критическая область                  критическая область</code></p>
     <p><code>pthread_mutex_unlock(&amp;mutex);        sem_post(&amp;sem);</code></p>
     <p>Мы инициализируем семафор значением 1. Вызвав sem_wait, мы ожидаем, когда значение семафора окажется больше 0, а затем уменьшаем его на 1. Вызов sem_post увеличивает значение с 0 до 1 и возобновляет выполнение всех потоков, заблокированных в вызове sem_wait для данного семафора.</p>
     <p>Хотя семафоры и могут использоваться в качестве взаимных исключений, они обладают некоторыми особенностями: взаимное исключение должно быть разблокировано именно тем потоком, который его заблокировал, в то время как увеличение значения семафора может быть выполнено другим потоком. Можно привести пример использования этой особенности для решения упрощенной версии задачи потребителей и производителей из главы 7 с двумя бинарными семафорами. На рис. 10.3 приведена схема с одним производителем, помещающим объект в общий буфер, и одним потребителем, изымающим его оттуда. Для простоты предположим, что в буфер помещается ровно один объект. </p>
     <image l:href="#Any2FbImgLoader161"/>
     <p>Рис. 10.3. Задача производителя и потребителя с общим буфером</p>
     <empty-line/>
     <p>В листинге 10.2 приведен текст соответствующей программы на псевдокоде.</p>
     <subtitle>Листинг 10.2. Псевдокод для задачи производителя и потребителя</subtitle>
     <p><code>Producer                                Consumer</code></p>
     <p><code>инициализация семафора get значением 0;</code></p>
     <p><code>инициализация семафора put значением 1;</code></p>
     <p><code>for (;;) {                              for (;;) {</code></p>
     <p><code> sem_wait(&amp;put);                         sem_wait(&amp;get);</code></p>
     <p><code> помещение данных в буфер;               обработка данных в буфере;</code></p>
     <p><code> sem_post(&amp;get);                         sem_post(&amp;put);</code></p>
     <p><code>}                                       }</code></p>
     <p>Семафор put oгрaничивaeт возможность помещения объекта в общий буфер, а семафор get управляет потребителем при считывании объекта из буфера. Работает эта пpoгрaммa в такой последовательности:</p>
     <p>1. Производитель инициализирует буфер и два семафора.</p>
     <p>2. Пусть после этого запускается потребитель. Он блокируется при вызове sem_wait, поскольку семафор get имеет значение 0.</p>
     <p>3. После этого запускается производитель. При вызове sem_wait значение put уменьшается с 1 до 0, после чего производитель помещает объект в буфер. Вызовом sem_post значение семафора get увеличивается с 0 до 1. Поскольку имеется поток, заблокированный в ожидании изменения значения этого семафора, этот поток помечается как готовый к выполнению. Предположим, тем не менее, что производитель продолжает выполняться. В этом случае он блокируется при вызове sem_wait в начале цикла for, поскольку значение семафора put — 0. Производитель должен подождать, пока потребитель не извлечет данные из буфера.</p>
     <p>4. Потребитель возвращается из sem_wait, уменьшая значение семафора get с 0 до 1. Затем он обрабатывает данные в буфере и вызывает sem_post, увеличивая значение put с 0 до 1. Заблокированный в ожидании изменения значения этого семафора поток-производитель помечается как готовый к выполнению. Предположим опять, что выполнение потребителя продолжается. Тогда он блокируется при вызове sem_wait в начале цикла for, поскольку семафор get имеет значение 0.</p>
     <p>5. Производитель возвращается из sem_wait, помещает данные в буфер, и все повторяется.</p>
     <p>Мы предполагали, что каждый раз при вызове sem_post продолжалось выполнение вызвавшего эту функцию потока, несмотря на то что ожидающий изменения значения семафора поток помечался как готовый к выполнению. Никаких изменений в работе программы не произойдет, если вместо вызвавшего sem_post потока будет выполняться другой, ожидавший изменения состояния семафора (исследуйте такую ситуацию и убедитесь в этом самостоятельно).</p>
     <p>Перечислим три главных отличия семафоров и взаимных исключений в паре с условными переменными:</p>
     <p>1. Взаимное исключение всегда должно разблокироваться тем потоком, который установил блокировку, тогда как увеличение значения семафора не обязательно осуществляется ожидающим его изменения потоком. Это мы только что продемонстрировали на примере.</p>
     <p>2. Взаимное исключение может быть либо заблокировано, либо разблокировано (пара состояний, аналогично бинарному семафору).</p>
     <p>3. Поскольку состояние семафора хранится в определенной переменной, изменение его значения оказывает влияние на процессы, которые вызовут функцию wait уже после этого изменения, тогда как при отправке сигнала по условной переменной в отсутствие ожидающих его потоков сигнал будет утерян. Взгляните на листинг 10.2 и представьте, что при первом проходе цикла производителем потребитель еще не вызвал sem_wait. Производитель сможет поместить объект в буфер, вызвать sem_post для семафора get (увеличивая его значение с 0 до 1), а затем он заблокируется в вызове sem_wait для семафора put. Через некоторое время потребитель дойдет до цикла for и вызовет sem_wait для переменной get, что уменьшит значение этого семафора с 1 до 0, а затем потребитель приступит к обработке содержимого буфера.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В Обосновании Posix.1 (Rationale) содержится следующий комментарий по поводу добавления семафоров помимо взаимных исключений и условных переменных: «Семафоры включены в стандарт в первую очередь с целью предоставить средства синхронизации выполнения процессов; эти процессы могут и не использовать общий сегмент памяти. Взаимные исключения и условные переменные описаны как средства синхронизации потоков, у которых всегда есть некоторое количество общей памяти. Оба метода широко используются уже много лет. Каждое из этих простейших средств имеет свой предпочтительный круг задач». В разделе 10.15 мы увидим, что для реализации семафоров-счетчиков с живучестью ядра требуется написать около 300 строк кода на С, использующего взаимные исключения и условные переменные. Несмотря на предпочтительность применения семафоров для синхронизации между процессами и взаимных исключений для синхронизации между потоками, и те и другие могут использоваться в обоих случаях. Следует пользоваться тем набором средств, который удобен в данном приложении.</p>
     </cite>
     <p>Выше мы отмечали, что стандартом Posix описано два типа семафоров: именованные (named) и размещаемые в памяти (memory-based или unnamed). На рис. 10.4 сравниваются функции, используемые обоими типами семафоров.</p>
     <p>Именованный семафор Posix был изображен на рис. 10.2. Неименованный, или размещаемый в памяти, семафор, используемый для синхронизации потоков одного процесса, изображен на рис. 10.5.</p>
     <image l:href="#Any2FbImgLoader163"/>
     <p>Рис. 10.4. Вызовы для семафоров Posix</p>
     <empty-line/>
     <image l:href="#Any2FbImgLoader164"/>
     <p>Рис. 10.5. Семафор, размещенный в общей памяти двух потоков</p>
     <empty-line/>
     <p>На рис. 10.6 изображен размещенный в разделяемой памяти семафор (часть 4), используемый двумя процессами. Общий сегмент памяти принадлежит адресному пространству обоих процессов.</p>
     <image l:href="#Any2FbImgLoader165"/>
     <p>Рис. 10.6. Семафор, размещенный в разделяемой двумя процессами памяти</p>
     <empty-line/>
     <p>В этой главе сначала рассматриваются именованные семафоры Posix, а затем — размещаемые в памяти. Мы возвращаемся к задаче производителей и потребителей из раздела 7.3 и расширяем ее, позволяя нескольким производителям работать с одним потребителем, а в конце концов переходим к нескольким производителям и нескольким потребителям. Затем мы покажем, что часто используемый при реализации ввода-вывода метод множественных буферов является частным случаем задачи производителей и потребителей.</p>
     <p>Мы рассмотрим три реализации именованных семафоров Posix: с использованием каналов FIFO, отображаемых в память файлов и семафоров System V. </p>
    </section>
    <section>
     <title>
      <p>10.2. Функции sem_open, sem_close и sem_unlink</p>
     </title>
     <p>Функция sem_open создает новый именованный семафор или открывает существующий. Именованный семафор может использоваться для синхронизации выполнения потоков и процессов:</p>
     <p><code>#include &lt;semaphore.h&gt;</code></p>
     <p><code>sem_t *sem_open(const char <emphasis>*name,</emphasis> int <emphasis>oflag, …</emphasis></code></p>
     <p><code> /* mode_t <emphasis>mode,</emphasis> unsigned int <emphasis>value</emphasis> */);</code></p>
     <p><code>/* Возвращает указатель на семафор в случае успешного завершения, SEM_FAILED — в случае ошибки */</code></p>
     <p>Требования к аргументу <emphasis>пате</emphasis> приведены в разделе 2.2.</p>
     <p>Аргумент <emphasis>oflag</emphasis> может принимать значения 0, O_CREAT, O_CREAT | O_EXCL, как описано в разделе 2.3. Если указано значение O_CREAT, третий и четвертый аргументы функции являются обязательными. Аргумент <emphasis>mode</emphasis> указывает биты разрешений доступа (табл. 2.3), a <emphasis>value</emphasis> указывает начальное значение семафора. Это значение не может превышать константу SEM_VALUE_MAX, которая, согласно Posix, должна быть не менее 32767. Бинарные семафоры обычно устанавливаются в 1, тогда как семафоры-счетчики чаще инициализируются большими величинами.</p>
     <p>При указании флага O_CREAT (без O_EXCL) семафор инициализируется только в том случае, если он еще не существует. Если семафор существует, ошибки не возникнет. Ошибка будет возвращена только в том случае, если указаны флаги O_CREAT | O_EXCL.</p>
     <p>Возвращаемое значение представляет собой указатель на тип sem_t. Этот указатель впоследствии передается в качестве аргумента функциям sem_close, sem_wait, sem_trywait, sem_post и sem_getvalue.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Кажется странным возвращать SEM_FAILED в случае ошибки — нулевой указатель был бы более уместен. В ранних версиях стандарта Posix указывалось возвращаемое значение –1, и во многих реализациях константа SEM_FAILED определена как</p>
      <p><code>#define SEM_FAILED ((sem_t *)(-1))</code></p>
      <p>В Posix.1 мало говорится о битах разрешений, связываемых с семафором при его создании и открытии. Вспомните, мы говорили в связи с табл. 2.2 о том, что для именованных семафоров не нужно даже указывать флаги O_RDONLY, O_WRONLY и O_RDWR. В системах, на которых мы тестируем все программы этой книги (Digital Unix 4.0B и Solaris 2.6), для работы с семафором (его открытия) необходимо иметь к нему доступ как на чтение, так и на запись. Причина, скорее всего, в том, что обе операции, выполняемые с семафором (post и wait), состоят из считывания текущего значения и последующего его изменения. Отсутствие доступа на чтение или запись в этих реализациях приводит к возвращению функцией sem_open ошибки EACCESS ("Permission denied"). </p>
     </cite>
     <p>Открыв семафор с помощью sem_open, можно потом закрыть его, вызвав sem_close:</p>
     <p><code>#include &lt;semaphore.h&gt;</code></p>
     <p><code>int sem_close(sem_t *<emphasis>sem</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения. –1 – в случае ошибки */</code> </p>
     <p>Операция закрытия выполняется автоматически при завершении процесса для всех семафоров, которые были им открыты. Автоматическое закрытие осуществляется как при добровольном завершении работы (вызове exit или _exit), так и при принудительном (с помощью сигнала).</p>
     <p>Закрытие семафора не удаляет его из системы. Именованные семафоры Posix обладают по меньшей мере живучестью ядра. Значение семафора сохраняется, даже если ни один процесс не держит его открытым.</p>
     <p>Именованный семафор удаляется из системы вызовом sem_unlink:</p>
     <p><code>#include &lt;semaphore.h&gt;</code></p>
     <p><code>int sem_unlink(const char *<emphasis>name</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
     <p>Для каждого семафора ведется подсчет процессов, в которых он является открытым (как и для файлов), и функция sem_unlink действует аналогично unlink для файлов: объект <emphasis>пате</emphasis> может быть удален из файловой системы, даже если он открыт какими-либо процессами, но реальное удаление семафора не будет осуществлено до тех пор, пока он не будет окончательно закрыт.</p>
    </section>
    <section>
     <title>
      <p>10.3. Функции sem_wait и sem_trywait</p>
     </title>
     <p>Функция sem_wait проверяет значение заданного семафора на положительность, уменьшает его на единицу и немедленно возвращает управление процессу. Если значение семафора при вызове функции равно нулю, процесс приостанавливается, до тех пор пока оно снова не станет больше нуля, после чего значение семафора будет уменьшено на единицу и произойдет возврат из функции. Ранее мы отметили, что операция «проверка и уменьшение» должна быть атомарной по отношению к другим потокам, работающим с этим семафором:</p>
     <p><code>#include &lt;semaphore.h&gt;</code></p>
     <p><code>int sem_wait(sem_t *<emphasis>sem</emphasis>);</code></p>
     <p><code>int sem_trywait(sem_t *<emphasis>sem</emphasis>);</code></p>
     <p><code>/* Обе функции возвращают 0 в случае успешного завершения. –1 – в случае ошибки */</code></p>
     <p>Разница между sem_wait и sem_trywait заключается в том, что последняя не приостанавливает выполнение процесса, если значение семафора равно нулю, а просто немедленно возвращает ошибку EAGAIN.</p>
     <p>Возврат из функции sem_wait может произойти преждевременно, если будет получен сигнал. При этом возвращается ошибка с кодом EINTR.</p>
    </section>
    <section>
     <title>
      <p>10.4. Функции sem_post и sem_getvalue</p>
     </title>
     <p>После завершения работы с семафором поток вызывает sem_post. Как мы уже говорили в разделе 10.1, этот вызов увеличивает значение семафора на единицу и возобновляет выполнение любых потоков, ожидающих изменения значения семафора:</p>
     <p><code>#include &lt;semaphore.h&gt;</code></p>
     <p><code>int sem_post(sem_t *<emphasis>sem</emphasis>);</code></p>
     <p><code>int sem_getvalue(sem_t *<emphasis>sem</emphasis>, int *<emphasis>valp</emphasis>);</code></p>
     <p><code>/* Обе функции возвращают 0 в случае успешного завершения. –1 – в случае ошибки */</code> </p>
     <p>Функция sem_getvalue возвращает текущее значение семафора, помещая его в целочисленную переменную, на которую указывает valp. Если семафор заблокирован, возвращается либо 0, либо отрицательное число, модуль которого соответствует количеству потоков, ожидающих разблокирования семафора.</p>
     <p>Теперь мы ясно видим отличия семафоров от взаимных исключений и условных переменных. Прежде всего взаимное исключение может быть разблокировано только заблокировавшим его потоком. Для семафоров такого ограничения нет: один из потоков может ожидать изменения значения семафора, чтобы потом уменьшить его с 1 до 0 (действие аналогично блокированию семафора), а другой поток может изменить значение семафора с 0 до 1, что аналогично разблокированию семафора.</p>
     <p>Далее, поскольку любой семафор имеет некоторое значение, увеличиваемое операцией <emphasis>post</emphasis> и уменьшаемое операцией <emphasis>wait,</emphasis> поток может изменить его значение (например, увеличить с 0 до 1), даже если нет потоков, ожидающих его изменения. Если же поток вызывает pthread_cond_signal в отсутствие заблокированных при вызове pthread_cond_wait потоков, сигнал просто теряется.</p>
     <p>Наконец, среди всех функций, работающих со средствами синхронизации — взаимными исключениями, условными переменными, блокировками чтения-записи и семафорами, только одна может быть вызвана из обработчика сигналов: sem_post.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Не следует рассматривать приведенный выше текст как доводы в пользу семафоров. Все средства синхронизации, обсуждаемые в этой книге — взаимные исключения, условные переменные, блокировки чтения-записи, семафоры и блокировка fcntl, обладают своими преимуществами и недостатками. Выбирать средства синхронизации для приложения следует с учетом их многочисленных особенностей. Из нашего сравнительного описания можно сделать вывод, что взаимные исключения больше приспособлены для блокировки, условные переменные — для ожидания, а семафоры — для того и другого, и последнее может привести к излишнему усложнению текста программы.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>10.5. Простые примеры</p>
     </title>
     <section>
      <p>В этом разделе мы напишем несколько простых программ, работающих с именованными семафорами Posix. Эти программы помогут нам узнать особенности функционирования и реализации семафоров. Поскольку именованные семафоры Posix обладают по крайней мере живучестью ядра, для работы с ними мы можем использовать отдельные программы.</p>
     </section>
     <section>
      <title>
       <p>Программа semcreate</p>
      </title>
      <p>В листинге 10.3 приведен текст программы, создающей именованный семафор. При вызове программы можно указать параметр –е, обеспечивающий исключающее создание (если семафор уже существует, будет выведено сообщение об ошибке), а параметр –i с числовым аргументом позволяет задать начальное значение семафора, отличное от 1. </p>
      <subtitle>Листинг 10.3.<a l:href="#n_1" type="note">[1]</a> Создание именованного семафора</subtitle>
      <p><code>//pxsem/semcreate.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int с, flags;</code></p>
      <p><code>6   sem_t *sem;</code></p>
      <p><code>7   unsigned int value;</code></p>
      <p><code>8   flags = O_RDWR | O_CREAT;</code></p>
      <p><code>9   value = 1;</code></p>
      <p><code>10  while ((c = Getopt(argc, argv, "ei:")) != –1) {</code></p>
      <p><code>11   switch (c) {</code></p>
      <p><code>12   case 'e':</code></p>
      <p><code>13    flags |= O_EXCL;</code></p>
      <p><code>14    break;</code></p>
      <p><code>15   case 'i':</code></p>
      <p><code>16    value = atoi(optarg);</code></p>
      <p><code>17    break;</code></p>
      <p><code>18   }</code></p>
      <p><code>19  }</code></p>
      <p><code>20  if (optind != argc – 1)</code></p>
      <p><code>21   err_quit("usage: semcreate [ –e ] [ –i initialvalue ] &lt;name&gt;");</code></p>
      <p><code>22  sem = Sem_open(argv[optind], flags, FILE_MODE, value);</code></p>
      <p><code>23  Sem_close(sem);</code></p>
      <p><code>24  exit(0);</code></p>
      <p><code>25 }</code></p>
      <subtitle>Создание семафора</subtitle>
      <p>22 Поскольку мы всегда указываем флаг O_CREAT, нам приходится вызывать sem_open с четырьмя аргументами. Последние два используются только в том случае, если семафор еще не существует.</p>
      <subtitle>Закрытие семафора</subtitle>
      <p>23 Мы вызываем sem_close, хотя, если бы мы не сделали этот вызов, семафор все равно закрылся бы автоматически при завершении процесса и ресурсы системы были бы высвобождены.</p>
     </section>
     <section>
      <title>
       <p>Программа semunlink</p>
      </title>
      <p>Программа в листинге 10.4 удаляет именованный семафор.</p>
      <subtitle>Листинг 10.4. Удаление именованного семафора</subtitle>
      <p><code>//pxsem/semunlink.c</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2 int</code></p>
      <p><code>3 main(int argc, char **argv)</code></p>
      <p><code>4 {</code></p>
      <p><code>5  if (argc != 2)</code></p>
      <p><code>6   err_quit("usage: semunlink &lt;name&gt;");</code></p>
      <p><code>7  Sem_unlink(argv[1]);</code></p>
      <p><code>8  exit(0);</code></p>
      <p><code>9 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа semgetvalue</p>
      </title>
      <p>В листинге 10.5 приведен текст простейшей программы, которая открывает указанный именованный семафор, получает его текущее значение и выводит его.</p>
      <subtitle>Листинг 10.5. Получение и вывод значения семафора</subtitle>
      <p><code>//pxsem/semgetvalue.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   sem_t *sem;</code></p>
      <p><code>6   int val;</code></p>
      <p><code>7   if (argc != 2)</code></p>
      <p><code>8    err_quit("usage: semgetvalue &lt;name&gt;");</code></p>
      <p><code>9   sem = Sem_open(argv[1], 0);</code></p>
      <p><code>10  Sem_getvalue(sem, &amp;val);</code></p>
      <p><code>11  printf("value = %d\n", val);</code></p>
      <p><code>12  exit(0);</code></p>
      <p><code>13 }</code></p>
      <subtitle>Открытие семафора</subtitle>
      <p>9 Семафор, который мы открываем, должен быть заранее создан другой программой. Вторым аргументом sem_open будет 0: мы не указываем флаг O_CREAT и нам не нужно задавать никаких других параметров открытия 0_ххх.</p>
     </section>
     <section>
      <title>
       <p>Программа semwait</p>
      </title>
      <p>Программа в листинге 10.6 открывает именованный семафор, вызывает semwait (которая приостанавливает выполнение процесса, если значение семафора меньше либо равно 0, а при положительном значении семафора уменьшает его на 1), получает и выводит значение семафора, а затем останавливает свою работу навсегда при вызове pause.</p>
      <subtitle>Листинг 10.6. Ожидание изменения значения семафора и вывод нового значения</subtitle>
      <p><code>//pxsem/semwait.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   sem_t *sem;</code></p>
      <p><code>6   int val;</code></p>
      <p><code>7   if (argc != 2)</code></p>
      <p><code>8    err_quit("usage: semwait &lt;name&gt;");</code></p>
      <p><code>9   sem = Sem_open(argv[1], 0);</code></p>
      <p><code>10  Sem_wait(sem);</code></p>
      <p><code>11  Sem_getvalue(sem, &amp;val);</code></p>
      <p><code>12  printf("pid %ld has semaphore, value = %d\n", (long) getpid(), val);</code></p>
      <p><code>13  pause(); /* блокируется, пока не будет удален */</code></p>
      <p><code>14  exit(0);</code></p>
      <p><code>15 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа sempost</p>
      </title>
      <p>В листинге 10.7 приведена программа, которая выполняет операцию <emphasis>post</emphasis> для указанного семафора (то есть увеличивает его значение на 1), а затем получает значение этого семафора и выводит его.</p>
      <subtitle>Листинг 10.7. Увеличение значения семафора</subtitle>
      <p><code>//pxsem/sempost.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   sem_t *sem;</code></p>
      <p><code>6   int val;</code></p>
      <p><code>7   if (argc != 2)</code></p>
      <p><code>8    err_quit("usage: sempost &lt;name&gt;");</code></p>
      <p><code>9   sem = Sem_open(argv[1], 0);</code></p>
      <p><code>10  Sem_post(sem);</code></p>
      <p><code>11  Sem_getvalue(sem, &amp;val);</code></p>
      <p><code>12  printf("value = %d\n", val);</code></p>
      <p><code>13  exit(0);</code></p>
      <p><code>14 }</code></p>
     </section>
     <section>
      <title>
       <p>Примеры</p>
      </title>
      <p>Для начала мы создадим именованный семафор в Digital Unix 4.0B и выведем его значение, устанавливаемое по умолчанию при инициализации:</p>
      <p><code>alpha % <strong>semcreate /tmp/test1</strong></code></p>
      <p><code>alpha % <strong>ls-l /tmp/test1</strong></code></p>
      <p><code>-rw-r--r-- 1 rstevens system 264 Nov 13 08:51 /tmp/test1</code></p>
      <p><code>alpha %<strong>semgetvalue /tmp/test1</strong></code></p>
      <p><code>value = 1</code></p>
      <p>Аналогично очередям сообщений Posix система создает файл семафора с тем именем, которое мы указали при вызове функции.</p>
      <p>Теперь подождем изменения семафора и прервем работу программы, установившей блокировку:</p>
      <p><code>alpha % <strong>semwait /tmp/test1</strong></code></p>
      <p><code>pid 9702 has semaphore, value = 0 <emphasis>значение после возврата из sem_wait</emphasis></code></p>
      <p><code><strong>^?</strong>                                <emphasis>клавиша прерывания работы в нашей системе</emphasis></code></p>
      <p><code>alpha % <strong>semgetvalue /tmp/test1</strong></code></p>
      <p><code>value = 0                         <emphasis>значение остается нулевым</emphasis></code></p>
      <p>Приведенный пример иллюстрирует упомянутые ранее особенности. Во-первых, значение семафора обладает живучестью ядра. Значение 1, установленное при создании семафора, хранится в ядре даже тогда, когда ни одна программа не пользуется этим семафором. Во-вторых, при выходе из программы semwait, заблокировавшей семафор, значение его не изменяется, то есть ресурс остается заблокированным. Это отличает семафоры от блокировок fcntl, описанных в главе 9, которые снимались автоматически при завершении работы процесса.</p>
      <p>Покажем теперь, что в этой реализации отрицательное значение семафора используется для хранения информации о количестве процессов, ожидающих разблокирования семафора:</p>
      <p><code>alpha % <strong>semgetvalue /tmp/test1</strong></code></p>
      <p><code>value = 0                          <emphasis>это значение сохранилось с конца предыдущего примера</emphasis></code></p>
      <p><code>alpha % <strong>semwait /tmp/test1 &amp;</strong>      <emphasis>запуск в фоновом режиме</emphasis></code></p>
      <p><code>[1] 9718                           <emphasis>блокируется в ожидании изменения значения семафора</emphasis></code></p>
      <p><code>alpha % <strong>semgetvalue /tmp/test1</strong></code></p>
      <p><code>value = –1                         <emphasis>один процесс ожидает изменения семафора</emphasis></code></p>
      <p><code>alpha % <strong>semwait /tmp/test1 &amp;</strong>       <emphasis>запуск еще одного процесса в фоновом режиме</emphasis></code></p>
      <p><code>[2] 9727                           <emphasis>он также блокируется</emphasis></code></p>
      <p><code>alpha % <strong>semgetvalue /tmp/test1</strong></code></p>
      <p><code>value = –2                         <emphasis>два процесса ожидают изменения семафора</emphasis></code></p>
      <p><code>alpha % <strong>sempost /tmp/test1</strong></code></p>
      <p><code>value = –1                         <emphasis>значение после возвращенияиз sem_post</emphasis></code></p>
      <p><code>pid 9718 has semaphore, value = –1 <emphasis>вывод программы semwait</emphasis></code></p>
      <p><code>alpha % <strong>sempost /tmp/test1</strong></code></p>
      <p><code>value = 0</code></p>
      <p><code>pid 9727 has semaphore, value = 0  <emphasis>вывод программы semwait</emphasis></code></p>
      <p>При первом вызове sem_post значение семафора изменилось с –2 на –1 и один из процессов, ожидавших изменения значения семафора, был разблокирован.</p>
      <p>Выполним те же действия в Solaris 2.6, обращая внимание на различия в реализации:</p>
      <p><code>solaris % <strong>semcreate /test2</strong></code></p>
      <p><code>solaris % <strong>ls –l /tmp/.*test2*</strong></code></p>
      <p><code>-rw-r--r-- 1 rstevens other1 48 Nov 13 09:11 /tmp/.SEMDtest2</code></p>
      <p><code>–rw-rw-rw– 1 rstevens other1  0 Nov 13 09:11 /tmp/.SEMLtest2</code></p>
      <p><code>solaris % <strong>semgetvalue /test2</strong></code></p>
      <p><code>value = 1</code></p>
      <p>Аналогично очередям сообщений Posix файлы создаются в каталоге /tmp, причем указываемое при вызове имя становится суффиксом имен файлов. Разрешения первого файла соответствуют указанным в вызове sem_open, а второй файл, как можно предположить, используется для блокировки доступа.</p>
      <p>Проверим, что ядро не осуществляет автоматического увеличения значения семафора при завершении работы процесса, установившего блокировку:</p>
      <p><code>solaris % <strong>semwait /test2</strong></code></p>
      <p><code>pid 4133 has semaphore, value = 0</code></p>
      <p><code><strong>^?</strong> <emphasis>нажимаем клавишу прерывания выполнения</emphasis></code></p>
      <p><code>solaris % <strong>semgetvalue /test2</strong></code></p>
      <p><code>value = 0</code></p>
      <p>Посмотрим теперь, как меняется значение семафора в этой реализации при появлении новых процессов, ожидающих изменения значения семафора:</p>
      <p><code>solaris % <strong>semgetvalue /test2</strong></code></p>
      <p><code>value = 0                       <emphasis>значение сохранилось с конца предыдущего примера</emphasis></code></p>
      <p><code>solaris % <strong>semwait /test2</strong>&amp;       <emphasis>запуск в фоновом режиме</emphasis></code></p>
      <p><code>[1] 4257                        <emphasis>программа блокируется</emphasis></code></p>
      <p><code>solaris % <strong>semgetvalue /test2</strong></code></p>
      <p><code>value = 0                        <emphasis>в этой реализации отрицательные значения не используются</emphasis></code></p>
      <p><code>solaris % <strong>semwait /test2&amp;        </strong><emphasis>еще один фоновый процесс</emphasis></code></p>
      <p><code>[2] 4263</code></p>
      <p><code>solaris % <strong>semgetvalue /test2</strong></code></p>
      <p><code>value 0                          <emphasis>и для двух ожидающих процессов значение остается нулевым</emphasis></code></p>
      <p><code>solaris % <strong>sempost /test2          </strong><emphasis>выполняем операцию post</emphasis></code></p>
      <p><code>pid 4257 has semaphore, value = 0 <emphasis>вывод программы semwait</emphasis></code></p>
      <p><code>value = 0</code></p>
      <p><code>solaris % <strong>sempost /test2</strong></code></p>
      <p><code>pid 4263 has semaphore, value = 0 <emphasis>вывод программы semwait</emphasis></code></p>
      <p><code>value = 0</code></p>
      <p>Можно заметить отличие по сравнению с результатами выполнения той же последовательности команд в Digital Unix 4.0B: после изменения значения семафора управление сразу же передается ожидающему изменения семафора процессу.</p>
     </section>
    </section>
    <section>
     <title>
      <p>10.6. Задача производителей и потребителей</p>
     </title>
     <section>
      <p>В разделе 7.3 мы описали суть задачи производителей и потребителей и привели несколько возможных ее решений, в которых несколько потоков-производителей заполняли массив, который обрабатывался одним потоком-потребителем.</p>
      <p>1. В нашем первом варианте решения (раздел 7.2) потребитель запускался только после завершения работы производителей, поэтому мы могли решить проблему синхронизации, используя единственное взаимное исключение для синхронизации производителей.</p>
      <p>2. В следующем варианте решения (раздел 7.5) потребитель запускался до завершения работы производителей, поэтому требовалось использование взаимного исключения (для синхронизации производителей) вместе с условной переменной и еще одним взаимным исключением (для синхронизации потребителя с производителями).</p>
      <p>Расширим постановку задачи производителей и потребителей, используя общий буфер в качестве циклического: заполнив последнее поле, производитель (buff[NBUFF-1]) возвращается к его началу и заполняет первое поле (buff[0]), и потребитель действует таким же образом. Возникает еще одно требование к синхронизации: потребитель не должен опережать производителя. Мы все еще предполагаем, что производитель и потребитель представляют собой отдельные потоки одного процесса, но они также могут быть и просто отдельными процессами, если мы сможем создать для них общий буфер (например, используя разделяемую память, часть 4).</p>
      <p>При использовании общего буфера в качестве циклического код должен удовлетворять трем требованиям:</p>
      <p>1. Потребитель не должен пытаться извлечь объект из буфера, если буфер пуст.</p>
      <p>2. Производитель не должен пытаться поместить объект в буфер, если последний полон.</p>
      <p>3. Состояние буфера может описываться общими переменными (индексами, счетчиками, указателями связных списков и т.д.), поэтому все операции с буфером, совершаемые потребителями и производителями, должны быть защищены от потенциально возможной ситуации гонок.</p>
      <p>Наше решение использует три семафора:</p>
      <p>1. Бинарный семафор с именем mutex защищает критические области кода: помещение данных в буфер (для производителя) и изъятие данных из буфера (для потребителя). Бинарный семафор, используемый в качестве взаимного исключения, инициализируется единицей. (Конечно, мы могли бы воспользоваться и обычным взаимным исключением вместо двоичного семафора. См. упражнение 10.10.)</p>
      <p>2. Семафор-счетчик с именем nempty подсчитывает количество свободных полей в буфере. Он инициализируется значением, равным объему буфера (NBUFF).</p>
      <p>3. Семафор-счетчик с именем nstored подсчитывает количество заполненных полей в буфере. Он инициализируется нулем, поскольку изначально буфер пуст.</p>
      <image l:href="#Any2FbImgLoader167"/>
      <p>Рис. 10.7. Состояние буфера и двух семафоров-счетчиков после инициализации</p>
      <empty-line/>
      <p>На рис. 10.7 показано состояние буфера и двух семафоров-счетчиков после завершения инициализации. Неиспользуемые элементы массива выделены темным.</p>
      <p>В нашем примере производитель помещает в буфер целые числа от 0 до NLOOP-1 (buff[0] = 0, buff[1] = 1), работая с ним как с циклическим. Потребитель считывает эти числа и проверяет их правильность, выводя сообщения об ошибках в стандартный поток вывода.</p>
      <p>На рис. 10.8 изображено состояние буфера и семафоров-счетчиков после помещения в буфер трех элементов, но до изъятия их потребителем.</p>
      <image l:href="#Any2FbImgLoader168"/>
      <p>Рис. 10.8. Буфер и семафоры после помещения в буфер трех элементов</p>
      <empty-line/>
      <p>Предположим, что потребитель изъял один элемент из буфера. Новое состояние изображено на рис. 10.9.</p>
      <image l:href="#Any2FbImgLoader169"/>
      <p>Рис. 10.9. Буфер и семафоры после удаления первого элемента из буфера</p>
      <empty-line/>
      <p>В листинге 10.8 приведен текст функции main, которая создает три семафора, запускает два потока, ожидает их завершения и удаляет семафоры.</p>
      <subtitle>Листинг 10.8. Функция main для решения задачи производителей и потребителей с помощью семафоров</subtitle>
      <p><code>//pxsem/prodcons1.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #define NBUFF 10</code></p>
      <p><code>3  #define SEM_MUTEX "mutex" /* аргументы px_ipc_name() */</code></p>
      <p><code>4  #define SEM_NEMPTY "nempty"</code></p>
      <p><code>5  #define SEM_NSTORED "nstored"</code></p>
      <empty-line/>
      <p><code>6  int nitems; /* read-only для производителя и потребителя */</code></p>
      <p><code>7  struct { /* разделяемые производителем и потребителем данные */</code></p>
      <p><code>8   int buff[NBUFF];</code></p>
      <p><code>9   sem_t *mutex, *nempty, *nstored;</code></p>
      <p><code>10 } shared;</code></p>
      <p><code>11 void *produce(void *), *consume(void *);</code></p>
      <empty-line/>
      <p><code>12 int</code></p>
      <p><code>13 main(int argc, char **argv)</code></p>
      <p><code>14 {</code></p>
      <p><code>15  pthread_t tid_produce, tid_consume;</code></p>
      <p><code>16  if (argc != 2)</code></p>
      <p><code>17   err_quit("usage: prodcons1 &lt;#items&gt;");</code></p>
      <p><code>18  nitems = atoi(argv[1]);</code></p>
      <p><code>19  /* создание трех семафоров */</code></p>
      <p><code>20  shared.mutex = Sem_open(Px_ipc_name(SEM_MUTEX), O_CREAT | O_EXCL,</code></p>
      <p><code>21   FILE_MODE, 1);</code></p>
      <p><code>22  shared.nempty = Sem_open(Px_ipc_name(SEM_NEMPTY), 0_CREAT | O_EXCL,</code></p>
      <p><code>23   FILE_MODE, NBUFF);</code></p>
      <p><code>24  shared.nstored = Sem_open(Px_ipc_name(SEM_NSTORED), O_CREAT | O_EXCL,</code></p>
      <p><code>25   FILE_MODE, 0);</code></p>
      <p><code>26  /* создание одного потока-производителя и одного потока-потребителя */</code></p>
      <p><code>27  Set_concurrency(2);</code></p>
      <p><code>28  Pthread_create(&amp;tid_produce, NULL, produce, NULL);</code></p>
      <p><code>29  Pthread_create(&amp;tid_consume, NULL, consume, NULL);</code></p>
      <p><code>30  /* ожидание завершения работы потоков */</code></p>
      <p><code>31  Pthread_join(tid_produce, NULL);</code></p>
      <p><code>32  Pthread_join(tid_consume, NULL);</code></p>
      <p><code>33  /* удаление семафоров */</code></p>
      <p><code>34  Sem_unlink(Px_ipc_name(SEM_MUTEX));</code></p>
      <p><code>35  Sem_unlink(Px_ipc_name(SEM_NEMPTY));</code></p>
      <p><code>36  Sem_unlink(Px_ipc_name(SEM_NSTORED));</code></p>
      <p><code>37  exit(0);</code></p>
      <p><code>38 }</code></p>
      <subtitle>Глобальные переменные</subtitle>
      <p>6-10 Потоки совместно используют буфер, содержащий NBUFF элементов, и три указателя на семафоры. Как говорилось в главе 7, мы объединяем эти данные в структуру, чтобы подчеркнуть, что семафоры используются для синхронизации доступа к буферу.</p>
      <subtitle>Создание семафоров</subtitle>
      <p>19-25 Мы создаем три семафора, передавая их имена функции px_ipc_name. Флаг O_EXCL мы указываем, для того чтобы гарантировать инициализацию каждого семафора правильным значением. Если после преждевременно завершенного предыдущего запуска программы остались неудаленные семафоры, мы обработаем эту ситуацию, вызвав перед их созданием sem_unlink и игнорируя ошибки. Мы могли бы проверять возвращение ошибки EEXIST при вызове sem_open с флагом O_EXCL, а затем вызывать sem_unlink и еще раз sem_open, но это усложнило бы программу. Если нам нужно проверить, что запущен только один экземпляр программы (что следует сделать перед созданием семафоров), можно обратиться к разделу 9.7, где описаны методы решения этой задачи.</p>
      <subtitle>Создание двух потоков</subtitle>
      <p>26-29 Создаются два потока, один из которых является производителем, а другой — потребителем. При запуске никакие аргументы им не передаются.</p>
      <p>30-36 Главный поток ждет завершения работы производителя и потребителя, а затем удаляет три семафора.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Мы могли бы вызвать для каждого семафора sem_close, но это делается автоматически при завершении процесса. А вот удалить имя семафора из файловой системы необходимо явно.</p>
      </cite>
      <p>В листинге 10.9 приведен текст функций produce и consume.</p>
      <subtitle>Листинг 10.9. Функции produce и consume</subtitle>
      <p><code>//pxsem/prodcons1.c</code></p>
      <p><code>39 void *</code></p>
      <p><code>40 produce(void *arg)</code></p>
      <p><code>41 {</code></p>
      <p><code>42  int i;</code></p>
      <p><code>43  for (i = 0; i &lt; nitems; i++) {</code></p>
      <p><code>44   Sem_wait(shared.nempty); /* ожидаем освобождения поля */</code></p>
      <p><code>45   Sem_wait(shared.mutex);</code></p>
      <p><code>46   shared.buff[i % NBUFF] = i; /* помещаем i в циклический буфер */</code></p>
      <p><code>47   Sem_post(shared.mutex);</code></p>
      <p><code>48   Sem_post(shared.nstored); /* сохраняем еще 1 элемент */</code></p>
      <p><code>49  }</code></p>
      <p><code>50  return(NULL);</code></p>
      <p><code>51 }</code></p>
      <empty-line/>
      <p><code>52 void *</code></p>
      <p><code>53 consume(void *arg)</code></p>
      <p><code>54 {</code></p>
      <p><code>55  int i;</code></p>
      <p><code>56  for (i = 0; i &lt; nitems; i++) {</code></p>
      <p><code>57   Sem_wait(shared.nstored); /* ожидаем появления объекта в буфере */</code></p>
      <p><code>58   Sem_wait(shared.mutex);</code></p>
      <p><code>59   if (shared.buff[i % NBUFF] != i)</code></p>
      <p><code>60    printf("buff[%d] = %d\n", i, shared.buff[i % NBUFF]);</code></p>
      <p><code>61   Sem_post(shared.mutex);</code></p>
      <p><code>62   Sem_post(shared.nempty); /* еще одно пустое поле */</code></p>
      <p><code>63  }</code></p>
      <p><code>64  return(NULL);</code></p>
      <p><code>65 }</code></p>
      <subtitle>Производитель ожидает освобождения места в буфере</subtitle>
      <p>44 Производитель вызывает sem_wait для семафора nempty, ожидая появления свободного места. В первый раз при выполнении этой команды значение семафора nempty уменьшится с NBUFF до NBUFF-1.</p>
      <subtitle>Производитель помещает элемент в буфер</subtitle>
      <p>45-48 Перед помещением нового элемента в буфер производитель должен установить блокировку на семафор mutex. В нашем примере, где производитель просто сохраняет значение в элементе массива с индексом i <emphasis>%</emphasis> NBUFF, для описания состояния буфера не используется никаких разделяемых переменных (то есть мы не используем связный список, который нужно было бы обновлять каждый раз при помещении элемента в буфер). Следовательно, установка и снятие семафора mutex не являются обязательными. Тем не менее мы иллюстрируем эту технику, потому что обычно ее применение является необходимым в задачах такого рода (обновление буфера, разделяемого несколькими потоками).</p>
      <p>После помещения элемента в буфер блокировка с семафора mutex снимается (его значение увеличивается с 0 до 1) и увеличивается значение семафора nstored. Первый раз при выполнении этой команды значение nstored изменится с начального значения 0 до 1.</p>
      <subtitle>Потребитель ожидает изменения семафора nstored</subtitle>
      <p>57-62 Если значение семафора nstored больше 0, в буфере имеются объекты для обработки. Потребитель изымает один элемент из буфера и проверяет правильность его значения, защищая буфер в момент доступа к нему с помощью семафора mutex. Затем потребитель увеличивает значение семафора nempty, указывая производителю на наличие свободных полей.</p>
     </section>
     <section>
      <title>
       <p>Зависание</p>
      </title>
      <p>Что произойдет, если мы по ошибке поменяем местами вызовы Sem_wait в функции consumer (листинг 10.9)? Предположим, что первым запускается производитель (как в решении, предложенном для упражнения 10.1). Он помещает в буфер NBUFF элементов, уменьшая значение семафора nempty от NBUFF до 0 и увеличивая значение семафора nstored от 0 до NBUFF. Затем производитель блокируется в вызове Sem_wait(shared. nempty), поскольку буфер полон и помещать элементы больше некуда.</p>
      <p>Запускается потребитель и проверяет первые NBUFF элементов буфера. Это уменьшает значение семафора nstored от NBUFF до 0 и увеличивает значение семафора nempty от 0 до NBUFF. Затем потребитель блокируется в вызове Sem_wait(shared, nstored) после вызова Sem_wait(shared, mutex). Производитель мог бы продолжать работу, поскольку значение семафора nempty уже отлично от 0, но он вызвал Sem_wait(shared, mutex) и его выполнение было приостановлено. </p>
      <p>Это называется зависанием программы (deadlock). Производитель ожидает освобождения семафора mutex, а потребитель не снимает с него блокировку, ожидая освобождения семафора nstored. Но производитель не может изменить nstored, пока он не получит семафор mutex. Это одна из проблем, которые часто возникают с семафорами: если в программе сделать ошибку, она будет работать неправильно.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Стандарт Posix позволяет функции sem_wait обнаруживать зависание и возвращать ошибку EDEADLK, но ни одна из систем, использовавшихся для написания примеров (Digital Unix 4.0B и Solaris 2.6), не обнаружила ошибку в данном случае.</p>
      </cite>
     </section>
    </section>
    <section>
     <title>
      <p>10.7. Блокирование файлов</p>
     </title>
     <p>Вернемся к задаче о порядковом номере из главы 9. Здесь мы напишем новые версии функций my_lock и my_unlосk, использующие именованные семафоры Posix. В листинге 10.10 приведен текст этих функций.</p>
     <subtitle>Листинг 10.10. Блокирование файла с помощью именованных семафоров Posix</subtitle>
     <p><code>//lock/lockpxsem.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define LOCK_PATH "pxsemlock"</code></p>
     <p><code>3  sem_t *locksem;</code></p>
     <p><code>4  int initflag;</code></p>
     <empty-line/>
     <p><code>5  void</code></p>
     <p><code>6  my_lock(int fd)</code></p>
     <p><code>7  {</code></p>
     <p><code>8   if (initflag == 0) {</code></p>
     <p><code>9    locksem = Sem_open(Px_ipc_name(LOCK_PATH), O_CREAT, FILE_MODE, 1);</code></p>
     <p><code>10   initflag = 1;</code></p>
     <p><code>11  }</code></p>
     <p><code>12  Sem_wait(locksem);</code></p>
     <p><code>13 }</code></p>
     <empty-line/>
     <p><code>14 void</code></p>
     <p><code>15 my_unlock(int fd)</code></p>
     <p><code>16 {</code></p>
     <p><code>17  Sem_post(locksem);</code></p>
     <p><code>18 }</code></p>
     <p>Один из семафоров используется для рекомендательной блокировки доступа к файлу и инициализируется единицей при первом вызове функции. Для получения блокировки мы вызываем sem_wait, а для ее снятия — sem_post.</p>
    </section>
    <section>
     <title>
      <p>10.8. Функции sem_init и sem_destroy</p>
     </title>
     <section>
      <p>До сих пор мы имели дело только с именованными семафорами Posix. Как мы уже говорили, они идентифицируются аргументом <emphasis>пате,</emphasis> обычно представляющим собой имя файла в файловой системе. Стандарт Posix описывает также семафоры, размещаемые в памяти, память под которые выделяет приложение (тип sem_t), а инициализируются они системой:</p>
      <p><code>#include &lt;semaphore.h&gt;</code></p>
      <p><code>int sem_init(sem_t <emphasis>*sem,</emphasis> int <emphasis>shared,</emphasis> unsigned int <emphasis>value</emphasis>);</code></p>
      <p><code>/* Возвращает –1 в случае ошибки */</code></p>
      <p><code>int sem_destroy(sem_t <emphasis>*sem</emphasis>);</code></p>
      <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
      <p>Размещаемый в памяти семафор инициализируется вызовом sem_init. Аргумент <emphasis>sem</emphasis> указывает на переменную типа sem_t, место под которую должно быть выделено приложением. Если аргумент shared равен 0, семафор используется потоками одного процесса, в противном случае доступ к нему могут иметь несколько процессов. Если аргумент shared ненулевой, семафор должен быть размещен в одном из видов разделяемой памяти и должен быть доступен всем процессам, использующим его. Как и в вызове sem_open, аргумент <emphasis>value</emphasis> задает начальное значение семафора.</p>
      <p>После завершения работы с размещаемым в памяти семафором его можно уничтожить, вызвав sem_destroy.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ 1</strong></p>
       <p>Функции sem_open не требуется параметр, аналогичный <emphasis>shared;</emphasis> не требуется ей и атрибут, аналогичный PTHREAD_PROCESS_SHARED (упоминавшийся в связи с взаимными исключениями и условными переменными в главе 7), поскольку именованный семафор <emphasis>всегда</emphasis> используется совместно несколькими процессами.</p>
      </cite>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ 2</strong></p>
       <p>Обратите внимание, что для размещаемого в памяти семафора нет ничего аналогичного флагу O_CREAT: функция sem_init всегда инициализирует значение семафора. Следовательно, нужно быть внимательным, чтобы вызывать sem_init только один раз для каждого семафора. (Упражнение 10.2 иллюстрирует разницу в этом смысле между именованным и размещаемым в памяти семафорами.) При вызове sem_init для уже инициализированного семафора результат непредсказуем.</p>
      </cite>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ 3</strong></p>
       <p>Удостоверьтесь, что вы понимаете фундаментальную разницу между sem_open и sem_init. Первая возвращает указатель на переменную типа sem_t, причем выделение места под переменную и ее инициализация выполняются этой же функцией. Напротив, первый аргумент sem_init представляет собой указатель на переменную типа sem_t, место под которую должен был заранее выделить вызывающий. Функция sem_init только инициализирует эту переменную.</p>
      </cite>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ 4</strong></p>
       <p>Стандарт Posix.1 предупреждает, что для обращения к размещаемым в памяти семафорам можно использовать только указатель, являющийся аргументом при вызове sem_init. Использование копий этого указателя может привести к неопределенным результатам.</p>
       <p>Функция sem_init возвращает –1 в случае ошибки, но она не возвращает 0 в случае успешного завершения. Это действительно странно, и примечание в Обосновании Posix. 1 говорит, что в будущих версиях функция, возможно, начнет возвращать 0 в случае успешного завершения. </p>
      </cite>
      <p>Размещаемый в памяти семафор может быть использован в тех случаях, когда нет необходимости использовать имя, связываемое с именованным семафором. Именованные семафоры обычно используются для синхронизации работы неродственных процессов. Имя в этом случае используется для идентификации семафора.</p>
      <p>В связи с табл. 1.1 мы говорили о том, что семафоры, размещаемые в памяти, обладают живучестью процесса, но на самом деле их живучесть зависит от типа используемой разделяемой памяти. Размещаемый в памяти семафор не утрачивает функциональности до тех пор, пока память, в которой он размещен, еще доступна какому-либо процессу.</p>
      <p>&#9632; Если размещаемый в памяти семафор совместно используется потоками одного процесса (аргумент <emphasis>shared</emphasis> при вызове sem_init равен 0), семафор обладает живучестью процесса и удаляется при завершении последнего.</p>
      <p>&#9632; Если размещаемый в памяти семафор совместно используется несколькими процессами (аргумент <emphasis>shared</emphasis> при вызове seminit равен 1), он должен располагаться в разделяемой памяти, и в этом случае семафор существует столько, сколько существует эта область памяти. Вспомните, что и разделяемая память Posix, и разделяемая память System V обладают живучестью ядра (табл. 1.1). Это значит, что сервер может создать область разделяемой памяти, инициализировать в ней размещаемый в памяти семафор Posix, а затем завершить работу. Некоторое время спустя один или несколько клиентов могут присоединить эту область к своему адресному пространству и получить доступ к хранящемуся в ней семафору.</p>
      <p>Предупреждаем, что нижеследующий код не работает так, как ожидается:</p>
      <p><code>sem_t mysem;</code></p>
      <p><code>Sem_init(&amp;mysem, 1.0); /* 2-й аргумент 1 –&gt; используется процессами */</code></p>
      <p><code>if (Fork() == 0) { /* дочерний процесс */</code></p>
      <p><code> …</code></p>
      <p><code> Sem_post(&amp;mysem);</code></p>
      <p><code>}</code></p>
      <p><code>Sem_wait(&amp;mysem); /* родительский процесс: ожидание дочернего */</code></p>
      <p>Проблема тут в том, что семафор не располагается в разделяемой памяти (см. раздел 10.12). Память, как правило, не делится между дочерним и родительским процессами при вызове fork. Дочерний процесс запускается с копией памяти родителя, но это не то же самое, что разделяемая память.</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>В качестве иллюстрации перепишем наш пример решения задачи производителей и потребителей из листингов 10.8 и 10.9 для использования размещаемых в памяти семафоров Posix. В листинге 10.11 приведен текст новой программы.</p>
      <subtitle>Листинг 10.11. Задача производителей и потребителей с использованием размещаемых в памяти семафоров</subtitle>
      <p><code>//pxsem/prodcons2.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #define NBUFF 10</code></p>
      <empty-line/>
      <p><code>3  int nitems; /* только для чтения производителем и потребителем */</code></p>
      <p><code>4  struct { /* общие данные производителя и потребителя */</code></p>
      <p><code>5   int buff[NBUFF];</code></p>
      <p><code>6   sem_t mutex, nempty, nstored; /* семафоры, а не указатели */</code></p>
      <p><code>7  } shared;</code></p>
      <p><code>8  void *produce(void *), *consume(void *);</code></p>
      <empty-line/>
      <p><code>9  int</code></p>
      <p><code>10 main(int argc, char **argv)</code></p>
      <p><code>11 {</code></p>
      <p><code>12  pthread_t tid_produce, tid_consume;</code></p>
      <p><code>13  if (argc != 2)</code></p>
      <p><code>14   err_quit("usage: prodcons2 &lt;#items&gt;");</code></p>
      <p><code>15  nitems = atoi(argv[1]);</code></p>
      <p><code>16  /* инициализация трех семафоров */</code></p>
      <p><code>17  Sem_init(&amp;shared.mutex, 0, 1);</code></p>
      <p><code>18  Sem_init(&amp;shared.nempty, 0, NBUFF);</code></p>
      <p><code>19  Sem_init(&amp;shared.nstored, 0, 0);</code></p>
      <p><code>20  Set_concurrency(2);</code></p>
      <p><code>21  Pthread_create(&amp;tid_produce, NULL, produce, NULL);</code></p>
      <p><code>22  Pthread_create(&amp;tid_consume, NULL, consume, NULL);</code></p>
      <p><code>23  Pthread_join(tid_produce, NULL);</code></p>
      <p><code>24  Pthread_join(tid_consume, NULL):</code></p>
      <p><code>25  Sem_destroy(&amp;shared.mutex);</code></p>
      <p><code>26  Sem_destroy(&amp;shared.nempty):</code></p>
      <p><code>27  Sem_destroy(&amp;shared.nstored);</code></p>
      <p><code>28  exit(0);</code></p>
      <p><code>29 }</code></p>
      <empty-line/>
      <p><code>30 void *</code></p>
      <p><code>31 produce(void *arg)</code></p>
      <p><code>32 {</code></p>
      <p><code>33  int i;</code></p>
      <p><code>34  for (i = 0; i &lt; nitems; i++) {</code></p>
      <p><code>35   Sem_wait(&amp;shared.nempty); /* ожидание одного свободного поля */</code></p>
      <p><code>36   Sem_wait(&amp;shared.mutex);</code></p>
      <p><code>37   shared.buff[i % NBUFF] = i; /* помещение i в циклический буфер */</code></p>
      <p><code>38   Sem_post(&amp;shared.mutex);</code></p>
      <p><code>39   Sem_post(&amp;shared.nstored); /* поместили еще один элемент */</code></p>
      <p><code>40  }</code></p>
      <p><code>41  return(NULL);</code></p>
      <p><code>42 }</code></p>
      <empty-line/>
      <p><code>43 void *</code></p>
      <p><code>44 consume(void *arg)</code></p>
      <p><code>45 {</code></p>
      <p><code>46  int i;</code></p>
      <p><code>47  for (i = 0; i &lt; nitems; i++) {</code></p>
      <p><code>48   Sem_wait(&amp;shared.nstored); /* ожидаем появления хотя бы одного готового для обработки элемента */</code></p>
      <p><code>49   Sem_wait(&amp;shared.mutex);</code></p>
      <p><code>50   if (shared.buff[i % NBUFF] != i)</code></p>
      <p><code>51    printf("buff[*d] = *d\n", i, shared.buff[i % NBUFF]);</code></p>
      <p><code>52   Sem_post(&amp;shared.mutex);</code></p>
      <p><code>53   Sem_post(&amp;shared.nempty); /* еще одно пустое поле */</code></p>
      <p><code>54  }</code></p>
      <p><code>55  return(NULL);</code></p>
      <p><code>56 }</code></p>
      <subtitle>Выделение семафоров</subtitle>
      <p>6 Мы объявляем три семафора типа sem_t, и теперь это сами семафоры, а не указатели на них.</p>
      <subtitle>Вызов sem_init</subtitle>
      <p>16-27 Мы вызываем sem_init вместо sem_open* а затем sem_destroy вместо sem_unlink. Вызывать sem_destroy на самом деле не требуется, поскольку программа все равно завершается.</p>
      <p>Остальные изменения обеспечивают передачу указателей на три семафора при вызовах sem_wait и sem_post.</p>
     </section>
    </section>
    <section>
     <title>
      <p>10.9. Несколько производителей, один потребитель</p>
     </title>
     <p>Решение в разделе 10.6 относится к классической задаче с одним производителем и одним потребителем. Новая, интересная модификация программы позволит нескольким производителям работать с одним потребителем. Начнем с решения из листинга 10.11, в котором использовались размещаемые в памяти семафоры. В листинге 10.12 приведены объявления глобальных переменных и функция main.</p>
     <subtitle>Листинг 10.12. Функция main задачи с несколькими производителями</subtitle>
     <p><code>//pxsem/prodcons3.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define NBUFF 10</code></p>
     <p><code>3  #define MAXNTHREADS 100</code></p>
     <empty-line/>
     <p><code>4  int nitems, nproducers; /* только для чтения производителем и потребителем */</code></p>
     <p><code>5  struct { /* общие данные */</code></p>
     <p><code>6   int buff[NBUFF];</code></p>
     <p><code>7   int nput;</code></p>
     <p><code>8   int nputval;</code></p>
     <p><code>9   sem_t mutex, nempty, nstored; /* семафоры, а не указатели */</code></p>
     <p><code>10 } shared;</code></p>
     <empty-line/>
     <p><code>11 void *produce(void *), *consume(void *);</code></p>
     <empty-line/>
     <p><code>12 int</code></p>
     <p><code>13 main(int argc, char **argv)</code></p>
     <p><code>14 {</code></p>
     <p><code>15  int i, count[MAXNTHREADS];</code></p>
     <p><code>16  pthread_t tid_produce[MAXNTHREADS], tid_consume;</code></p>
     <p><code>17  if (argc != 3)</code></p>
     <p><code>18   err_quit("usage: prodcons3 &lt;#items&gt; &lt;#producers&gt;");</code></p>
     <p><code>19  nitems = atoi(argv[1]);</code></p>
     <p><code>20  nproducers = min(atoi(argv[2]), MAXNTHREADS);</code></p>
     <p><code>21  /* инициализация трех семафоров */</code></p>
     <p><code>22  Sem_init(&amp;shared.mutex, 0, 1);</code></p>
     <p><code>23  Sem_init(&amp;shared.nempty, 0, NBUFF);</code></p>
     <p><code>24  Sem_init(&amp;shared.nstored, 0, 0);</code></p>
     <p><code>25  /* создание всех производителей и одного потребителя */</code></p>
     <p><code>26  Set_concurrency(nproducers + 1);</code></p>
     <p><code>27  for (i = 0; i &lt; nproducers; i++) {</code></p>
     <p><code>28   count[i] = 0;</code></p>
     <p><code>29   Pthread_create(&amp;tid_produce[i], NULL, produce, &amp;count[i]);</code></p>
     <p><code>30  }</code></p>
     <p><code>31  Pthread_create(&amp;tid_consume, NULL, consume, NULL);</code></p>
     <p><code>32  /* ожидание завершения всех производителей и потребителя */</code></p>
     <p><code>33  for (i = 0; i &lt; nproducers; i++) {</code></p>
     <p><code>34   Pthread_join(tid_produce[i], NULL);</code></p>
     <p><code>35   printf("count[%d] = %d\n", i, count[i]);</code></p>
     <p><code>36  }</code></p>
     <p><code>37  Pthread_join(tid_consume, NULL);</code></p>
     <p><code>38  Sem_destroy(&amp;shared.mutex);</code></p>
     <p><code>39  Sem_destroy(&amp;shared.nempty);</code></p>
     <p><code>40  Sem_destroy(&amp;shared.nstored);</code></p>
     <p><code>41  exit(0);</code></p>
     <p><code>42 }</code></p>
     <subtitle>Глобальные переменные</subtitle>
     <p>4 Глобальная переменная nitems хранит число элементов, которые должны быть совместно произведены. Переменная nproducers хранит число потоков-производителей. Оба эти значения устанавливаются с помощью аргументов командной строки.</p>
     <subtitle>Общая структура</subtitle>
     <p>5-10 В структуру shared добавляются два новых элемента: nput, обозначающий индекс следующего элемента, куда должен быть помещен объект (по модулю BUFF), и nputval <strong>—</strong>следующее значение, которое будет помещено в буфер. Эти две переменные взяты из нашего решения в листингах 7.1 и 7.2. Они нужны для синхронизации нескольких потоков-производителей.</p>
     <subtitle>Новые аргументы командной строки</subtitle>
     <p>17-20 Два новых аргумента командной строки указывают полное количество элементов, которые должны быть помещены в буфер, и количество потоков-производителей. </p>
     <subtitle>Запуск всех потоков</subtitle>
     <p>21-41 Инициализируем семафоры и запускаем потоки-производители и поток-потребитель. Затем ожидается завершение работы потоков. Эта часть кода практически идентична листингу 7.1.</p>
     <p>В листинге 10.13 приведен текст функции produce, которая выполняется каждым потоком-производителем.</p>
     <subtitle>Листинг 10.13. Функция, выполняемая всеми потоками-производителями</subtitle>
     <p><code>//pxsem/prodcons3.c</code></p>
     <p><code>43 void *</code></p>
     <p><code>44 produce(void *arg)</code></p>
     <p><code>45 {</code></p>
     <p><code>46  for (;;) {</code></p>
     <p><code>47   Sem_wait(&amp;shared.nempty); /* ожидание освобождения поля */</code></p>
     <p><code>48   Sem_wait(&amp;shared.mutex);</code></p>
     <p><code>49   if (shared.nput &gt;= nitems) {</code></p>
     <p><code>50    Sem_post(&amp;shared.nempty);</code></p>
     <p><code>51    Sem_post(&amp;shared.mutex);</code></p>
     <p><code>52    return(NULL); /* готово */</code></p>
     <p><code>53   }</code></p>
     <p><code>54   shared.buff[shared.nput % NBUFF] = shared.nputval;</code></p>
     <p><code>55   shared.nput++;</code></p>
     <p><code>56   shared.nputval++;</code></p>
     <p><code>57   Sem_post(&amp;shared.mutex);</code></p>
     <p><code>58   Sem_post(&amp;shared.nstored); /* еще один элемент */</code></p>
     <p><code>59   *((int *) arg) += 1;</code></p>
     <p><code>60  }</code></p>
     <p><code>61 }</code></p>
     <subtitle>Взаимное исключение между потоками-производителями</subtitle>
     <p>49-53 Отличие от листинга 10.8 в том, что цикл завершается, когда nitems объектов будет помещено в буфер всеми потоками. Обратите внимание, что потоки-производители могут получить семафор nempty в любой момент, но только один производитель может иметь семафор mutex. Это защищает переменные nput и nval от одновременного изменения несколькими производителями.</p>
     <subtitle>Завершение производителей</subtitle>
     <p>50-51 Нам нужно аккуратно обработать завершение потоков-производителей. После того как последний объект помещен в буфер, каждый поток выполняет </p>
     <p><code>Sem_wait(&amp;shared.nempty); /* ожидание пустого поля */</code></p>
     <p>в начале цикла, что уменьшает значение семафора nempty. Но прежде, чем поток будет завершен, он должен увеличить значение этого семафора, потому что он не помещает объект в буфер в последнем проходе цикла. Завершающий работу поток должен также освободить семафор mutex, чтобы другие производители смогли продолжить функционирование. Если мы не увеличим семафор nempty по завершении процесса и если производителей будет больше, чем мест в буфере, лишние потоки будут заблокированы навсегда, ожидая освобождения семафора nempty, и никогда не завершат свою работу.</p>
     <p>Функция consume в листинге 10.14 проверяет правильность всех записей в буфере, выводя сообщение при обнаружении ошибки.</p>
     <subtitle>Листинг 10.14. Функция, выполняемая потоком-потребителем</subtitle>
     <p><code>//pxsem/prodcons3.с</code></p>
     <p><code>62 void *</code></p>
     <p><code>63 consume(void *arg)</code></p>
     <p><code>64 {</code></p>
     <p><code>65  int i;</code></p>
     <p><code>66  for (i = 0; i &lt; nitems; i++) {</code></p>
     <p><code>67   Sem_wait(&amp;shared.nstored); /* ожидание помещения по крайней мере одного элемента в буфер */</code></p>
     <p><code>68   Sem_wait(&amp;shared.mutex);</code></p>
     <p><code>69   if (shared.buff[i % NBUFF] != i)</code></p>
     <p><code>70    printf("error: buff[%d] = %d\n", i, shared.buff[i % NBUFF]);</code></p>
     <p><code>71   Sem_post(&amp;shared.mutex);</code></p>
     <p><code>72   Sem_post(&amp;shared.nempty); /* еще одно пустое поле */</code></p>
     <p><code>73  }</code></p>
     <p><code>74  return(NULL);</code></p>
     <p><code>75 }</code></p>
     <p>Условие завершения единственного потока-потребителя звучит просто: он считает все потребленные объекты и останавливается по достижении nitems.</p>
    </section>
    <section>
     <title>
      <p>10.10. Несколько производителей, несколько потребителей</p>
     </title>
     <p>Следующее изменение, которое мы внесем в нашу пpoгрaммy, будет заключаться в добавлении возможности одновременной работы нескольких потребителей вместе с несколькими производителями. Есть ли смысл в наличии нескольких потребителей — зависит от приложения. Автор видел два примера, в которых использовался этот метод.</p>
     <p>1. Пpoгрaммa преобразования IP-адресов в имена узлов. Каждый потребитель берет IP-адрес, вызывает gethostbyaddr (раздел 9.6 [24]), затем дописывает имя узла к файлу. Поскольку каждый вызов gethostbyaddr обрабатывается неопределенное время, порядок IP-адресов в буфере будет, скорее всего, отличаться от порядка имен узлов в файле, созданном потоками-потребителями. Преимущество этой схемы в параллельности выполнения вызовов gethostbyaddr (каждый из которых может работать несколько секунд) — по одному на каждый поток-потребитель.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Предполагается наличие версии gethostbyaddr, допускающей многократное вхождение, что не всегда верно. Если эта версия недоступна, можно хранить буфер в разделяемой памяти и использовать процессы вместо потоков. </p>
     </cite>
     <p>2. Программа, принимающая дейтаграммы UDP, обрабатывающая их и записывающая результат в базу данных. Каждая дeйтaгрaммa обрабатывается одним потоком-потребителем, которые выполняются параллельно для ускорения процесса. Хотя дейтаграммы записываются в базу данных в порядке, вообще говоря, отличном от порядка их приема, встроенная схема упорядочения записей в базе данных справляется с этой проблемой.</p>
     <p>В листинге 10.15 приведены глобальные переменные программы.</p>
     <subtitle>Листинг 10.15. Глобальные переменные</subtitle>
     <p><code>//pxsem/prodcons4.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define NBUFF 10</code></p>
     <p><code>3  #define MAXNTHREADS 100</code></p>
     <p><code>4  int nitems, nproducers, nconsumers; /* только для чтения */</code></p>
     <p><code>5  struct { /* общие данные производителей и потребителей */</code></p>
     <p><code>6   int buff[NBUFF];</code></p>
     <p><code>7   int nput; /* номер объекта: 0, 1. 2, … */</code></p>
     <p><code>8   int nputval; /* сохраняемое в buff[] значение */</code></p>
     <p><code>9   int nget; /* номер объекта: 0, 1, 2, … */</code></p>
     <p><code>10  int ngetval; /* получаемое из buff[] значение */</code></p>
     <p><code>11  sem_t mutex, nempty, nstored; /* семафоры, а не указатели */</code></p>
     <p><code>12 } shared;</code></p>
     <p><code>13 void *produce(void *), *consume(void *);</code></p>
     <subtitle>Глобальные переменные и общая структура</subtitle>
     <p>4-12 Количество потоков-потребителей является глобальной переменной, устанавливаемой из командной строки. В структуру shared добавилось два новых поля: nget — номер следующего объекта, получаемого одним из потоков-потребителей, и ngetval — соответствующее значение.</p>
     <p>Функция main, текст которой приведен в листинге 10.16, запускает несколько потоков-потребителей и потоков-производителей одновременно.</p>
     <p>19-23 Новый аргумент командной строки указывает количество потоков-потребителей. Для хранения идентификаторов потоков-потребителей выделяется место под специальный массив (tid_consume), а для подсчета обработанных каждым потоком объектов выделяется массив conscount.</p>
     <p>24-50 Создаются несколько потоков-производителей и потребителей, после чего основной поток ждет их завершения.</p>
     <subtitle>Листинг 10.16. Функция main для версии с несколькими производителями и потребителями</subtitle>
     <p><code>//pxsem/prodcons4.с</code></p>
     <p><code>14 int</code></p>
     <p><code>15 main(int argc, char **argv)</code></p>
     <p><code>16 {</code></p>
     <p><code>17  int i, prodcount[MAXNTHREADS], conscount[MAXNTHREADS];</code></p>
     <p><code>18  pthread_t tid_produce[MAXNTHREADS], tid_consume[MAXNTHREADS];</code></p>
     <p><code>19  if (argc != 4)</code></p>
     <p><code>20   err_quit("usage: prodcons4 &lt;#items&gt; &lt;#producers&gt; &lt;#consumers&gt;");</code></p>
     <p><code>21  nitems = atoi(argv[1]);</code></p>
     <p><code>22  nproducers = min(atoi(argv[2]), MAXNTHREADS);</code></p>
     <p><code>23  nconsumers = min(atoi(argv[3]), MAXNTHREADS);</code></p>
     <p><code>24  /* инициализация трех семафоров */</code></p>
     <p><code>25  Sem_init(&amp;shared.mutex, 0, 1);</code></p>
     <p><code>26  Sem_init(&amp;shared.nempty, 0, NBUFF);</code></p>
     <p><code>27  Sem_init(&amp;shared.nstored, 0, 0);</code></p>
     <p><code>28  /* создание производителей и потребителей */</code></p>
     <p><code>29  Set_concurrency(nproducers + nconsumers);</code></p>
     <p><code>30  for (i = 0; i &lt; nproducers; i++) {</code></p>
     <p><code>31   prodcount[i] = 0;</code></p>
     <p><code>32   Pthread_create(&amp;tid_produce[i], NULL, produce, &amp;prodcount[i]);</code></p>
     <p><code>33  }</code></p>
     <p><code>34  for (i = 0; i &lt; nconsumers; i++) {</code></p>
     <p><code>35   conscount[i] = 0;</code></p>
     <p><code>36   Pthread_create(&amp;tid_consume[i], NULL, consume, &amp;conscount[i]);</code></p>
     <p><code>37  }</code></p>
     <p><code>38  /* ожидание завершения всех производителей и потребителей */</code></p>
     <p><code>39  for (i = 0; i &lt; nproducers: i++) {</code></p>
     <p><code>40   Pthread_join(tid_produce[i], NULL);</code></p>
     <p><code>41   printf("producer count[%d] = %d\n", i, prodcount[i]);</code></p>
     <p><code>42  }</code></p>
     <p><code>43  for (i = 0; i &lt; nconsumers; i++) {</code></p>
     <p><code>44   Pthread_join(tid_consume[i], NULL);</code></p>
     <p><code>45   printf("consumer count[%d] = %d\n", i, conscount[i]);</code></p>
     <p><code>46  }</code></p>
     <p><code>47  Sem_destroy(&amp;shared.mutex);</code></p>
     <p><code>48  Sem_destroy(&amp;shared.nempty);</code></p>
     <p><code>49  Sem_destroy(&amp;shared.nstored);</code></p>
     <p><code>50  exit(0);</code></p>
     <p><code>51 }</code></p>
     <p>Функция produce содержит одну новую строку по сравнению с листингом 10.13. В части кода, относящейся к завершению потока-производителя, появляется строка, отмеченная знаком +:</p>
     <p><code> if (shared.nput &gt;= nitems) {</code></p>
     <p><code>+ Sem_post(&amp;shared.nstored); /* даем возможность потребителям завершить работу */</code></p>
     <p><code>  Sem_post(&amp;shared.nempty);</code></p>
     <p><code>  Sem_post(&amp;shared.mutex);</code></p>
     <p><code>  return(NULL); /* готово */</code></p>
     <p><code> }</code></p>
     <p>Снова нам нужно быть аккуратными при обработке завершения процессов-производителей и потребителей. После обработки всех объектов в буфере все потребители блокируются в вызове</p>
     <p><code>Sem_wait(&amp;shared.nstored); /* Ожидание помещения объекта в буфер */</code></p>
     <p>Производителям приходится увеличивать семафор nstored для разблокирования потрeбитeлeй, чтобы они узнали, что работа завершена. Функция consume приведена в листинге 10.17. </p>
     <subtitle>Листинг 10.17. Функция, выполняемая всеми потоками-потребителями</subtitle>
     <p><code>//pxsem/prodcons4.c</code></p>
     <p><code>72 void *</code></p>
     <p><code>73 consume(void *arg)</code></p>
     <p><code>74 {</code></p>
     <p><code>75  int i;</code></p>
     <p><code>76  for (;;) {</code></p>
     <p><code>77   Sem_wait(&amp;shared.nstored); /* ожидание помещения объекта в буфер */</code></p>
     <p><code>78   Sem_wait(&amp;shared.mutex);</code></p>
     <p><code>79   if (shared.nget &gt;= nitems) {</code></p>
     <p><code>80    Sem_post(&amp;shared.nstored);</code></p>
     <p><code>81    Sem_post(&amp;shared.mutex);</code></p>
     <p><code>82    return(NULL); /* готово */</code></p>
     <p><code>83   }</code></p>
     <p><code>84   i = shared.nget % NBUFF;</code></p>
     <p><code>85   if (shared.buff[i] != shared.ngetval)</code></p>
     <p><code>86    printf("error: buff[%d] = %d\n", i, shared.buff[i]);</code></p>
     <p><code>87   shared.nget++;</code></p>
     <p><code>88   shared.ngetval++;</code></p>
     <p><code>89   Sem_post(&amp;shared.mutex);</code></p>
     <p><code>90   Sem_post(&amp;shared.nempty); /* освобождается место для элемента */</code></p>
     <p><code>91   *((int *) arg) += 1;</code></p>
     <p><code>92  }</code></p>
     <p><code>93 }</code></p>
     <subtitle>Завершение потоков-потребителей</subtitle>
     <p>79-83 Функция consume сравнивает nget и nitems, чтобы узнать, когда следует остановиться (аналогично функции produce). Обработав последний объект в буфере, потоки-потребители блокируются, ожидая изменения семафора nstored. Когда завершается очередной поток-потребитель, он увеличивает семафор nstored, давая возможность завершить работу другому потоку-потребителю.</p>
    </section>
    <section>
     <title>
      <p>10.11. Несколько буферов</p>
     </title>
     <p>Во многих программах, обрабатывающих какие-либо данные, можно встретить цикл вида</p>
     <p><code>while ((n = read(fdin, buff, BUFFSIZE)) &gt; 0) {</code></p>
     <p><code> /* обработка данных */</code></p>
     <p><code> write(fdout, buff, n);</code></p>
     <p><code>}</code></p>
     <p>Например, программы, обрабатывающие текстовые файлы, считывают строку из входного файла, выполняют с ней некоторые действия, а затем записывают строку в выходной файл. Для текстовых файлов вызовы read и write часто заменяются на функции стандартной библиотеки ввода-вывода fgets и fputs.</p>
     <p>На рис. 10.11 изображена иллюстрация к такой схеме. Здесь функция reader считывает данные из входного файла, а функция writer записывает данные в выходной файл. Используется один буфер.</p>
     <image l:href="#Any2FbImgLoader173"/>
     <p>Рис. 10.10. Процесс считывает данные в буфер, а потом записывает его содержимое в другой файл</p>
     <empty-line/>
     <image l:href="#Any2FbImgLoader174"/>
     <p>Рис. 10.11. Один процесс, считывающий данные в буфер и записывающий их в файл</p>
     <empty-line/>
     <p>На рис. 10.10 приведена временная диаграмма работы такой программы. Числа слева проставлены в условных единицах времени. Предполагается, что операция чтения занимает 5 единиц, записи — 7, а обработка данных между считыванием и записью требует 2 единицы времени.</p>
     <p>Можно изменить это приложение, разделив процесс на отдельные потоки, как показано на рис. 10.12. Здесь используется два потока (а не процесса), поскольку глобальный буфер автоматически разделяется между ними. Мы могли бы разделить приложение и на два процесса, но это потребовало бы использования разделяемой памяти, с которой мы еще не знакомы.</p>
     <image l:href="#Any2FbImgLoader177"/>
     <p>Рис. 10.12. Разделение копирования файла между двумя потоками</p>
     <empty-line/>
     <p>Разделение операций между потоками (или процессами) требует использования какой-либо формы уведомления между ними. Считывающий поток должен уведомлять записывающий о готовности буфера к операции записи, а записывающий должен уведомлять считывающий о том, что буфер пуст и его можно заполнять снова. На рис. 10.13 изображена временная диаграмма для новой схемы. </p>
     <image l:href="#Any2FbImgLoader179"/>
     <p>Рис. 10.13. Копирование файла двумя потоками</p>
     <empty-line/>
     <p>Предполагается, что для обработки данных в буфере требуется две единицы времени. Важно отметить, что разделение чтения и записи между двумя потоками ничуть не ускорило выполнение операции копирования в целом. Мы не выиграли в скорости, мы просто распределили выполнение задачи между двумя потоками (или процессами).</p>
     <p>В этих диаграммах мы игнорируем множество тонкостей. Например, большая часть ядер Unix выявляет операцию последовательного считывания файла и осуществляет асинхронное упреждающее чтение следующего блока данных еще до поступления запроса. Это может ускорить работу процесса, считывающего данные. Мы также игнорируем влияние других процессов на наши считывающий и записывающий потоки, а также влияние алгоритмов разделения времени, реализованных в ядре.</p>
     <p>Следующим шагом будет использование двух потоков (или процессов) и двух буферов. Это называется классическим решением с двойной буферизацией; схема его изображена на рис. 10.14.</p>
     <image l:href="#Any2FbImgLoader180"/>
     <p>Рис. 10.14. Копирование файла двумя потоками с двумя буферами</p>
     <empty-line/>
     <p>На нашем рисунке считывающий поток помещает данные в первый буфер, а записывающий берет их из второго. После этого потоки меняются местами.</p>
     <p>На рис. 10.15 изображена временная диаграмма процесса с двойной буферизацией. Считывающий поток помещает данные в буфер № 1, а затем уведомляет записывающий о том, что буфер готов к обработке. Затем считывающий процесс помещает данные в буфер № 2, а записывающий берет их из буфера № 1.</p>
     <p>В любом случае, мы ограничены скоростью выполнения самой медленной операции — операции записи. После выполнения первых двух операций считывания серверу приходится ждать две дополнительные единицы времени, составляющие разницу в скорости выполнения операций чтения и записи. Тем не менее для нашего гипотетического примера полное время работы будет сокращено почти вдвое.</p>
     <p>Обратите внимание, что операции записи выполняются так быстро, как только возможно. Они разделены промежутками времени всего лишь в 2 единицы, тогда как в предыдущих примерах между ними проходило 9 единиц времени (рис. 10.10 и 10.13). Это может оказаться выгодным при работе с некоторыми устройствами типа накопителей на магнитной ленте, которые функционируют быстрее, если данные записываются с максимально возможной скоростью (это называется потоковым режимом — streaming mode).</p>
     <image l:href="#Any2FbImgLoader183"/>
     <p>Рис. 10.15. Процесс с двойной буферизацией</p>
     <empty-line/>
     <p>Интересно, что задача с двойной буферизацией представляет собой лишь частный случай общей задачи производителей и потребителей.</p>
     <p>Изменим нашу программу так, чтобы использовать несколько буферов. Начнем с решения из листинга 10.11, в котором использовались размещаемые в памяти семафоры. Мы получим даже не двойную буферизацию, а работу с произвольным числом буферов (задается NBUFF). В листинге 10.18 даны глобальные переменные и функция main.</p>
     <subtitle>Листинг 10.18. Глобальные переменные и функция main</subtitle>
     <p><code>//pxsem/mycat2.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define NBUFF 8</code></p>
     <empty-line/>
     <p><code>3  struct { /* общие данные */</code></p>
     <p><code>4   struct {</code></p>
     <p><code>5    char data[BUFFSIZE]; /* буфер */</code></p>
     <p><code>6    ssize_t n; /* объем буфера */</code></p>
     <p><code>7   } buff[NBUFF]; /* количество буферов */</code></p>
     <p><code>8   sem_t mutex, nempty, nstored; /* семафоры, а не указатели */</code></p>
     <p><code>9  } shared;</code></p>
     <p><code>10 int fd; /* входной файл, копируемый в стандартный поток вывода */</code></p>
     <p><code>11 void *produce(void *), *consume(void *);</code></p>
     <empty-line/>
     <p><code>12 int</code></p>
     <p><code>13 main(int argc, char **argv)</code></p>
     <p><code>14 {</code></p>
     <p><code>15  pthread_t tid_produce, tid_consume;</code></p>
     <p><code>16  if (argc != 2)</code></p>
     <p><code>17   err_quit("usage: mycat2 &lt;pathname&gt;");</code></p>
     <p><code>18  fd = Open(argv[1], O_RDONLY);</code></p>
     <p><code>19  /* инициализация трех семафоров */</code></p>
     <p><code>20  Sem_init(&amp;shared.mutex, 0, 1);</code></p>
     <p><code>21  Sem_init(&amp;shared.nempty, 0, NBUFF);</code></p>
     <p><code>22  Sem_init(&amp;shared.nstored, 0, 0);</code></p>
     <p><code>23  /* один производитель, один потребитель */</code></p>
     <p><code>24  Set_concurrency(2);</code></p>
     <p><code>25  Pthread_create(&amp;tid_produce, NULL, produce, NULL); /* reader thread */</code></p>
     <p><code>26  Pthread_create(&amp;tid_consume, NULL, consume, NULL); /* writer thread */</code></p>
     <p><code>27  Pthread_join(tid_produce, NULL);</code></p>
     <p><code>28  Pthread_join(tid_consume, NULL);</code></p>
     <p><code>29  Sem_destroy(&amp;shared.mutex);</code></p>
     <p><code>30  Sem_destroy(&amp;shared.nempty);</code></p>
     <p><code>31  Sem_destroy(&amp;shared.nstored);</code></p>
     <p><code>32  exit(0);</code></p>
     <p><code>33 }</code></p>
     <subtitle>Объявление нескольких буферов</subtitle>
     <p>2-9 Структура shared содержит массив структур buff, которые состоят из буфера и его счетчика. Мы создаем NBUFF таких буферов.</p>
     <subtitle>Открытие входного файла</subtitle>
     <p>18 Аргумент командной строки интерпретируется как имя файла, который копируется в стандартный поток вывода.</p>
     <p>В листинге 10.19 приведен текст функций produce и consume.</p>
     <subtitle>Листинг 10.19. Функции produce и consume</subtitle>
     <p><code>//pxsem/mycat2.c</code></p>
     <p><code>34 void *</code></p>
     <p><code>35 produce(void *arg)</code></p>
     <p><code>36 {</code></p>
     <p><code>37  int i;</code></p>
     <p><code>38  for (i = 0;;) {</code></p>
     <p><code>39   Sem_wait(&amp;shared.nempty); /* Ожидание освобождения места в буфере */</code></p>
     <p><code>40   Sem_wait(&amp;shared.mutex);</code></p>
     <p><code>41   /* критическая область */</code></p>
     <p><code>42   Sem_post(&amp;shared.mutex);</code></p>
     <p><code>43   shared.buff[i].n = Read(fd, shared.buff[i].data, BUFFSIZE);</code></p>
     <p><code>44   if (shared.buff[i].n == 0) {</code></p>
     <p><code>45    Sem_post(&amp;shared.nstored); /* еще один объект */</code></p>
     <p><code>46    return(NULL);</code></p>
     <p><code>47   }</code></p>
     <p><code>48   if (++i &gt;= NBUFF)</code></p>
     <p><code>49    i = 0; /* кольцевой буфер */</code></p>
     <p><code>50   Sem_post(&amp;shared.nstored); /* еще один объект */</code></p>
     <p><code>51  }</code></p>
     <p><code>52 }</code></p>
     <empty-line/>
     <p><code>53 void *</code></p>
     <p><code>54 consume(void *arg)</code></p>
     <p><code>55 {</code></p>
     <p><code>56  int i;</code></p>
     <p><code>57  for (i = 0;;) {</code></p>
     <p><code>58   Sem_wait(&amp;shared.nstored); /* ожидание появления объекта для обработки */</code></p>
     <p><code>59   Sem_wait(&amp;shared.mutex);</code></p>
     <p><code>60   /* критическая область */</code></p>
     <p><code>61   Sem_post(&amp;shared.mutex);</code></p>
     <p><code>62   if (shared.buff[i].n == 0)</code></p>
     <p><code>63    return(NULL);</code></p>
     <p><code>64   Write(STDOUT_FILENO, shared.buff[i].data, shared.buff[i].n);</code></p>
     <p><code>65   if (++i &gt;= NBUFF)</code></p>
     <p><code>66    i=0; /* кольцевой буфер */</code></p>
     <p><code>67   Sem_post(&amp;shared.nempty); /* освободилось место для объекта */</code></p>
     <p><code>68  }</code></p>
     <p><code>69 }</code></p>
     <subtitle>Пустая критическая область</subtitle>
     <p>40-42 Критическая область, защищаемая семафором mutex, в данном примере пуста. Если бы буферы данных представляли собой связный список, здесь мы могли бы удалять буфер из списка, не конфликтуя при этом с производителем. Но в нашем примере, где мы просто переходим к следующему буферу с единственным потоком-производителем, защищать нам просто нечего. Тем не менее мы оставляем операции установки и снятия блокировки, подчеркивая, что они могут потребоваться в новых версиях кода.</p>
     <subtitle>Считывание данных и увеличение семафора nstored</subtitle>
     <p>43-49 Каждый раз, когда производитель получает пустой буфер, он вызывает функцию read. При возвращении из read увеличивается семафор nstored, уведомляя потребителя о том, что буфер готов. При возвращении функцией read значения 0 (конец файла) семафор увеличивается, а производитель завершает работу.</p>
     <subtitle>Поток-потребитель</subtitle>
     <p>57-68 Поток-потребитель записывает содержимое буферов в стандартный поток вывода. Буфер, содержащий нулевой объем данных, обозначает конец файла. Как и в потоке-производителе, критическая область, защищенная семафором mutex, пуста.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В разделе 22.3 книги [24] мы разработали пример с несколькими буферами. В этом примере производителем был обработчик сигнала SIGIO, а потребитель представлял собой основной цикл обработки (функцию dg_echo). Разделяемой переменной был счетчик nqueue. Потребитель блокировал сигнал SIGIO на время проверки или изменения счетчика.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>10.12. Использование семафоров несколькими процессами</p>
     </title>
     <p>Правила совместного использования размещаемых в памяти семафоров несколькими процессами просты: сам семафор (переменная типа semt, адрес которой является первым аргументом sem_init) должен находиться в памяти, разделяемой всеми процессами, которые хотят его использовать, а второй аргумент функции sem_init должен быть равен 1.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Эти правила аналогичны требованиям к разделению взаимного исключения, условной переменной или блокировки чтения-записи между процессами: средство синхронизации (переменная типа pthread_mutex_t, pthread_cond_t или pthread_rwlock_t) должно находиться в разделяемой памяти и инициализироваться с атрибутом PTHREAD_PROCESS SHARED.</p>
     </cite>
     <p>Что касается именованных семафоров, процессы всегда могут обратиться к одному и тому же семафору, указав одинаковое имя при вызове sem_open. Хотя указатели, возвращаемые sem_open отдельным процессам, могут быть различны, все функции, работающие с семафорами, будут обращаться к одному и тому же именованному семафору.</p>
     <p>Что произойдет, если мы вызовем функцию sem_open, возвращающую указатель на тип sem_t, а затем вызовем fork? В описании функции fork в стандарте Posix.1 говорится, что «все открытые родительским процессом семафоры будут открыты и в дочернем процессе». Это означает, что нижеследующий код верен:</p>
     <p><code>sem_t *mutex; /* глобальный указатель, копируемый, при вызове fork() */</code></p>
     <p><code>…</code></p>
     <p><code>/* родительский процесс создает именованный семафор */</code></p>
     <p><code>mutex = Sem_open(Px_ipc_name(NAME), O_CREAT | O_EXCL, FILE_MODE, 0);</code></p>
     <p><code>if ((childpid = Fork()) == 0) {</code></p>
     <p><code> /* дочерний процесс */</code></p>
     <p><code> …</code></p>
     <p><code> Sem_wait(mutex);</code></p>
     <p><code> …</code></p>
     <p><code>}</code></p>
     <p><code>/* родительский процесс */</code></p>
     <p><code>…</code></p>
     <p><code>Sem_post(mutex);</code></p>
     <p><code>…</code></p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Причина, по которой следует аккуратно относиться к передаче семафоров при порождении процессов, заключается в том, что состояние семафора может храниться в переменной типа sem_t, но для его работы может требоваться и другая информация (например, дескрипторы файлов). В следующей главе мы увидим, что семафоры System V однозначно определяются их целочисленными идентификаторами, возвращаемыми функцией semget. Любой процесс, которому известен идентификатор, может получить доступ к семафору. Вся информация о семафоре System V хранится в ядре, а целочисленный идентификатор просто указывает номер семафора ядру.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>10.13. Ограничения на семафоры</p>
     </title>
     <section>
      <p>Стандартом Posix определены два ограничения на семафоры:</p>
      <p><strong>&#9632;</strong> SEM_NSEMS_MAX — максимальное количество одновременно открытых семафоров для одного процесса (Posix требует, чтобы это значение было не менее 256);</p>
      <p><strong>&#9632;</strong> SEM_VALUE_MAX — максимальное значение семафора (Posix требует, чтобы оно было не меньше 32767).</p>
      <p>Две эти константы обычно определены в заголовочном файле &lt;unistd.h&gt; и могут быть получены во время выполнения вызовом sysconf, как мы показываем ниже.</p>
     </section>
     <section>
      <title>
       <p>Пример: программа semsysconf</p>
      </title>
      <p>Программа в листинге 10.20 вызывает sysconf и выводит два ограничения на семафоры, зависящие от конкретной реализации. </p>
      <subtitle>Листинг 10.20. Вызов sysconf для получения ограничений на семафоры</subtitle>
      <p><code>//pxsem/semsysconf.с</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2 int</code></p>
      <p><code>3 main(int argc, char **argv)</code></p>
      <p><code>4 {</code></p>
      <p><code>5  printf("SEM_NSEMS_MAX = %ld, SEM_VALUE_MAX = %ld\n",</code></p>
      <p><code>6   Sysconf(_SC_SEM_NSEMS_MAX), Sysconf(_SC_SEM_VALUE_MAX));</code></p>
      <p><code>7  exit(0);</code></p>
      <p><code>8 }</code></p>
      <p>При запуске этой программы в наших двух тестовых системах получим следующий результат:</p>
      <p><code>solaris % <strong>semsysconf</strong></code></p>
      <p><code>SEMS_NSEMS_MAX = 2147483647, SEM_VALUE_MAX = 2147483647</code></p>
      <p><code>alpha % <strong>semsysconf</strong></code></p>
      <p><code>SEMS_NSEMS_MAX = 256, SEM_VALUE_MAX = 32767</code></p>
     </section>
    </section>
    <section>
     <title>
      <p>10.14. Реализация с использованием FIFO</p>
     </title>
     <section>
      <p>Займемся реализацией именованных семафоров Posix с помощью каналов FIFO. Именованный семафор реализуется как канал FIFO с конкретным именем. Неотрицательное количество байтов в канале соответствует текущему значению семафора. Функция sem_post помещает 1 байт в канал, a sem_wait считывает его оттуда (приостанавливая выполнение процесса, если канал пуст, а именно этого мы и хотим). Функция sem_open создает канал FIFO, если указан флаг O_CREAT; открывает его дважды (один раз на запись, другой — на чтение) и при создании нового канала FIFO помещает в него некоторое количество байтов, указанное в качестве начального значения.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Этот и последующие разделы данной главы содержат усложненный материал, который можно при первом чтении пропустить.</p>
      </cite>
      <p>Приведем текст нашего заголовочного файла semaphore.h, определяющего фундаментальный тип sem_t (листинг 10.21).</p>
      <subtitle>Листинг 10.21. Заголовочный файл semaphore.h</subtitle>
      <p><code>//my_pxsem_fifo/semaphore.h</code></p>
      <p><code>1  /* фундаментальный тип */</code></p>
      <p><code>2  typedef struct {</code></p>
      <p><code>3   int sem_fd[2]; /* два дескриптора fd: [0] для чтения, [1] для записи */</code></p>
      <p><code>4   int sem_magic; /* магическое число */</code></p>
      <p><code>5  } mysem_t;</code></p>
      <empty-line/>
      <p><code>6  #define SEM_MAGIC 0x89674523</code></p>
      <empty-line/>
      <p><code>7  #ifdef SEM_FAILED</code></p>
      <p><code>8  #undef SEM_FAILED</code></p>
      <p><code>9  #define SEM_FAILED ((mysem_t *)(-1)) /* чтобы компилятор не выдавал предупреждений*/</code></p>
      <empty-line/>
      <p><code>10 #endif</code></p>
      <subtitle>Тип данных sem_t</subtitle>
      <p>1-5 Новая структура данных содержит два дескриптора, один из которых предназначен для чтения из FIFO, а другой — для записи. Для единообразия мы храним оба дескриптора в массиве из двух элементов, в котором первый дескриптор всегда открыт на чтение, а второй — на запись.</p>
      <p>Поле sem_magiс содержит значение SEM_MAGIC, если структура проинициализирована. Это значение проверяется всеми функциями, которым передается указатель на тип sem_t, чтобы гарантировать, что передан был действительно указатель на заранее инициализированную структуру, а не на произвольную область памяти. При закрытии семафора этому полю присваивается значение 0. Этот метод хотя и не совершенен, но дает возможность обнаружить некоторые ошибки при написании программ.</p>
     </section>
     <section>
      <title>
       <p>Функция sem_open</p>
      </title>
      <p>В листинге 10.22 приведен текст функции sem_open, которая создает новый семафор или открывает существующий.</p>
      <subtitle>Листинг 10.22. Функция sem_open</subtitle>
      <p><code>//my_pxsem_fifo/sem_open.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <p><code>3  #include &lt;stdarg.h&gt; /* для произвольного списка аргументов */</code></p>
      <empty-line/>
      <p><code>4  mysem_t *</code></p>
      <p><code>5  mysem_open(const char *pathname, int oflag, …)</code></p>
      <p><code>6  {</code></p>
      <p><code>7   int i, flags, save_errno;</code></p>
      <p><code>8   char c;</code></p>
      <p><code>9   mode_t mode;</code></p>
      <p><code>10  va_list ap;</code></p>
      <p><code>11  mysem_t *sem;</code></p>
      <p><code>12  unsigned int value;</code></p>
      <p><code>13  if (oflag &amp; O_CREAT) {</code></p>
      <p><code>14   va_start(ap, oflag); /* ар инициализируется последним аргументом */</code></p>
      <p><code>15   mode = va_arg(ap, va_mode_t);</code></p>
      <p><code>16   value = va_arg(ap, unsigned int);</code></p>
      <p><code>17   va_end(ap);</code></p>
      <p><code>18   if (mkfifo(pathname, mode) &lt; 0) {</code></p>
      <p><code>19    if (errno == EEXIST &amp;&amp; (oflag &amp; O_EXCL) == 0)</code></p>
      <p><code>20     oflag &amp;= ~O_CREAT; /* уже существует, OK */</code></p>
      <p><code>21    else</code></p>
      <p><code>22     return(SEM_FAILED);</code></p>
      <p><code>23   }</code></p>
      <p><code>24  }</code></p>
      <p><code>25  if ((sem = malloc(sizeof(mysem_t))) == NULL)</code></p>
      <p><code>26   return(SEM_FAILED);</code></p>
      <p><code>27  sem-&gt;sem_fd[0] = sem-&gt;sem_fd[1] = –1;</code></p>
      <p><code>28  if ((sem-&gt;sem_fd[0] = open(pathname, O_RDONLY | O_NONBLOCK)) &lt; 0)</code></p>
      <p><code>29   goto error;</code></p>
      <p><code>30  if ((sem-&gt;sem_fd[1] = open(pathname, O_WRONLY | O_NONBLOCK)) &lt; 0)</code></p>
      <p><code>31   goto error;</code></p>
      <p><code>32  /* отключение неблокируемого режима для sem_fd[0] */</code></p>
      <p><code>33  if ((flags = fcntl(sem-&gt;sem_fd[0], F_GETFL, 0)) &lt; 0)</code></p>
      <p><code>34   goto error;</code></p>
      <p><code>35  flags &amp;= ~O_NONBLOCK;</code></p>
      <p><code>36  if (fcntl(sem-&gt;sem_fd[0], F_SETFL, flags) &lt; 0)</code></p>
      <p><code>37   goto error;</code></p>
      <p><code>38  if (oflag &amp; O_CREAT) { /* инициализация семафора */</code></p>
      <p><code>39   for (i = 0; i &lt; value; i++)</code></p>
      <p><code>40    if (write(sem-&gt;sem_fd[1], &amp;c, 1) != 1)</code></p>
      <p><code>41   goto error;</code></p>
      <p><code>42  }</code></p>
      <p><code>43  sem-&gt;sem_magic = SEM_MAGIC;</code></p>
      <p><code>44  return(sem);</code></p>
      <p><code>45 error:</code></p>
      <p><code>46  save_errno = errno;</code></p>
      <p><code>47  if (oflag &amp; O_CREAT)</code></p>
      <p><code>48   unlink(pathname); /* если мы создали FIFO */</code></p>
      <p><code>49  close(sem-&gt;sem_fd[0]); /* игнорируем ошибку */</code></p>
      <p><code>50  close(sem-&gt;sem_fd[1]); /* игнорируем ошибку */</code></p>
      <p><code>51  free(sem);</code></p>
      <p><code>52  errno = save_errno;</code></p>
      <p><code>53  return(SEM_FAILED);</code></p>
      <p><code>54 }</code></p>
      <subtitle>Создание нового sсемафора</subtitle>
      <p>13-17 Если при вызове указан флаг O_CREAT, должно быть указано четыре аргумента, а не два. Мы вызываем va_start, после чего переменная ар указывает на последний явно указанный аргумент (oflag). Затем мы используем ар и функцию va_arg для получения значений третьего и четвертого аргументов. Работу со списком аргументов переменной длины и использование нашего типа va_mode_t мы обсуждали в связи с листингом 5.17.</p>
      <subtitle>Создание нового канала FIFO</subtitle>
      <p>18-23 Создается новый канал FIFO, имя которого было указано при вызове функции. Как мы отмечали в разделе 4.6, эта функция возвращает ошибку EEXIST, если канал уже существует. Если при вызове sem_open флаг O_EXCL не был указан, мы пропускаем эту ошибку; но нам не нужно будет инициализировать этот канал, так что мы при этом сбрасываем флаг O_CREAT.</p>
      <subtitle>Выделение памяти под тип sem_t и открытие FIFO на чтение и запись</subtitle>
      <p>25-37 Мы выделяем место для типа sem_t, который содержит два дескриптора. Затем мы дважды открываем канал FIFO: один раз только на чтение, а другой — только на запись. При этом мы не хотим блокирования при вызове open, поэтому указываем флаги O_NONBLOCK при открытии очереди только для чтения (вспомните табл. 4.1). Мы также указываем флаг O_NONBLOCK при открытии канала на запись, но это предназначено для обнаружения переполнения (на тот случай, если мы попытаемся записать больше, чем позволяет PIPE_BUF). После открытия канала мы отключаем неблокируемый режим для дескриптора, открытого на чтение.</p>
      <subtitle>Инициализация значения созданного семафора</subtitle>
      <p>38-42 Если мы создали семафор, его нужно проинициализировать, записав в канал FIFO value байтов. Если указанное при вызове значение value превышает определенное реализацией ограничение PIPE_BUF, вызов write после переполнения FIFO вернет ошибку с кодом EAGAIN.</p>
     </section>
     <section>
      <title>
       <p>Функция sem_close</p>
      </title>
      <p>Текст функции sem_close приведен в листинге 10.23.</p>
      <p>11-15 Мы закрываем оба дескриптора и освобождаем память, выделенную под тип sem_t.</p>
      <subtitle>Листинг 10.23. Функция sem_close</subtitle>
      <p><code>//my_pxsem_fifo/sem_close.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_close(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>7    errno = EINVAL;</code></p>
      <p><code>8    return(-1);</code></p>
      <p><code>9   }</code></p>
      <p><code>10  sem-&gt;sem_magic = 0; /* чтобы семафор нельзя было больше использовать */</code></p>
      <p><code>11  if (close(sem-&gt;sem_fd[0]) == –1 || close(sem-&gt;sem_fd[1]) == –1) {</code></p>
      <p><code>12   free(sem);</code></p>
      <p><code>13   return(-1);</code></p>
      <p><code>14  }</code></p>
      <p><code>15  free(sem);</code></p>
      <p><code>16  return(0);</code></p>
      <p><code>17 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_unlink</p>
      </title>
      <p>Функция sem_unlink, текст которой приведен в листинге 10.24, удаляет из файловой системы наш семафор. Она просто вызывает unlink.</p>
      <subtitle>Листинг 10.24. Функция sem_unlink</subtitle>
      <p><code>//my_pxsem_fifo/sem_unlink. с</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <p><code>2 #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3 int</code></p>
      <p><code>4 mysem_unlink(const char *pathname)</code></p>
      <p><code>5 {</code></p>
      <p><code>6  return(unlink(pathname));</code></p>
      <p><code>7 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_post</p>
      </title>
      <p>В листинге 10.25 приведен текст функции sem_post, которая увеличивает значение семафора.</p>
      <p>11-12 Мы записываем один байт в FIFO. Если канал был пуст, это приведет к возобновлению выполнения всех процессов, заблокированных в вызове read для этого канала.</p>
      <subtitle>Листинг 10.25. Функция sem_post</subtitle>
      <p><code>//my_pxsem_fifo/sem_post.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_post(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   char c;</code></p>
      <p><code>7   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno = EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  if (write(sem-&gt;sem_fd[1], &amp;c, 1) == 1)</code></p>
      <p><code>12   return(0);</code></p>
      <p><code>13  return(-1);</code></p>
      <p><code>14 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_wait</p>
      </title>
      <p>Последняя функция для работы с именованными семафорами Posix — sem_wait. Ее текст приведен в листинге 10.26.</p>
      <subtitle>Листинг 10.26. Функция sem_wait</subtitle>
      <p><code>//my_pxsem_fifo/sem_wait.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_wait(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   char c;</code></p>
      <p><code>7   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno = EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  if (read(sem-&gt;sem_fd[0], &amp;c, 1) == 1)</code></p>
      <p><code>12   return(0);</code></p>
      <p><code>13  return(-1);</code></p>
      <p><code>14 }</code> </p>
      <p>11-12 Мы считываем 1 байт из канала FIFO, причем работа приостанавливается, если канал пуст.</p>
      <p>Мы еще не реализовали функцию sem_trywait, но это можно сделать, установив флаг отключения блокировки для канала и используя обычный вызов read. Мы также не реализовали функцию sem_getvalue. В некоторых реализациях при вызове функции stat или fstat возвращается количество байтов в именованном или неименованном канале, причем оно помещается в поле st_size структуры stat. Однако это не гарантируется стандартом Posix и, следовательно, не обязательно будет работать в других системах. Пример реализации этих двух функций для работы с семафорами Posix приведен в следующем разделе.</p>
     </section>
    </section>
    <section>
     <title>
      <p>10.15. Реализация с помощью отображения в память</p>
     </title>
     <section>
      <p>Теперь займемся реализацией именованных семафоров Posix с помощью отображаемых в память файлов вместе со взаимными исключениями и условными переменными Posix. Реализация, аналогичная данной, приведена в разделе В.11.3 Обоснования стандарта IEEE 1996 [8].</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Отображаемые в память файлы описаны в главах 12 и 13. Данный раздел можно отложить, с тем чтобы вернуться к нему после прочтения этих глав. </p>
      </cite>
      <p>Прежде всего приведем текст нашего заголовочного файла semaphore.h (листинг 10.27), в котором определяется фундаментальный тип sem_t.</p>
      <subtitle>Тип sem_t</subtitle>
      <p>1-7 Структура данных семафора содержит взаимное исключение, условную переменную и беззнаковое целое, в котором хранится текущее значение семафора. Как уже говорилось в связи с листингом 10.21, поле sem_magiс получает значение SEM_MAGIC при инициализации структуры.</p>
      <subtitle>Листинг 10.27. Заголовочный файл semaphore.h</subtitle>
      <p><code>//my_pxsem_mmap/semaphore.h</code></p>
      <p><code>1  /* фундаментальный тип */</code></p>
      <p><code>2  typedef struct {</code></p>
      <p><code>3   pthread_mutex_t sem_mutex; /* блокируется при проверке и изменении значения семафора */</code></p>
      <p><code>4   pthread_cond_t sem_cond; /* при изменении нулевого значения */</code></p>
      <p><code>5   unsigned int sem_count; /* значение семафора */</code></p>
      <p><code>6   int sem_magic; /* магическое значение, если семафор открыт */</code></p>
      <p><code>7  } mysem_t;</code></p>
      <empty-line/>
      <p><code>8  #define SEM_MAGIC 0x67458923</code></p>
      <empty-line/>
      <p><code>9  #ifdef SEM_FAILED</code></p>
      <p><code>10 #undef SEM_FAILED</code></p>
      <p><code>11 #define SEM_FAILED ((mysem_t *)(-1)) /* чтобы избежать предупреждений компилятора */</code></p>
      <p><code>12 #endif</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_open</p>
      </title>
      <p>В листинге 10.28 приведен текст первой части функции sem_open, которая может использоваться для создания нового семафора или открытия существующего.</p>
      <subtitle>Листинг 10.28. Функция sem_open: первая половина</subtitle>
      <p><code>//my_pxsem_mmap/sem_open.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <p><code>3  #include &lt;stdarg.h&gt; /* для списков аргументов переменной длины */</code></p>
      <p><code>4  #define MAX_TRIES 10 /* количество попыток инициализации */</code></p>
      <empty-line/>
      <p><code>5  mysem_t *</code></p>
      <p><code>6  mysem_open(const char *pathname, int oflag, …)</code></p>
      <p><code>7  {</code></p>
      <p><code>8   int fd, i, created, save_errno;</code></p>
      <p><code>9   mode_t mode;</code></p>
      <p><code>10  va_list ap;</code></p>
      <p><code>11  mysem_t *sem, seminit;</code></p>
      <p><code>12  struct stat statbuff;</code></p>
      <p><code>13  unsigned int value;</code></p>
      <p><code>14  pthread_mutexattr_t mattr;</code></p>
      <p><code>15  pthread_condattr_t cattr;</code></p>
      <p><code>16  created = 0;</code></p>
      <p><code>17  sem = MAP_FAILED; /* [sic] */</code></p>
      <p><code>18 again:</code></p>
      <p><code>19  if (oflag &amp; O_CREAT) {</code></p>
      <p><code>20   va_start(ap, oflag); /* ар инициализируется последним явно указанным аргументом */</code></p>
      <p><code>21   mode = va_arg(ap, va_mode_t) &amp; ~S_IXUSR;</code></p>
      <p><code>22   value = va_arg(ap, unsigned int);</code></p>
      <p><code>23   va_end(ap);</code></p>
      <p><code>24   /* открываем с указанием флага O_EXCL и установкой бита user-execute */</code></p>
      <p><code>25   fd = open(pathname, oflag | O_EXCL | O_RDWR, mode | S_IXUSR);</code></p>
      <p><code>26   if (fd &lt; 0) {</code></p>
      <p><code>27    if (errno == EEXIST &amp;&amp; (oflag &amp; O_EXCL) == 0)</code></p>
      <p><code>28     goto exists; /* уже существует. OK */</code></p>
      <p><code>29    else</code></p>
      <p><code>30     return(SEM_FAILED);</code></p>
      <p><code>31   }</code></p>
      <p><code>32   created = 1;</code></p>
      <p><code>33   /* кто создает файл, тот его и инициализирует */</code></p>
      <p><code>34   /* установка размера файла */</code></p>
      <p><code>35   bzero(&amp;seminit, sizeof(seminit));</code></p>
      <p><code>36   if (write(fd, &amp;seminit, sizeof(seminit)) != sizeof(seminit))</code></p>
      <p><code>37    goto err;</code></p>
      <p><code>38   /* отображение файла в память */</code></p>
      <p><code>39   sem = mmap(NULL, sizeof(mysem_t), PROT_READ | PROT_WRITE,</code></p>
      <p><code>40    MAP_SHARED, fd, 0);</code></p>
      <p><code>41   if (sem == MAP_FAILED)</code></p>
      <p><code>42    goto err;</code></p>
      <p><code>43   /* инициализация взаимного исключения, условной переменной, значения семафора */</code></p>
      <p><code>44   if ((i = pthread_mutexattr_init(&amp;mattr)) != 0)</code></p>
      <p><code>45    goto pthreaderr;</code></p>
      <p><code>46   pthread_mutexattr_setpshared(&amp;mattr, PTHREAD_PROCESS_SHARED);</code></p>
      <p><code>47   i = pthread_mutex_init(&amp;sem-&gt;sem_mutex, &amp;mattr);</code></p>
      <p><code>48   pthread_mutexattr_destroy(&amp;mattr); /* не забыть удалить */</code></p>
      <p><code>49   if (i != 0)</code></p>
      <p><code>50    goto pthreaderr;</code></p>
      <p><code>51   if ((i = pthread_condattr_init(&amp;cattr)) != 0)</code></p>
      <p><code>52    goto pthreaderr;</code></p>
      <p><code>53   pthread_condattr_setpshared(&amp;cattr, PTHREAD_PROCESS_SHARED);</code></p>
      <p><code>54   i = pthread_cond_init(&amp;sem-&gt;sem_cond, &amp;cattr);</code></p>
      <p><code>55   pthread_condattr_destroy(&amp;cattr); /* не забыть удалить */</code></p>
      <p><code>56   if (i != 0)</code></p>
      <p><code>57    goto pthreaderr;</code></p>
      <p><code>58   if ((sem-&gt;sem_count = value) &gt; sysconf(_SC_SEM_VALUE_MAX)) {</code></p>
      <p><code>59    errno = EINVAL;</code></p>
      <p><code>60    goto err;</code></p>
      <p><code>61   }</code></p>
      <p><code>62   /* инициализация завершена, снимаем бит user-execute */</code></p>
      <p><code>63   if (fchmod(fd, mode) == –1)</code></p>
      <p><code>64    goto err;</code></p>
      <p><code>65   close(fd);</code></p>
      <p><code>66   sem-&gt;sem_magic = SEM_MAGIC;</code></p>
      <p><code>67   return(sem);</code></p>
      <p><code>68  }</code></p>
      <subtitle>Работа со списком аргументов переменной длины</subtitle>
      <p>19-23 Если при вызове функции указан флаг O_CREAT, мы должны принять четыре аргумента, а не два. Работа со списком аргументов переменной длины с помощью типа va_mode_t уже обсуждалась в связи с листингом 5.17, где мы использовали метод, аналогичный примененному здесь. Мы сбрасываем бит user-execute переменной mode (S_IXUSR) по причинам, которые вскоре будут раскрыты. Создается файл с указанным именем, и для него устанавливается бит user-execute.</p>
      <subtitle>Создание нового семафора и обработка потенциальной ситуации гонок</subtitle>
      <p>24-32 Если бы при указании флага O_CREAT мы просто открывали файл, отображали в память его содержимое и инициализировали поля структуры sem_t, у нас возникла бы ситуация гонок. Эта ситуация также уже обсуждалась в связи с листингом 5.17, и там мы воспользовались тем же методом, что и сейчас. Такая же ситуация гонок встретится нам, когда мы будем разбираться с листингом 10.37.</p>
      <subtitle>Установка размера файла</subtitle>
      <p>33-37 Мы устанавливаем размер созданного файла, записывая в него заполненную нулями структуру. Поскольку мы знаем, что только что созданный файл имеет размер 0, для установки его размера мы вызываем именно write, но не ftruncate, потому что, как мы отмечаем в разделе 13.3, Posix не гарантирует, что ftruncate срабатывает при увеличении размера обычных файлов. </p>
      <subtitle>Отображение содержимого файла в память</subtitle>
      <p>38-42 Файл отображается в память вызовом mmap. Этот файл будет содержать текущее значение структуры типа sem_t, хотя, поскольку мы только что отобразили файл в память, мы обращаемся к нему через указатель, возвращаемый mmap, и никогда не вызываем read или write.</p>
      <subtitle>Инициализация структуры sem_t</subtitle>
      <p>43-57 Мы инициализируем три поля структуры sem_t: взаимное исключение, условную переменную и значение семафора. Поскольку именованный семафор Posix может совместно использоваться всеми процессами с соответствующими правами, которым известно его имя, при инициализации взаимного исключения и условной переменной необходимо указать атрибут PTHREAD_PROCESS_SHARED. Чтобы осуществить это для взаимного исключения, нужно сначала проинициализировать атрибуты, вызвав pthread_mutexattr_init, затем установить атрибут совместного использования потоками, вызвав pthread_mutexattr_setpshared, а затем проинициализировать взаимное исключение вызовом pthread_mutex_init. Аналогичные действия придется выполнить и для условной переменной. Необходимо аккуратно уничтожать переменные, в которых хранятся атрибуты, при возникновении ошибок.</p>
      <subtitle>Инициализация значения семафора</subtitle>
      <p>58-61 Наконец мы помещаем в файл начальное значение семафора. Предварительно мы сравниваем его с максимально разрешенным значением семафора, которое может быть получено вызовом sysconf (раздел 10.13).</p>
      <subtitle>Сброс бита user-execute</subtitle>
      <p>62-67 После инициализации семафора мы сбрасываем бит user-execute. Это указывает на то, что семафор был успешно проинициализирован. Затем мы закрываем файл вызовом close, поскольку он уже был отображен в память и нам не нужно держать его открытым.</p>
      <p>В листинге 10.29 приведен текст второй половины функции sem_open. Здесь возникает ситуация гонок, обрабатываемая так же, как уже обсуждавшаяся в связи с листингом 5.19.</p>
      <subtitle>Листинг 10.29. Функция sem_open: вторая половина</subtitle>
      <p><code>//my_pxsem_mmap/sem_open.с</code></p>
      <p><code>69  exists:</code></p>
      <p><code>70   if ((fd = open(pathname, O_RDWR)) &lt; 0) {</code></p>
      <p><code>71    if (errno == ENOENT &amp;&amp; (oflag &amp; O_CREAT))</code></p>
      <p><code>72     goto again;</code></p>
      <p><code>73    goto err;</code></p>
      <p><code>74   }</code></p>
      <p><code>75   sem = mmap(NULL, sizeof(mysem_t), PROT_READ | PROT_WRITE,</code></p>
      <p><code>76    MAP_SHARED, fd, 0);</code></p>
      <p><code>77   if (sem == MAP_FAILED)</code></p>
      <p><code>78    goto err;</code></p>
      <p><code>79   /* удостоверимся, что инициализация завершена */</code></p>
      <p><code>80   for (i = 0; i &lt; MAX TRIES; i++) {</code></p>
      <p><code>81    if (stat(pathname, &amp;statbuff) == –1) {</code></p>
      <p><code>82     if (errno == ENOENT &amp;&amp; (oflag &amp; O_CREAT)) {</code></p>
      <p><code>83      close(fd);</code></p>
      <p><code>84      goto again;</code></p>
      <p><code>85     }</code></p>
      <p><code>86     goto err;</code></p>
      <p><code>87    }</code></p>
      <p><code>88    if ((statbuff.st_mode &amp; S_IXUSR) == 0) {</code></p>
      <p><code>89     close(fd);</code></p>
      <p><code>90     sem-&gt;sem_magic = SEM_MAGIC;</code></p>
      <p><code>91     return(sem);</code></p>
      <p><code>92    }</code></p>
      <p><code>93    sleep(1);</code></p>
      <p><code>94   }</code></p>
      <p><code>95   errno = ETIMEDOUT;</code></p>
      <p><code>96   goto err;</code></p>
      <p><code>97  pthreaderr:</code></p>
      <p><code>98   errno = i;</code></p>
      <p><code>99  err:</code></p>
      <p><code>100  /* не даем вызовам unlink и munmap изменить код errno */</code></p>
      <p><code>101  save_errno = errno;</code></p>
      <p><code>102  if (created)</code></p>
      <p><code>103   unlink(pathname);</code></p>
      <p><code>104  if (sem != MAP_FAILED)</code></p>
      <p><code>105   munmap(sem, sizeof(mysem_t));</code></p>
      <p><code>106  close(fd);</code></p>
      <p><code>107  errno = save_errno;</code></p>
      <p><code>108  return(SEM_FAILED);</code></p>
      <p><code>109 }</code></p>
      <subtitle>Открытие существующего семафора</subtitle>
      <p>69-78 Здесь мы завершаем нашу работу, если либо не указан флаг O_CREAT, либо он указан, но семафор уже существует. В том и в другом случае мы открываем существующий семафор. Мы открываем файл вызовом open для чтения и записи, а затем отображаем его содержимое в адресное пространство процесса вызовом mmap.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Теперь легко понять, почему в Posix.1 сказано, что «обращение к копиям семафора приводит к неопределенным результатам». Если именованный семафор реализован через отображение файла в память, он отображается в адресное пространство всех процессов, в которых он открыт. Это осуществляется функцией sem_open для каждого процесса в отдельности. Изменения, сделанные одним процессом (например, изменение счетчика семафора), становятся доступны другим процессам через отображение в память. Если мы сделаем свою собственную копию структуры sem_t, она уже не будет общей для всех процессов. Хотя нам и может показаться, что вызовы срабатывают (функции для работы с семафором не будут возвращать ошибок, по крайней мере до вызова sem_close, которая не сможет отключить отображение для копии отображенного файла), с другими процессами мы при этом взаимодействовать не сможем. Однако заметьте (табл. 1.4), что области памяти с отображаемыми файлами передаются дочерним процессам при вызове fork, поэтому создание копии семафора ядром при порождении нового процесса проблем не вызовет. </p>
      </cite>
      <subtitle>Удостоверимся, что семафор проинициализирован</subtitle>
      <p>79-96 Мы должны подождать, пока семафор не будет проинициализирован (если несколько потоков пытаются создать семафор приблизительно одновременно). Для этого мы вызываем stat и проверяем биты разрешений файла (поле st_mode структуры stat). Если бит user-execute снят, структура успешно проинициализирована.</p>
      <subtitle>Возврат кодов ошибок</subtitle>
      <p>97-108 При возникновении ошибки нужно аккуратно вернуть ее код.</p>
     </section>
     <section>
      <title>
       <p>Функция sem_close</p>
      </title>
      <p>В листинге 10.30 приведен текст нашей функции sem_close, которая просто вызывает munmap для отображенного в память файла. Если вызвавший процесс продолжит пользоваться указателем, который был ранее возвращен sem_open, он получит сигнал SIGSEGV.</p>
      <subtitle>Листинг 10.30. Функция sem_close</subtitle>
      <p><code>//my_pxsem_mmap/sem_close. с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_close(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>7    errno = EINVAL;</code></p>
      <p><code>8    return(-1);</code></p>
      <p><code>9   }</code></p>
      <p><code>10  if (munmap(sem, sizeof(mysem_t)) == –1)</code></p>
      <p><code>11  return(-1);</code></p>
      <p><code>12  return(0);</code></p>
      <p><code>13 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_unlink</p>
      </title>
      <p>Текст функции sem_unlink приведен в листинге 10.31. Она просто удаляет файл, через который реализован данный семафор, вызывая функцию unlink.</p>
      <subtitle>Листинг 10.31. Функция sem_unlink</subtitle>
      <p><code>//my_pxsem_mmap/sem_unlink.с</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <p><code>2 #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3 int</code></p>
      <p><code>4 mysem_unlink(const char *pathname)</code></p>
      <p><code>5 {</code></p>
      <p><code>6  if (unlink(pathname) == –1)</code></p>
      <p><code>7   return(-1);</code></p>
      <p><code>8  return(0);</code></p>
      <p><code>9 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_post</p>
      </title>
      <p>В листинге 10.32 приведен текст функции sem_post, которая увеличивает значение семафора, возобновляя выполнение всех процессов, заблокированных в ожидании этого события.</p>
      <subtitle>Листинг 10.32. Функция sem_post</subtitle>
      <p><code>//my_pxsem_mmap/sem_post.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_post(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int n;</code></p>
      <p><code>7   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno = EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  if ((n = pthread_mutex_lock(&amp;sem-&gt;sem_mutex)) != 0) {</code></p>
      <p><code>12   errno = n;</code></p>
      <p><code>13   return(-1);</code></p>
      <p><code>14  }</code></p>
      <p><code>15  if (sem-&gt;sem_count == 0)</code></p>
      <p><code>16   pthread_cond_signal(&amp;sem-&gt;sem_cond);</code></p>
      <p><code>17  sem-&gt;sem_count++;</code></p>
      <p><code>18  pthread_mutex_unlock(&amp;sem-&gt;sem_mutex);</code></p>
      <p><code>19  return(0);</code></p>
      <p><code>20 }</code></p>
      <p>11-18 Прежде чем работать со структурой, нужно заблокировать соответствующее взаимное исключение. Если значение семафора изменяется с 0 на 1, нужно вызвать pthread_cond_signal, чтобы возобновилось выполнение одного из процессов, зарегистрированных на уведомление по данной условной переменной.</p>
     </section>
     <section>
      <title>
       <p>Функция sem_wait</p>
      </title>
      <p>В листинге 10.33 приведен текст функции sem_wait, которая ожидает изменения значения семафора с 0 на положительное, после чего уменьшает его на 1.</p>
      <subtitle>Листинг 10.33. Функция sem_wait</subtitle>
      <p><code>//my_pxsem_mmap/sem_wait.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_wait(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int n;</code></p>
      <p><code>7   if (setn-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno = EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  if ((n = pthread_mutex_lock(&amp;sem-&gt;sem_mutex)) != 0) {</code></p>
      <p><code>12   errno = n;</code></p>
      <p><code>13   return(-1);</code></p>
      <p><code>14  }</code></p>
      <p><code>15  while (sem-&gt;sem_count == 0)</code></p>
      <p><code>16   pthread_cond_wait(&amp;sem-&gt;sem_cond, &amp;sem-&gt;sem_mutex);</code></p>
      <p><code>17  sem-&gt;sem_count--;</code></p>
      <p><code>18  pthread_mutex_unlock(&amp;sem-&gt;sem_mutex);</code></p>
      <p><code>19  return(0);</code></p>
      <p><code>20 }</code></p>
      <p>11-18 Прежде чем работать с семафором, нужно заблокировать соответствующее взаимное исключение. Если значение семафора 0, выполнение процесса приостанавливается в вызове pthread_cond_wait до тех пор, пока другой процесс не вызовет pthread_cond_signal для этого семафора, изменив его значение с 0 на 1. После того как значение становится ненулевым, мы уменьшаем его на 1 и разблокируем взаимное исключение.</p>
     </section>
     <section>
      <title>
       <p>Функция sem_trywait</p>
      </title>
      <p>В листинге 10.34 приведен текст функции sem_trywait, которая представляет собой просто неблокируемый вариант функции sem_wait.</p>
      <p>11-22 Мы блокируем взаимное исключение и проверяем значение семафора. Если оно положительно, мы вычитаем из него 1 и возвращаем вызвавшему процессу код 0. В противном случае возвращается –1, а переменной errno присваивается код ошибки EAGAIN.</p>
      <subtitle>Листинг 10.34. Функция sem_trywait</subtitle>
      <p><code>//my_pxsem_nmap/sem_trywait.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_trywait(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int n, rc;</code></p>
      <p><code>7   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno = EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  if ((n = pthread_mutex_lock(&amp;sem-&gt;sem_mutex)) != 0) {</code></p>
      <p><code>12   errno = n;</code></p>
      <p><code>13   return(-1);</code></p>
      <p><code>14  }</code></p>
      <p><code>15  if (sem-&gt;sem_count &gt; 0) {</code></p>
      <p><code>16   sem-&gt;sem_count--;</code></p>
      <p><code>17   rc = 0;</code></p>
      <p><code>18  } else {</code></p>
      <p><code>19   rc = –1;</code></p>
      <p><code>20   errno = EAGAIN;</code></p>
      <p><code>21  }</code></p>
      <p><code>22  pthread_mutex_unlock(&amp;sem-&gt;sem_mutex);</code></p>
      <p><code>23  return(rc);</code></p>
      <p><code>24 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_getvalue</p>
      </title>
      <p>В листинге 10.35 приведен текст последней функции в этой реализации — sem_getvalue. Она возвращает текущее значение семафора.</p>
      <p>11-16 Мы блокируем соответствующее взаимное исключение и считываем значение семафора.</p>
      <subtitle>Листинг 10.35. Функция sem_getvalue</subtitle>
      <p><code>//my_pxsem_mmap/sem_getvalue.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_getvalue(mysem_t *sem, int *pvalue)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int n;</code></p>
      <p><code>7   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno = EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  if ((n = pthread_mutex_lock(&amp;sem-&gt;sem_mutex)) != 0) {</code></p>
      <p><code>12   errno = n;</code></p>
      <p><code>13   return(-1);</code></p>
      <p><code>14  }</code></p>
      <p><code>15  *pvalue = sem-&gt;sem_count;</code></p>
      <p><code>16  pthread_mutex_unlock(&amp;sem-&gt;sem_mutex);</code></p>
      <p><code>17  return(0);</code></p>
      <p><code>18 }</code></p>
      <p>Из этой реализации видно, что семафорами пользоваться проще, чем взаимными исключениями и условными переменными.</p>
     </section>
    </section>
    <section>
     <title>
      <p>10.16. Реализация с использованием семафоров System V</p>
     </title>
     <section>
      <p>Приведем еще один пример реализации именованных семафоров Posix — на этот раз с использованием семафоров System V. Поскольку семафоры System V появились раньше, чем семафоры Posix, эта реализация позволяет использовать последние в системах, где их поддержка не предусмотрена производителем.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Семафоры System V описаны в главе 11. Этот раздел можно пропустить при первом чтении, с тем чтобы вернуться к нему по прочтении 11 главы.</p>
      </cite>
      <p>Начнем, как обычно, с заголовочного файла semaphore.h (листинг 10.36), который определяет фундаментальный тип данных sem_t.</p>
      <subtitle>Листинг 10.36. Заголовочный файл semaphore.h</subtitle>
      <p><code>//my_pxsem_svsem/semaphore.h</code></p>
      <p><code>1  /* фундаментальный тип данных */</code></p>
      <p><code>2  typedef struct {</code></p>
      <p><code>3   int sem_semid; /* идентификатор семафора System V */</code></p>
      <p><code>4   int sem_magic; /* магическое значение, если семафор открыт */</code></p>
      <p><code>5  } mysem_t;</code></p>
      <empty-line/>
      <p><code>6  #define SEM_MAGIC 0x45678923</code></p>
      <empty-line/>
      <p><code>7  #ifdef SEM_FAILED</code></p>
      <p><code>8  #undef SEM_FAILED</code></p>
      <p><code>9  #define SEM_FAILED ((mysem_t *)(-1)) /* исключаем предупреждения компилятора */</code></p>
      <p><code>10 #endif</code></p>
      <empty-line/>
      <p><code>11 #ifndef SEMVMX</code></p>
      <p><code>12 #define SEMVMX 32767 /* исторически сложившееся максимальное значение для семафора System V */</code></p>
      <p><code>13 #endif</code></p>
      <subtitle>Тип данных sem_t</subtitle>
      <p>1-5 Мы реализуем именованный семафор Posix с помощью набора семафоров System V, состоящего из одного элемента. Структура данных семафора содержит идентификатор семафора System V и магическое число (обсуждавшееся в связи с листингом 10.21).</p>
     </section>
     <section>
      <title>
       <p>Функция sem_open</p>
      </title>
      <p>В листинге 10.37 приведен текст первой половины функции sem_open, которая создает новый семафор или открывает существующий.</p>
      <subtitle>Листинг 10.37. Функция sem_open: первая часть</subtitle>
      <p><code>//my_pxsem_svsem/sem_open. с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <p><code>3  #include &lt;stdarg.h&gt; /* для списков аргументов переменной длины */</code></p>
      <p><code>4  #define MAX_TRIES 10 /* количество попыток инициализации */</code></p>
      <empty-line/>
      <p><code>5  mysem_t *</code></p>
      <p><code>6  mysem_open(const char *pathname, int oflag, … )</code></p>
      <p><code>7  {</code></p>
      <p><code>8   int i, fd, semflag, semid, save_errno;</code></p>
      <p><code>9   key_t key;</code></p>
      <p><code>10  mode_t mode;</code></p>
      <p><code>11  va_list ap;</code></p>
      <p><code>12  mysem_t *sem;</code></p>
      <p><code>13  union semun arg;</code></p>
      <p><code>14  unsigned int value;</code></p>
      <p><code>15  struct semid_ds seminfo;</code></p>
      <p><code>16  struct sembuf initop;</code></p>
      <p><code>17  /* режим доступа для sem_open() без O_CREAT не указывается; угадываем */</code></p>
      <p><code>18  semflag = SVSEM_MODE;</code></p>
      <p><code>19  semid = –1;</code></p>
      <p><code>20  if (oflag &amp; O_CREAT) {</code></p>
      <p><code>21   va_start(ap, oflag); /* инициализируем ар последним явно указанным аргументом */</code></p>
      <p><code>22   mode = va_arg(ap, va_mode_t);</code></p>
      <p><code>23   value = va_arg(ap, unsigned int);</code></p>
      <p><code>24   va_end(ap);</code></p>
      <p><code>25   /* преобразуем в ключ, который будет идентифицировать семафор System V */</code></p>
      <p><code>26   if ((fd = open(pathname, oflag, mode)) == –1)</code></p>
      <p><code>27    return(SEM_FAILED);</code></p>
      <p><code>28   close(fd);</code></p>
      <p><code>29   if ((key = ftok(pathname, 0)) == (key_t) –1)</code></p>
      <p><code>30    return(SEM_FAILED);</code></p>
      <p><code>31   semflag = IPC_CREAT | (mode &amp; 0777);</code></p>
      <p><code>32   if (oflag &amp; O_EXCL)</code></p>
      <p><code>33    semflag |= IPC_EXCL;</code></p>
      <p><code>34    /* создаем семафор System V с флагом IPC_EXCL */</code></p>
      <p><code>35   if ((semid = semget(key, 1, semflag | IPC_EXCD) &gt;= 0) {</code></p>
      <p><code>36    /* OK, мы успели первыми, поэтому инициализируем нулем */</code></p>
      <p><code>37    arg.val = 0;</code></p>
      <p><code>38    if (semctl(semid, 0, SETVAL, arg) == –1)</code></p>
      <p><code>39     goto err;</code></p>
      <p><code>40    /* увеличиваем значение, чтобы sem_otime стало ненулевым */</code></p>
      <p><code>41    if (value &gt; SEMVMX) {</code></p>
      <p><code>42     errno = EINVAL;</code></p>
      <p><code>43     goto err;</code></p>
      <p><code>44    }</code></p>
      <p><code>45    initop.sem_num = 0;</code></p>
      <p><code>46    initop.sem_op = value;</code></p>
      <p><code>47    initop.sem_flg = 0;</code></p>
      <p><code>48    if (semop(semid, &amp;initop, 1) == –1)</code></p>
      <p><code>49     goto err;</code></p>
      <p><code>50    goto finish;</code></p>
      <p><code>51   } else if (errno != EEXIST || (semflag &amp; IPC_EXCL) != 0)</code></p>
      <p><code>52    goto err:</code></p>
      <p><code>53   /* иначе продолжаем выполнение */</code></p>
      <p><code>54  }</code></p>
      <subtitle>Создание нового семафора и работа со списком аргументов переменной длины</subtitle>
      <p>20-24 Если вызвавший процесс указывает флаг O_CREAT, мы знаем, что функции будут переданы четыре аргумента, а не два. Работа со списком аргументов переменной длины и типом данных va_mode_t обсуждалась в связи с листингом 5.17.</p>
      <subtitle>Создание вспомогательного файла и преобразование полного имени в ключ System V IPC</subtitle>
      <p>25-30 Создается обычный файл с именем, указываемым при вызове функции. Это делается для того, чтобы указать его имя при вызове функции ftok для последующей идентификации семафора. Аргумент oflag, принятый от вызвавшего процесса, передается функции open для дополнительного файла, что позволяет создать его, если он еще не существует, и вернуть ошибку EEXIST, если файл существует и указан флаг O_EXCL. Дескриптор файла затем закрывается, поскольку единственная цель создания файла была в использовании его имени при вызове ftok, преобразующей полное имя в ключ System V IPC (раздел 3.2).</p>
      <subtitle>Создание набора семафоров System V с одним элементом</subtitle>
      <p>32-33 Мы преобразуем константы O_CREAT и O_EXCL в соответствующие константы System V IРС_ххх и вызываем semget для создания набора семафоров System V, состоящего из одного элемента. Флаг IPC_EXCL указывается всегда, чтобы можно было определить, существовал ли семафор до вызова функции или был создан ею.</p>
      <subtitle>Инициализация семафора</subtitle>
      <p>34-50 В разделе 11.2 описана фундаментальная проблема, связанная с инициализацией семафоров System V, а в разделе 11.6 приведен код, позволяющий исключить потенциальную ситуацию гонок. Здесь мы пользуемся аналогичным методом. Первый поток, который создает семафор (вспомните, что мы всегда указываем флаг IPC_EXCL), инициализирует его значением 0 с помощью команды SETVAL при вызове semctl, а затем устанавливает запрошенное вызвавшим процессом начальное значение с помощью semop. Мы можем быть уверены, что значение sem_otime семафора функцией semget устанавливается в 0 и будет изменено на ненулевое вызовом semop. Следовательно, любой поток, работающий с существующим семафором, будет знать, что он уже проинициализирован, если значение sem_otime будет отлично от 0.</p>
      <subtitle>Проверка начального значения</subtitle>
      <p>40-44 Мы проверяем начальное значение, указанное вызвавшим процессом, поскольку семафоры System V обычно хранятся как беззнаковые короткие целые (unsigned short, структура sem в разделе 11.1) с максимальным значением 32767 (раздел 11.7), тогда как семафоры Posix обычно хранятся как целые с максимально возможным размером (раздел 10.13). Константа SEMVMX определяется некоторыми реализациями как максимальное значение семафора System V, а если она не определена, то мы определяем ее равной 32 767 в листинге 10.36.</p>
      <p>52-53 Если семафор уже существует и вызвавший процесс не указал флаг O_EXCL, ошибка не возвращается. В этом случае программа переходит к открытию (не созданию) существующего семафора.</p>
      <p>В листинге 10.38 приведен текст второй половины функции sem_open.</p>
      <subtitle>Листинг 10.38. Функция sem_open: вторая половина</subtitle>
      <p><code>//my_pxsem_svsem/sem_open.c</code></p>
      <p><code>55  /*</code></p>
      <p><code>56   * (O_CREAT не указан) или</code></p>
      <p><code>57   * (O_CREAT без O_EXCL и семафор уже существует).</code></p>
      <p><code>58   * Нужно открыть семафор и проверить, что он уже проинициализирован.</code></p>
      <p><code>59   */</code></p>
      <p><code>60  if ((key = ftok(pathname, 0)) == (key_t) –1)</code></p>
      <p><code>61   goto err;</code></p>
      <p><code>62  if ((semid = semget(key, 0, semflag)) == –1)</code></p>
      <p><code>63 goto err;</code></p>
      <p><code>64  arg.buf = &amp;seminfo;</code></p>
      <p><code>65  for (i = 0; i &lt; MAX_TRIES; i++) {</code></p>
      <p><code>66   if (semctl(semid, 0, IPC_STAT, arg) == –1)</code></p>
      <p><code>67    goto err;</code></p>
      <p><code>68   if (arg.buf-&gt;sem_otime != 0)</code></p>
      <p><code>69    goto finish;</code></p>
      <p><code>70   sleep(1);</code></p>
      <p><code>71  }</code></p>
      <p><code>72  errno = ETIMEDOUT;</code></p>
      <p><code>73 err:</code></p>
      <p><code>74  save_errno = errno; /* не даем вызову semctl() изменить значение errno */</code></p>
      <p><code>75  if (semid != –1)</code></p>
      <p><code>76   semctl(semid, 0, IPC_RMID);</code></p>
      <p><code>77  errno = save_errno;</code></p>
      <p><code>78  return(SEM_FAILED);</code></p>
      <p><code>79 finish:</code></p>
      <p><code>80  if ((sem = malloc(sizeof(mysem_t))) == NULL)</code></p>
      <p><code>81   goto err;</code></p>
      <p><code>82  sem-&gt;sem_semid = semid;</code></p>
      <p><code>83  sem-&gt;sem_magic = SEM_MAGIC;</code></p>
      <p><code>84  return(sem);</code></p>
      <p><code>85 }</code></p>
      <subtitle>Открытие существующего семафора</subtitle>
      <p>55-63 Если семафор уже создан (флаг O_CREAT не указан или указан, но без O_EXCL, а семафор существует), мы открываем семафор System V с помощью semget. Обратите внимание, что в вызове sem_open указывать аргумент mode не нужно, если не указан флаг O_CREAT, но вызов semget требует указания режима доступа, даже если открывается существующий семафор. Ранее в тексте функции мы присваивали значение по умолчанию (константу SVSEM_MODE из нашего заголовочного файла unpipc.h) переменной, которую теперь передаем semget, если не указан флаг O_CREAT.</p>
      <subtitle>Ожидание инициализации семафора</subtitle>
      <p>64-72 Проверяем, что семафор уже инициализирован, вызывая semctl с командой IPC_STAT и сравнивая значение поля sem_otime возвращаемой структуры с нулем.</p>
      <subtitle>Возврат кода ошибки</subtitle>
      <p>73-78 Когда возникает ошибка, мы аккуратно вызываем все последующие функции, чтобы не изменить значение errno.</p>
      <subtitle>Выделение памяти под sem_t</subtitle>
      <p>79-84 Мы выделяем память под структуру sem_t и помещаем в нее идентификатор семафора System V. Функция возвращает указатель на эту структуру.</p>
     </section>
     <section>
      <title>
       <p>Функция sem_close</p>
      </title>
      <p>В листинге 10.39 приведен текст функции sem_close, которая вызывает free для освобождения динамически выделенной под структуру sem_t памяти. </p>
      <subtitle>Листинг 10.39. Функция sem_close</subtitle>
      <p><code>//my_pxsem_svsem/sem_close.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_close(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>7    errno = EINVAL;</code></p>
      <p><code>8    return(-1);</code></p>
      <p><code>9   }</code></p>
      <p><code>10  sem-&gt;sem_magic = 0; /* на всякий случай */</code></p>
      <p><code>11  free(sem);</code></p>
      <p><code>12  return(0);</code></p>
      <p><code>13 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_unlink</p>
      </title>
      <p>Функция sem_unlink, текст которой приведен в листинге 10.40, удаляет вспомогательный файл и семафор System V, связанные с указанным ей семафором Posix.</p>
      <subtitle>Листинг 10.40. Функция sem_unlink</subtitle>
      <p><code>//my_pxsem_svsem/sem_unlink.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_unlink(const char *pathname)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int semid;</code></p>
      <p><code>7   key_t key;</code></p>
      <p><code>8   if ((key = ftok(pathname, 0)) == (key_t) –1)</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  if (unlink(pathname) == –1)</code></p>
      <p><code>11   return(-1);</code></p>
      <p><code>12  if ((semid = semget(key, 1, SVSEM_MODE)) == –1)</code></p>
      <p><code>13   return(-1);</code></p>
      <p><code>14  if (semctl(semid, 0, IPC_RMID) == –1)</code></p>
      <p><code>15   return(-1);</code></p>
      <p><code>16  return(0);</code></p>
      <p><code>17 }</code></p>
      <subtitle>Получение ключа System V по полному имени</subtitle>
      <p>8-16 Функция ftok преобразует полное имя файла в ключ System V IPC. После этого вспомогательный файл удаляется вызовом unlink (именно в этом месте кода, на тот случай, если одна из последующих функций вернет ошибку). Затем мы открываем семафор System V вызовом semget и удаляем его с помощью команды IPC_RMID для semctl.</p>
     </section>
     <section>
      <title>
       <p>Функция sem_post</p>
      </title>
      <p>В листинге 10.41 приведен текст функции sem_post, которая увеличивает значение семафора.</p>
      <p>11-16 Мы вызываем semop с операцией, увеличивающей значение семафора на 1.</p>
      <subtitle>Листинг 10.41. Функция sem_post</subtitle>
      <p><code>//my_pxsem_svsem/sem_post.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_post(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   struct sembuf op;</code></p>
      <p><code>7   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno * EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  op.sem_num = 0;</code></p>
      <p><code>12  op.sem_op = 1;</code></p>
      <p><code>13  op.sem_flg = 0;</code></p>
      <p><code>14  if (semop(sem-&gt;sem_semid, &amp;op, 1) &lt; 0)</code></p>
      <p><code>15   return(-1);</code></p>
      <p><code>16  return(0);</code></p>
      <p><code>17 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_wait</p>
      </title>
      <p>Следующая функция приведена в листинге 10.42; она называется sem_wait и ожидает изменения значения семафора с нулевого на ненулевое, после чего уменьшает значение семафора на 1.</p>
      <p>11-16 Мы вызываем semop с операцией, уменьшающей значение семафора на 1.</p>
      <subtitle>Листинг 10.42. Функция sem_wait</subtitle>
      <p><code>//my_pxsem_svsem/sem_wait.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_wait(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   struct sembuf op;</code></p>
      <p><code>7   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno = EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  op.sem_num = 0;</code></p>
      <p><code>12  op.sem_op = –1;</code></p>
      <p><code>13  op.sem_flg = 0;</code></p>
      <p><code>14  if (semop(sem-&gt;sem_semid, &amp;op, 1) &lt; 0)</code></p>
      <p><code>15   return(-1);</code></p>
      <p><code>16  return(0);</code></p>
      <p><code>17 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_trywait</p>
      </title>
      <p>В листинге 10.43 приведен текст нашей функции sem_trywait, которая представляет собой неблокируемую версию sem_wait.</p>
      <p>13 Единственное отличие от функции sem_wait из листинга 10.42 заключается в том, что флагу sem_flg присваивается значение IPC_NOWAIT. Если операция не может быть завершена без блокирования вызвавшего потока, функция semop возвращает ошибку EAGAIN, а это именно тот код, который должен быть возвращен sem_trywait, если операция не может быть завершена без блокирования потока.</p>
      <subtitle>Листинг 10.43. Функция sem_trywait</subtitle>
      <p><code>//my_pxsem_svsem/sem_trywait.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_trywait(mysem_t *sem)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   struct sembuf op;</code></p>
      <p><code>7   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno = EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  op.sem_num = 0;</code></p>
      <p><code>12  op.sem_op = –1;</code></p>
      <p><code>13  op.sem_flg = IPC_NOWAIT;</code></p>
      <p><code>14  if (semop(sem-&gt;sem_semid, &amp;op, 1) &lt; 0)</code></p>
      <p><code>15   return(-1);</code></p>
      <p><code>16  return(0);</code></p>
      <p><code>17 }</code></p>
     </section>
     <section>
      <title>
       <p>Функция sem_getvalue</p>
      </title>
      <p>Последняя функция приведена в листинге 10.44. Это функция sem_getvalue, возвращающая текущее значение семафора.</p>
      <p>11-14 Текущее значение семафора получается отправкой команды GETVAL функции semctl.</p>
      <subtitle>Листинг 10.44. Функция sem_getvalue</subtitle>
      <p><code>//my_pxsem_svsem/sem_getvalue.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "semaphore.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  mysem_getvalue(mysem_t *sem, int *pvalue)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int val;</code></p>
      <p><code>7   if (sem-&gt;sem_magic != SEM_MAGIC) {</code></p>
      <p><code>8    errno = EINVAL;</code></p>
      <p><code>9    return(-1);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  if ((val = semctl(sem-&gt;sem_semid, 0, GETVAL)) &lt; 0)</code></p>
      <p><code>12   return(-1);</code></p>
      <p><code>13  *pvalue = val;</code></p>
      <p><code>14  return(0);</code></p>
      <p><code>15 }</code></p>
     </section>
    </section>
    <section>
     <title>
      <p>10.17. Резюме</p>
     </title>
     <p>Семафоры Posix представляют собой семафоры-счетчики, для которых определены три основные операции:</p>
     <p>1. Создание семафора.</p>
     <p>2. Ожидание изменения значения семафора на ненулевое и последующее уменьшение значения.</p>
     <p>3. Увеличение значения семафора на 1 и возобновление выполнения всех процессов, ожидающих его изменения.</p>
     <p>Семафоры Posix могут быть именованными или неименованными (размещаемыми в памяти). Именованные семафоры всегда могут использоваться отдельными процессами, тогда как размещаемые в памяти должны для этого изначально планироваться как разделяемые между процессами. Эти типы семафоров также отличаются друг от друга по живучести: именованные семафоры обладают по меньшей мере живучестью ядра, тогда как размещаемые в памяти обладают живучестью процесса.</p>
     <p>Задача производителей и потребителей является классическим примером для иллюстрации использования семафоров. В этой главе первое решение состояло из одного потока-производителя и одного потока-потребителя; второе решение имело нескольких производителей и одного потребителя, а последнее решение допускало одновременную работу и нескольких потребителей. Затем мы показали, что классическая задача двойной буферизации является частным случаем задачи производителей и потребителей с одним производителем и одним потребителем.</p>
     <p>В этой главе было приведено три примера возможной реализации семафоров Posix. Первый пример был самым простым, в нем использовались каналы FIFO, а большая часть забот по синхронизации ложилась на ядро (функции read и write). Следующая реализация использовала отображение файлов в память (аналогично реализации очередей сообщений Posix из раздела 5.8), а также взаимное исключение и условную переменную (для синхронизации). Последняя реализация была основана на семафорах System V и представляла собой, по сути, удобный интерфейс для работы с ними.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Измените функции produce и consume из раздела 10.6 следующим образом. Поменяйте порядок двух вызовов Sem_wait в потребителе, чтобы возникла ситуация зависания (как описано в разделе 10.6). Затем добавьте вызов printf перед каждым Sem_wait, чтобы было ясно, какой из потоков ожидает изменения семафора. Добавьте еще один вызов printf после каждого Sem_wait, чтобы можно было определить, какой поток получил управление. Уменьшите количество буферов до двух, а затем откомпилируйте и выполните эту программу, чтобы убедиться, что она зависнет.</p>
     <p>2. Предположим, что запущено четыре экземпляра программы, вызывающей функцию my_lock из листинга 10.10:</p>
     <p><code>% lockpxsem &amp; lockpxsem &amp; lockpxsem &amp; lockpxsem &amp;</code></p>
     <p>Каждый из четырех процессов запускается с значением initflag, равным 0, поэтому при вызове sem_open всегда указывается O_CREAT. Нормально ли это?</p>
     <p>3. Что произойдет в предыдущем примере, если одна из четырех программ будет завершена после вызова my_lock, но перед вызовом my_unlock?</p>
     <p>4. Что произошло бы с программой в листинге 10.22, если бы мы не инициализировали оба дескриптора значением –1?</p>
     <p>5. Почему в листинге 10.22 мы сохраняем значение errno, а затем восстанавливаем его, вместо того чтобы написать просто:</p>
     <p><code>if (sem-&gt;fd[0] &gt;= 0) close(sem-&gt;fd[0]);</code></p>
     <p><code>if (sem-&gt;fd[1] &gt;= 0) close(sem-&gt;fd[1]);</code></p>
     <p>6. Что произойдет, если два процесса вызовут нашу реализацию sem_open через FIFO (листинг 10.22) примерно одновременно, указывая флаг O_CREAT и начальное значение 5? Может ли канал быть инициализирован (неправильно) значением 10?</p>
     <p>7. В связи с листингами 10.28 и 10.29 мы описали возможную ситуацию гонок в случае, если два процесса пытаются создать семафор примерно одновременно. Однако решение предыдущей задачи в листинге 10.22 не создавало ситуации гонок. Объясните это.</p>
     <p>8. Стандарт Posix.1 указывает дополнительную возможность для функции semwait: она может прерываться перехватываемым сигналом и возвращать код EINTR. Напишите тестовую программу, которая определяла бы, есть ли такая возможность в вашей реализации.</p>
     <p>Запустите эту тестовую программу с нашими реализациями, использующими FIFO (раздел 10.14), отображение в память (раздел 10.15) и семафоры System V (раздел 10.16).</p>
     <p>9. Какая из трех реализаций sem_post этой главы является функцией типа async-signal-safe (табл. 5.1)?</p>
     <p>10. Измените решение задачи о потребителе и производителе в разделе 10.6 так, чтобы для переменной mutex использовался тип pthread_mutex_t, а не семафор. Заметна ли разница в скорости работы программы?</p>
     <p>11. Сравните быстродействие именованных семафоров (листинги 10.8 и 10.9) и размещаемых в памяти (листинг 10.11).</p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 11</p>
     <p>Семафоры System V</p>
    </title>
    <section>
     <title>
      <p>11.1.Введение</p>
     </title>
     <p>В главе 10 мы описывали различные виды семафоров, начав с:</p>
     <p>&#9632; бинарного семафора, который может принимать только два значения: 0 и 1. По своим свойствам такой семафор аналогичен взаимному исключению (глава 7), причем значение 0 для семафора соответствует блокированию ресурса, а 1 — освобождению.</p>
     <p>Далее мы перешли к более сложному виду семафоров:</p>
     <p>&#9632; семафор-счетчик, значение которого лежит в диапазоне от 0 до некоторого ограничения, которое, согласно Posix, не должно быть меньше 32767. Они использовался для подсчета доступных ресурсов в задаче о производителях и потребителях, причем значение семафора соответствовало количеству доступных ресурсов.</p>
     <p>Для обоих типов семафоров операция <emphasis>wait</emphasis> состояла в ожидании изменения значения семафора с нулевого на ненулевое и последующем уменьшении этого значения на 1. Операция <emphasis>post</emphasis> увеличивала значение семафора на 1, оповещая об этом все процессы, ожидавшие изменения значения семафора.</p>
     <p>Для семафоров System V определен еще один уровень сложности:</p>
     <p>&#9632; набор семафоров-счетчиков — один или несколько семафоров, каждый из которых является счетчиком. На количество семафоров в наборе существует ограничение (обычно порядка 25 — раздел 11.7). Когда мы говорим о семафоре System V, мы подразумеваем именно набор семафоров-счетчиков, а когда говорим о семафоре Posix, подразумевается ровно один семафор-счетчик.</p>
     <p>Для каждого набора семафоров ядро поддерживает следующую информационную структуру, определенную в файле &lt;sys/sem.h&gt;:</p>
     <p><code>struct semid_ds {</code></p>
     <p><code> struct ipc_perm sem_perm; /* разрешения на операции */</code></p>
     <p><code> struct sem *sem_base; /*указатель на массив семафоров в наборе */</code></p>
     <p><code> ushort sem_nsems; /* количество семафоров в наборе */</code></p>
     <p><code> time_t sem_otime; /* время последнего вызова semop(); */</code></p>
     <p><code> time_t sem_ctime; /* время создания последнего IPC_SET */</code></p>
     <p><code>};</code></p>
     <p>Структура ipc_perm была описана в разделе 3.3. Она содержит разрешения доступа для данного семафора.</p>
     <p>Структура sem представляет собой внутреннюю структуру данных, используемую ядром для хранения набора значений семафора. Каждый элемент набора семафоров описывается так:</p>
     <p><code>struct sem {</code></p>
     <p><code> ushort_t semval; /* значение семафора, неотрицательно */</code></p>
     <p><code> short sempid; /* PID последнего процесса, вызвавшего semop(), SETVAL, SETALL */</code></p>
     <p><code> ushort_t semncnt; /* количество ожидающих того, что значение семафора превысит текущее */</code></p>
     <p><code> ushort_t semzcnt; /* количество ожидающих того, что значение семафора станет равным 0*/</code></p>
     <p><code>};</code></p>
     <p>Обратите внимание, что sem_base представляет собой указатель на массив структур типа sem — по одному элементу массива на каждый семафор в наборе.</p>
     <p>Помимо текущих значений всех семафоров набора в ядре хранятся еще три поля данных для каждого семафора: идентификатор процесса, изменившего значение семафора последним, количество процессов, ожидающих увеличения значения семафора, и количество процессов, ожидающих того, что значение семафора станет нулевым.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В стандарте Unix 98 данная структура не имеет имени. Приведенное выше имя (sem) взято из реализации System V. </p>
     </cite>
     <p>Любой конкретный семафор в ядре мы можем воспринимать как структуру semid_ds, указывающую на массив структур sem. Если в наборе два элемента, мы получим картину, изображенную на рис. 11.1. На этом рисунке переменная sem_nsems имеет значение 2, а каждый из элементов набора идентифицируется индексом ([0] или [1]). </p>
     <image l:href="#Any2FbImgLoader189"/>
     <p>Рис. 11.1. Структуры данных ядра для набора семафоров из двух элементов</p>
    </section>
    <section>
     <title>
      <p>11.2. Функция semget</p>
     </title>
     <section>
      <p>Функция semget создает набор семафоров или обеспечивает доступ к существующему.</p>
      <p><code>#include &lt;sys/sem.h&gt;</code></p>
      <p><code>int semget(key_t <emphasis>key,</emphasis> int <emphasis>nsems,</emphasis> int <emphasis>oflag</emphasis>);</code></p>
      <p><code>/* Возвращает неотрицательный идентификатор в случае успешного завершения, –1 – в случае ошибки */</code></p>
      <p>Эта функция возвращает целое значение, называемое идентификатором семафора, которое затем используется при вызове функций semop и semctl.</p>
      <p>Аргумент <emphasis>nsems</emphasis> задает количество семафоров в наборе. Если мы не создаем новый набор, а устанавливаем доступ к существующему, этот аргумент может быть нулевым. Количество семафоров в уже созданном наборе изменить нельзя.</p>
      <p>Аргумент <emphasis>oflag</emphasis> представляет собой комбинацию констант SEM_R и SEM_A из табл. 3.3. Здесь R обозначает <emphasis>Read</emphasis> (чтение), а А — <emphasis>Alter</emphasis> (изменение). К этим константам можно логически прибавить IPC_CREAT или IPC_CREAT | IPC_EXCL, о чем мы уже говорили в связи с рис. 3.2.</p>
      <p>При создании нового семафора инициализируются следующие поля структуры semid_ds:</p>
      <p>&#9632; поля uid и cuid структуры sem_perm устанавливаются равными действующему идентификатору пользователя процесса, а поля guid и cgid устанавливаются равными действующему идентификатору группы процесса;</p>
      <p>&#9632; биты разрешений чтения-записи аргумента <emphasis>oflag</emphasis> сохраняются в sem_perm.mode;</p>
      <p>&#9632; поле sem_otime устанавливается в 0, а поле sem_ctime устанавливается равным текущему времени;</p>
      <p>&#9632; значение sem_nsems устанавливается равным <emphasis>nsems;</emphasis></p>
      <p>&#9632; структуры sem для каждого из семафоров набора не инициализируются. Это происходит лишь при вызове semctl с командами SETVAL или SETALL.</p>
     </section>
     <section>
      <title>
       <p>Инициализация значения семафора</p>
      </title>
      <p>В комментариях к исходному коду в издании этой книги 1990 года неправильно утверждалось, что значения семафоров набора инициализируются нулем при вызове semget с созданием нового семафора. Хотя в некоторых системах это действительно происходит, гарантировать подобное поведение ядра нельзя. Более старые реализации System V вообще не инициализировали значения семафоров, оставляя их содержимое таким, каким оно было до выделения памяти.</p>
      <p>В большинстве версий документации ничего не говорится о начальных значениях семафоров при создании нового набора. Руководство по написанию переносимых программ X/Open XPG3 (1989) и стандарт Unix 98 исправляют это упущение и открыто утверждают, что значения семафоров не инициализируются вызовом semget, а устанавливаются только при вызове semctl (вскоре мы опишем эту функцию) с командами SETVAL (установка значения одного из семафоров набора) и SETALL (установка значений всех семафоров набора).</p>
      <p>Необходимость вызова двух функций для создания (semget) и инициализации (semctl) набора семафоров является неисправимым недостатком семафоров System V. Эту проблему можно решить частично, указывая флаги IPC_CREAT | IPC_EXCL при вызове semget, чтобы только один процесс, вызвавший semget первым, создавал семафор, и этот же процесс должен семафор инициализировать. </p>
      <p>Другие процессы получают при вызове semget ошибку EEXIST, так что им приходится еще раз вызывать semget, уже не указывая флагов IPC_CREAT или IPC_EXCL.</p>
      <p>Однако ситуация гонок все еще не устранена. Предположим, что два процесса попытаются создать и инициализировать набор семафоров с одним элементом приблизительно в один и тот же момент времени, причем оба они будут выполнять один и тот же фрагмент кода:</p>
      <p><code>1 oflag = IPC_CREAT | IPC_EXCL | SVSEM_MODE;</code></p>
      <p><code>2 if ((semid = semget(key, 1, oflag)) &gt;= 0) { /* успешное завершение, этот процесс должен инициализировать семафор */</code></p>
      <p><code>3  arg.val = 1;</code></p>
      <p><code>4  Semctl(semid, 0, SETVAL, arg);</code></p>
      <p><code>5 } else if (errno == EEXIST) { /* уже существует, поэтому просто открываем семафор */</code></p>
      <p><code>6  semid = Semget(key, 1, SVSEM_MODE);</code></p>
      <p><code>7 } else</code></p>
      <p><code>8  err_sys("semget error");</code></p>
      <p><code>9 Semop(semid, …); /* уменьшаем значение семафора на 1 */</code></p>
      <p>При этом может произойти вот что:</p>
      <p>1. Первый процесс выполняет строки 1-3, а затем останавливается ядром.</p>
      <p>2. Ядро запускает второй процесс, который выполняет строки 1, 2, 5, 6 и 9.</p>
      <p>Хотя первый процесс, создавший семафор, и будет единственным процессом, который проинициализирует семафор, ядро может переключиться на другой процесс в промежутке между созданием и инициализацией семафора, и тогда второй процесс сможет обратиться к семафору (строка 9), который еще не был проинициализирован. Значение семафора после выполнения строки 9 для второго процесса будет не определено.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>В семафорах Posix эта проблема исключается благодаря тому, что семафоры создаются и инициализируются единственным вызовом — sem_open. Более того, даже если указан флаг O_CREAT, семафор будет проинициализирован только в том случае, если он еще не существовал на момент вызова функции.</p>
       <p>Будет ли обсуждавшаяся выше ситуация гонок создавать какие-то проблемы — зависит от приложения. В некоторых приложениях (например, задача производителей и потребителей в листинге 10.12) единственный процесс всегда создает и инициализирует семафор. В этом варианте ситуация гонок возникать не будет. В других приложениях (пример с блокировкой файлов в листинге 10.10) нет такого единственного процесса, который бы создавал и инициализировал семафор: первый процесс, открывающий семафор, должен создать его и проинициализировать, так что в этом случае ситуацию гонок следует исключать.</p>
      </cite>
      <p>К счастью, существует способ исключить в данном случае ситуацию гонок. Стандарт гарантирует, что при создании набора семафоров поле sem_otime структуры semid_ds инициализируется нулем. (Руководства System V с давних пор говорят об этом, это утверждается и в стандартах XPG3 и Unix 98.) Это поле устанавливается равным текущему времени только при успешном вызове semop. Следовательно, второй процесс в приведенном выше примере должен просто вызвать semctl с командой IPC_STAT после второго вызова semget (строка 6). Затем этот процесс должен ожидать изменения значения sem_otime на ненулевое, после чего он может быть уверен в том, что семафор был успешно проинициализирован другим процессом. Это значит, что создавший семафор процесс должен проинициализировать его значение и успешно вызвать semop, прежде чем другие процессы смогут воспользоваться этим семафором. Мы используем этот метод в листингах 10.37 и 11.6.</p>
     </section>
    </section>
    <section>
     <title>
      <p>11.3. Функция semop</p>
     </title>
     <p>После инициализации семафора вызовом semget с одним или несколькими семафорами набора можно выполнять некоторые действия с помощью функции semop:</p>
     <p><code>#include &lt;sys/sem.h&gt;</code></p>
     <p><code>int semop(int <emphasis>semid</emphasis>, struct sembuf *<emphasis>opsptr</emphasis>, size_t <emphasis>nops</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
     <p>Указатель opsptr указывает на массив структур вида</p>
     <p><code>struct sembuf {</code></p>
     <p><code> short sem_num; /* номер семафора: 0, 1,… nsems-1 */</code></p>
     <p><code> short sem_op; /* операция с семафором: &lt;0, 0, &gt;0 */</code></p>
     <p><code> short sem_flg; /* флаги операции: 0, IPC_NOWAIT, SEM_UNDO */</code></p>
     <p><code>};</code></p>
     <p>Количество элементов в массиве структур sembuf, на который указывает opsptr, задается аргументом nops. Каждый элемент этого массива определяет операцию с одним конкретным семафором набора. Номер семафора указывается в поле sen_num и принимает значение 0 для первого семафора, 1 для второго и т. д., до nsems-1, где nsems соответствует количеству семафоров в наборе (второй аргумент в вызове semget при создании семафора).</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В структуре гарантированно содержатся только три указанных выше поля. Однако в ней могут быть и другие поля, причем порядок их может быть совершенно произвольным. Поэтому не следует статически инициализировать эту структуру кодом наподобие</p>
      <p><code>struct sembuf ops[2] = {</code></p>
      <p><code> 0, 0, 0, /* ждем, пока первый элемент не станет равен нулю */</code></p>
      <p><code> 0, 1, SEM_UNDO /* затем увеличиваем [0] на 1 */</code></p>
      <p><code>};</code></p>
      <p>Вместо этого следует инициализировать ее динамически, как в нижеследующем примере:</p>
      <p><code>struct sembuf ops[2];</code></p>
      <p><code>ops[0].sem_num = 0; /* ждем, пока первый элемент не станет равен нулю */</code></p>
      <p><code>ops[0].sem_op = 0;</code></p>
      <p><code>ops[0].sem_flg = 0;</code></p>
      <p><code>ops[1].sem_num = 0; /* затем увеличиваем [0] на 1 */</code></p>
      <p><code>ops[1].sem_op = 1;</code></p>
      <p><code>ops[1].sem_flg = SEM_UNDO;</code></p>
     </cite>
     <p>Весь массив операций, передаваемый функции semop, выполняется ядром как одна операция; атомарность при этом гарантируется. Ядро выполняет все указанные операции или ни одну из них. Пример на эту тему приведен в разделе 11.5. </p>
     <p>Каждая операция задается значением sem_op, которое может быть отрицательным, нулевым или положительным. Сделаем несколько утверждений, которыми будем пользоваться при дальнейшем обсуждении:</p>
     <p>&#9632; semval — текущее значение семафора (рис. 11.1);</p>
     <p>&#9632; semncnt — количество потоков, ожидающих, пока значение семафора не станет больше текущего (рис. 11.1);</p>
     <p>&#9632; semzcnt — количество потоков, ожидающих, пока значение семафора не станет нулевым (рис. 11.1);</p>
     <p>&#9632; semadj — корректировочное значение данного семафора для вызвавшего процесса. Это значение обновляется, только если для данной операции указан флаг SEM_UNDO в поле sem_flg структуры sembuf. Эта переменная создается в ядре для каждого указавшего флаг SEM_UNDO процесса в отдельности; поле структуры с именем semadj не обязательно должно существовать;</p>
     <p>&#9632; когда выполнение потока приостанавливается до завершения операции с семафором (мы увидим, что поток может ожидать либо обнуления семафора, либо получения семафором положительного значения), поток перехватывает сигнал и происходит возвращение из обработчика сигнала, функция semop возвращает ошибку EINTR. Используя терминологию, введенную в книге [24, с. 124], можно сказать, что функция semop представляет собой медленный системный вызов, который прерывается перехватываемыми сигналами;</p>
     <p>&#9632; когда выполнение потока приостанавливается до завершения операции с семафором и этот семафор удаляется из системы другим потоком или процессом, функция semop возвращает ошибку EIDRM (identifier removed — идентификатор удален).</p>
     <p>Опишем теперь работу функции semop в зависимости от трех возможных значений поля sem_op: отрицательного, нулевого и положительного.</p>
     <p>1. Если значение sem_op положительно, оно добавляется к semval. Такое действие соответствует освобождению ресурсов, управляемых семафором. Если указан флаг SEM_UNDO, значение sem_op вычитается из значения semadj данного семафора.</p>
     <p>2. Если значение semop равно нулю, вызвавший поток блокируется до тех пор, пока значение семафора (semval) не станет равным нулю. Если semval уже равно 0, происходит немедленное возвращение из функции.</p>
     <p>Если semval не равно нулю, то ядро увеличивает значение поля semzcnt данного семафора и вызвавший поток блокируется до тех пор, пока значение semval не станет нулевым (после чего значение semzcnt будет уменьшено на 1). Как отмечалось ранее, поток будет приостановлен, только если не указан флаг IPC_NOWAIT. Если семафор будет удален в процессе ожидания либо будет перехвачен сигнал, произойдет преждевременный возврат из функции с возвращением кода ошибки.</p>
     <p>3. Если значение sem_op отрицательно, вызвавший поток блокируется до тех пор, пока значение семафора не станет большим либо равным модулю sem_op. Это соответствует запрашиванию ресурсов. </p>
     <p>Если значение semval больше либо равно модулю sem_op, модуль sem_op вычитается из semval. Если указан флаг SEM_UNDO, модуль sem_op добавляется к значению поля semadj данного семафора.</p>
     <p>Если значение semval меньше модуля sem_op, значение поля semncnt данного семафора увеличивается, а вызвавший поток блокируется до тех пор, пока semval не станет больше либо равно модулю semop. Когда это произойдет, поток будет разблокирован, а модуль sem_op будет отнят от semval и из значения semncnt будет вычтена единица. Если указан флаг SEM_UNDO, модуль sem_op добавляется к значению поля semadj данного семафора. Как отмечалось ранее, поток не будет приостановлен, если указан флаг IPC_NOWAIT. Ожидание завершается преждевременно, если перехватываемый сигнал вызывает прерывание либо семафор удаляется другим потоком.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Если сравнить этот набор операций с теми, которые разрешены для семафоров Posix, мы увидим, что для последних определены только команды –1 (sem_wait) и +1 (sem_post). Для семафоров System V значение семафора может изменяться с шагом, отличным от 1, и кроме того, поток может ожидать, чтобы значение семафора стало нулевым. Эти операции являются более общими, что вместе с возможностью включения нескольких семафоров в набор делает семафоры System V более сложными, чем одиночные семафоры Posix.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>11.4. Функция semctl</p>
     </title>
     <p>Функция semctl предназначена для выполнения разного рода вспомогательных управляющих операций с семафорами.</p>
     <p><code>#include &lt;sys/sem.h&gt;</code></p>
     <p><code>int semctl(int <emphasis>semid,</emphasis> int <emphasis>semnum,</emphasis> int cm<emphasis>d,</emphasis> …/* union semun <emphasis>arg</emphasis> */);</code></p>
     <p><code>/* Возвращает неотрицательное значение в случае успешного завершения (см. в тексте). –1 – в случае ошибки */</code></p>
     <p>Первый аргумент <emphasis>(semid)</emphasis> представляет собой идентификатор семафора, a <emphasis>semnum</emphasis> указывает элемент набора семафоров (0, 1 и т. д. до <emphasis>nsems</emphasis> –1). Значение <emphasis>semnum</emphasis> используется только командами GETVAL, SETVAL, GETNCNT, GETZCNT и GETPID.</p>
     <p>Четвертый аргумент является дополнительным — он добавляется в зависимости от команды cmd (см. комментарии в описании объединения). Объявляется это объединение следующим образом:</p>
     <p><code>union semun {</code></p>
     <p><code> int val; /* используется только командой SETVAL */</code></p>
     <p><code> struct semid_ds *buf; /* используется командами IPC_SET и IPC_STAT */</code></p>
     <p><code> ushort *array; /* используется командами GETALL и SETALL */</code></p>
     <p><code>};</code></p>
     <p>Это объединение отсутствует в системных заголовочных файлах и должно декларироваться приложением (мы определяем его в заголовочном файле unpipc.h, листинг B.1). Оно передается по значению, а не по ссылке, то есть аргументом является собственно значение объединения, а не указатель на него. </p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>К сожалению, в некоторых системах (FreeBSD и Linux) это объединение определено в заголовочном файле &lt;sys/sem.h&gt;, что затрудняет написание переносимых программ. Хотя в объявлении этого объединения в системном заголовочном файле и есть некоторый смысл, стандарт Unix 98 требует, чтобы оно каждый раз явно объявлялось приложением.</p>
     </cite>
     <p>Ниже приведен список поддерживаемых значений аргумента cmd. В случае успешного завершения функция возвращает 0, а в случае ошибки – –1, если в описании команды не сказано что-либо другое.</p>
     <p>&#9632; GETVAL — возвращает текущее значение semval. Поскольку значение семафора отрицательным быть не может (semval объявляется как unsigned short — беззнаковое короткое целое), в случае успешного возврата значение всегда будет неотрицательным.</p>
     <p>&#9632; SETVAL — установка значения semval равным arg.val. В случае успешного выполнения корректировочное значение этого семафора (semadj) устанавливается равным нулю для всех процессов.</p>
     <p>&#9632; GETPID — функция возвращает текущее значение поля sempid.</p>
     <p>&#9632; GETNCNT — функция возвращает текущее значение поля semncnt.</p>
     <p>&#9632; GETZCNT — функция возвращает текущее значение поля semzcnt.</p>
     <p>&#9632; GETALL — возвращаются значения semval для всех элементов набора. Значения возвращаются через указатель arg.array, а сама функция при этом возвращает 0. Обратите внимание, что вызывающий процесс должен самостоятельно выделить массив беззнаковых коротких целых достаточного объема для хранения всех значений семафоров набора, а затем сделать так, чтобы arg.array указывал на этот массив.</p>
     <p>&#9632; SETALL — установка значений semval для всех элементов набора. Значения задаются через указатель arg.array.</p>
     <p>&#9632; IPC_RMID — удаление набора семафоров, задаваемого через идентификатор semid.</p>
     <p>&#9632; IPC_SET — установка трех полей структуры semid_ds равными соответствующим полям структуры arg.buf: sem_perm.uid, sem_perm.gid и sem_perm.mode. Поле sem_ctime структуры semid_ds устанавливается равным текущему времени.</p>
     <p>&#9632; IPC_STAT — возвращение вызвавшему процессу через аргумент arg.buf текущего значения полей структуры semid_ds для данного набора семафоров. Обратите внимание, что вызывающий процесс должен сначала выделить место под структуру semid_ds и установить на нее указатель arg.buf.</p>
    </section>
    <section>
     <title>
      <p>11.5. Простые программы</p>
     </title>
     <section>
      <p>Поскольку семафоры System V обладают живучестью ядра, мы можем продемонстрировать работу с ними, написав несколько небольших программ, которые будут выполнять с семафорами различные действия. В промежутках между выполнением отдельных программ значения семафоров будут храниться в ядре. </p>
     </section>
     <section>
      <title>
       <p>Программа semcreate</p>
      </title>
      <p>Первая программа, текст которой приведен в листинге 11.1,<a l:href="#n_1" type="note">[1]</a> просто создает набор семафоров System V. Параметр командной строки –е соответствует флагу IPC_EXCL при вызове semget, а последним аргументом командной строки является количество семафоров в создаваемом наборе.</p>
      <subtitle>Листинг 11.1. Программа semcreate</subtitle>
      <p><code>//svsem/semcreate.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int с, oflag, semid, nsems;</code></p>
      <p><code>6   oflag = SVSEM_MODE | IPC_CREAT;</code></p>
      <p><code>7   while ((c = Getopt(argc, argv, "e")) != –1) {</code></p>
      <p><code>8    switch (c) {</code></p>
      <p><code>9    case 'e':</code></p>
      <p><code>10    oflag |= IPC_EXCL;</code></p>
      <p><code>11    break;</code></p>
      <p><code>12   }</code></p>
      <p><code>13  }</code></p>
      <p><code>14  if (optind != argc – 2)</code></p>
      <p><code>15   err_quit("usage: semcreate [ –e ] &lt;pathname&gt; &lt;nsems&gt;");</code></p>
      <p><code>16  nsems = atoi(argv[optind + 1]);</code></p>
      <p><code>17  semid = Semget(Ftok(argv[optind], 0), nsems, oflag);</code></p>
      <p><code>18  exit(0);</code></p>
      <p><code>19 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа semrmid</p>
      </title>
      <p>Следующая программа, текст которой приведен в листинге 11.2, удаляет набор семафоров из системы. Для этого используется вызов semctl с командой (аргументом cmd) IPC_RMID.</p>
      <subtitle>Листинг 11.2. Программа semrmid</subtitle>
      <p><code>//svsem/semrmid.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int semid;</code></p>
      <p><code>6   if (argc != 2)</code></p>
      <p><code>7    err_quit("usage: semrmid &lt;pathname&gt;"):</code></p>
      <p><code>8   semid = Semget(Ftok(argv[1], 0), 0, 0);</code></p>
      <p><code>9   Semctl(semid, 0, IPC_RMID);</code></p>
      <p><code>10  exit(0);</code></p>
      <p><code>11 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа semsetvalues</p>
      </title>
      <p>Программа semsetvalues (листинг 11.3) устанавливает значения всех семафоров набора.</p>
      <subtitle>Получение количества семафоров в наборе</subtitle>
      <p>11-15 После получения идентификатора семафора с помощью semget мы вызываем semctl с командой IPC_STAT, чтобы получить значения полей структуры semid_ds для данного семафора. Поле sem_nsems содержит нужную нам информацию о количестве семафоров в наборе.</p>
      <subtitle>Установка всех значений</subtitle>
      <p>19-24 Мы выделяем память под массив беззнаковых коротких целых, по одному элементу на каждый семафор набора, затем копируем полученные из командной строки значения в этот массив. Вызов semctl с командой SETALL позволяет установить все значения семафоров набора одновременно.</p>
      <subtitle>Листинг 11.3. Программа semsetvalues</subtitle>
      <p><code>//svsem/semsetvalues.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int semid, nsems, i;</code></p>
      <p><code>6   struct semid_ds seminfo;</code></p>
      <p><code>7   unsigned short *ptr;</code></p>
      <p><code>8   union semun arg;</code></p>
      <p><code>9   if (argc &lt; 2)</code></p>
      <p><code>10   err_quit("usage: semsetvalues &lt;pathname&gt; [ values … ]");</code></p>
      <p><code>11  /* получение количества семафоров в наборе */</code></p>
      <p><code>12  semid = Semget(Ftok(argv[1], 0), 0, 0);</code></p>
      <p><code>13  arg.buf = &amp;seminfo;</code></p>
      <p><code>14  Semctl(semid, 0, IPC_STAT, arg);</code></p>
      <p><code>15  nsems = arg.buf-&gt;sem_nsems;</code></p>
      <p><code>16  /* получение значений из командной строки */</code></p>
      <p><code>17  if (argc != nsems + 2)</code></p>
      <p><code>18  err_quit("%d semaphores in set, %d values specified", nsems, argc-2);</code></p>
      <p><code>19  /* выделение памяти под значения семафоров набора, помещение этих значений в новый массив */</code></p>
      <p><code>20  ptr = Calloc(nsems, sizeof(unsigned short));</code></p>
      <p><code>21  arg.array = ptr;</code></p>
      <p><code>22  for (i = 0; i &lt; nsems; i++)</code></p>
      <p><code>23   ptr[i] = atoi(argv[i +2]);</code></p>
      <p><code>24  Semctl(semid, 0, SETALL, arg);</code></p>
      <p><code>25  exit(0);</code></p>
      <p><code>26 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа semgetvalues</p>
      </title>
      <p>В листинге 11.4 приведен текст программы semgetvalues, которая получает и выводит значения всех семафоров набора.</p>
      <subtitle>Получение количества семафоров в наборе</subtitle>
      <p>11-15 После получения идентификатора семафора с помощью semget мы вызываем semctl с командой IPC_STAT для получения значений полей структуры semi d_ds данного семафора. Поле sem_nsems содержит нужную нам информацию о количестве семафоров в наборе.</p>
      <subtitle>Получение всех значений</subtitle>
      <p>16-22 Мы выделяем память под массив беззнаковых коротких целых, по одному элементу на каждый семафор набора. Вызов semctl с командой GETALL позволяет получить все значения семафоров набора одновременно. Каждое значение выводится.</p>
      <subtitle>Листинг 11.4. Программа semgetvalues</subtitle>
      <p><code>//svsem/semgetvalues.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int semid, nsems, i;</code></p>
      <p><code>6   struct semid_ds seminfo;</code></p>
      <p><code>7   unsigned short *ptr;</code></p>
      <p><code>8   union semun arg;</code></p>
      <p><code>9   if (argc != 2)</code></p>
      <p><code>10   err_quit("usage: semgetvalues &lt;pathname&gt;");</code></p>
      <p><code>11  /* получаем количество семафоров в наборе */</code></p>
      <p><code>12  semid = Semget(Ftok(argv[1], 0), 0, 0);</code></p>
      <p><code>13  arg.buf = &amp;seminfo;</code></p>
      <p><code>14  Semctl(semid, 0, IPC_STAT, arg);</code></p>
      <p><code>15  nsems = arg.buf-&gt;sem_nsems;</code></p>
      <p><code>16  /* выделяем память под имеющееся количество элементов */</code></p>
      <p><code>17  ptr = Calloc(nsems, sizeof(unsigned short));</code></p>
      <p><code>18  arg.array = ptr;</code></p>
      <p><code>19  /* получаем и выводим значения семафоров */</code></p>
      <p><code>20  Semctl(semid, 0, GETALL, arg);</code></p>
      <p><code>21  for (i = 0; i &lt; nsems; i++)</code></p>
      <p><code>22   printf("semval[%d] = %d\n", i, ptr[i]);</code></p>
      <p><code>23  exit(0);</code></p>
      <p><code>24 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа semops</p>
      </title>
      <p>В листинге 11.5 приведен текст программы semops, позволяющей выполнять последовательность действий над набором семафоров.</p>
      <subtitle>Параметры командной строки</subtitle>
      <p>7-19 Параметр –n соответствует установленному флагу IPC_NOWAIT для каждой операции, а параметр –u аналогичным образом позволяет указать для каждой операции флаг SEM_UNDO. Обратите внимание, что функция semop позволяет указывать свой набор флагов для каждого элемента структуры sembuf (то есть для каждой из операций в отдельности), но для простоты мы в нашей программе задаем одинаковые флаги для всех операций.</p>
      <subtitle>Выделение памяти под набор операций</subtitle>
      <p>20-29 После открытия семафора вызовом semget мы выделяем память под массив структур sembuf, по одному элементу на каждую операцию из командной строки. В отличие от предыдущих двух программ эта позволяет пользователю задать меньше команд, чем имеется семафоров в наборе.</p>
      <subtitle>Выполнение операций</subtitle>
      <p>30 Вызов semop выполняет последовательность операций над семафорами набора.</p>
      <subtitle>Листинг 11.5. Программа semops</subtitle>
      <p><code>//svsem/semops.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int с, i, flag, semid, nops;</code></p>
      <p><code>6   struct sembuf *ptr;</code></p>
      <p><code>7   flag = 0;</code></p>
      <p><code>8   while ((c = Getopt(argc, argv, "nu")) != –1) {</code></p>
      <p><code>9    switch (c) {</code></p>
      <p><code>10   case 'n':</code></p>
      <p><code>11    flag |= IPC_NOWAIT; /* для всех операций */</code></p>
      <p><code>12    break;</code></p>
      <p><code>13   case 'u':</code></p>
      <p><code>14    flag |= SEM_UNDO; /* для всех операций */</code></p>
      <p><code>15    break;</code></p>
      <p><code>16   }</code></p>
      <p><code>17  }</code></p>
      <p><code>18  if (argc = optind &lt; 2) /* argc – optind = количество оставшихся аргументов */</code></p>
      <p><code>19   err_quit("usage: semops [ –n ] [ –u ] &lt;pathname&gt; operation …");</code></p>
      <p><code>20  semid = Semget(Ftok(argv[optind], 0), 0, 0);</code></p>
      <p><code>21  optind++;</code></p>
      <p><code>22  nops = argc – optind;</code></p>
      <p><code>23  /* выделение памяти под операции, сохранение их в массиве и выполнение */</code></p>
      <p><code>24  ptr = Calloc(nops, sizeof(struct sembuf));</code></p>
      <p><code>25  for (i = 0; i &lt; nops; i++) {</code></p>
      <p><code>26   ptr[i].sem_num = i;</code></p>
      <p><code>27   ptr[i].sem_op = atoi(argv[optind + i]); /* &lt;0, 0, or &gt;0 */</code></p>
      <p><code>28   ptr[i].sem_flg = flag;</code></p>
      <p><code>29  }</code></p>
      <p><code>30  Semop(semid, ptr, nops);</code></p>
      <p><code>31  exit(0);</code></p>
      <p><code>32 }</code></p>
     </section>
     <section>
      <title>
       <p>Примеры</p>
      </title>
      <p>Теперь мы продемонстрируем работу пяти приведенных выше программ и исследуем некоторые свойства семафоров System V:</p>
      <p><code>solaris % <strong>touch /tmp/rich</strong></code></p>
      <p><code>solaris % <strong>semcreate –e /tmp/rich 3</strong></code></p>
      <p><code>solaris % <strong>semsetvalues /tmp/rich 1 2 3</strong></code></p>
      <p><code>solaris % <strong>semgetvalues /tmp/rich</strong></code></p>
      <p><code>semval[0] = 1</code></p>
      <p><code>semval[1] = 2</code></p>
      <p><code>semval[2] = 3</code></p>
      <p>Сначала мы создали файл с именем /tmp/rich, который использовался при вызове ftok для вычисления идентификатора набора семафоров. Программа semcreate создает набор с тремя элементами. Программа semsetvalues устанавливает значения этих элементов (1, 2 и 3), a semgetvalues выводит их значения.</p>
      <p>Теперь продемонстрируем атомарность выполнения последовательности операций над набором:</p>
      <p><code>solaris % <strong>semops –n /tmp/rich –1 –2 –4</strong></code></p>
      <p><code>semctl error: Resource temporarily unavailable</code></p>
      <p><code>solaris % <strong>semgetvalues /tmp/rich</strong></code></p>
      <p><code>semval[0] = 1</code></p>
      <p><code>semval[1] = 2</code></p>
      <p><code>semval[2] = 3</code></p>
      <p>В командной строке мы указываем параметр, отключающий блокировку (-n), и три операции, каждая из которых уменьшает одно из значений набора семафоров. Первая операция завершается успешно (мы можем вычесть 1 из значения первого элемента набора, потому что до вычитания оно равно 1), вторая операция также проходит (вычитаем 2 из значения второго семафора, равного 2), но третья операция выполнена быть не может (мы не можем вычесть 4 из значения третьего семафора, потому что оно равно 3). Поскольку последняя операция последовательности не может быть выполнена и поскольку мы отключили режим блокирования процесса, функция возвращает ошибку EAGAIN. Если бы мы не указали флаг отключения блокировки, выполнение процесса было бы приостановлено до тех пор, пока операция вычитания не стала бы возможной. После этого мы проверяем, чтобы ни одно из значений семафоров набора не изменилось. Хотя первые две операции и могли бы быть выполнены, ни одна из трех на самом деле произведена не была, поскольку последняя операция была некорректной. Атомарность semop и означает, что выполняются либо все операции, либо ни одна из них.</p>
      <p>Теперь продемонстрируем работу флага SEM_UNDO:</p>
      <p><code>solaris % <strong>semsetvalues /tmp/rich 1 2 3 </strong><emphasis>устанавливаем конкретные значения</emphasis></code></p>
      <p><code>solaris % <strong>semops –u /tmp/rich -1 –2 –3  </strong><emphasis>для каждой операции указывается флаг SEM_UNDO</emphasis></code></p>
      <p><code>solaris % <strong>semgetvalues /tmp/rich</strong></code></p>
      <p><code>semval[0] = 1                              <emphasis>все произведенные изменения были сброшены</emphasis></code></p>
      <p><code><emphasis>                                           после завершения работыпрограммы semops</emphasis></code></p>
      <p><code>semval[1] = 2</code></p>
      <p><code>semval[2] = 3</code></p>
      <p><code>solaris % <strong>semops /tmp/rich -1 –2 –3     </strong><emphasis>теперь мы не указываем флаг SEM_UNDO</emphasis></code></p>
      <p><code>solaris % <strong>semgetvalues /tmp/rich</strong></code></p>
      <p><code>semval[0] = 0</code></p>
      <p><code>semval[1] = 0</code></p>
      <p><code>semval[2] = 0</code></p>
      <p>Сначала мы заново устанавливаем значения семафоров в наборе равными 1, 2 и 3 с помощью программы semsetvalues, а затем запускаем программу semops с операциями –1, –2, –3. При этом все три значения семафоров становятся нулевыми, но, так как мы указали параметр –u при вызове semops, для всех трех операций устанавливается флаг SEM_UNDO. При этом значения semadj для элементов набора семафоров становятся равными 1, 2 и 3 соответственно. После завершения программы semops эти значения добавляются к значениям семафоров, в результате чего их значения становятся равными 1, 2 и 3, как будто мы и не запускали программу. В этом мы убеждаемся, запустив semgetvalues. Затем мы снова запускаем semops, но уже без параметра –u, и убеждаемся, что при этом значения семафоров становятся нулевыми и остаются таковыми даже после выхода из программы.</p>
     </section>
    </section>
    <section>
     <title>
      <p>11.6. Блокирование файлов</p>
     </title>
     <p>С помощью семафоров System V можно реализовать еще одну версию функций my_lock и my_unlock из листинга 10.10. Новый вариант приведен в листинге 11.6.</p>
     <subtitle>Листинг 11.6. Блокировка файлов с помощью семафоров System V</subtitle>
     <p><code>//lock/locksvsem.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define LOCK_PATH "/tmp/svsemlock"</code></p>
     <p><code>3  #define MAX_TRIES 10</code></p>
     <p><code>4  int semid, initflag;</code></p>
     <p><code>5  struct sembuf postop, waitop;</code></p>
     <empty-line/>
     <p><code>6  void</code></p>
     <p><code>7  my_lock (int fd)</code></p>
     <p><code>8  {</code></p>
     <p><code>9   int oflag, i;</code></p>
     <p><code>10  union semun arg;</code></p>
     <p><code>11  struct semid_ds seminfo;</code></p>
     <p><code>12  if (initflag == 0) {</code></p>
     <p><code>13   oflag = IPC_CREAT | IPC_EXCL | SVSEM_MODE;</code></p>
     <p><code>14   if ((semid = semget(Ftok(LOCK_PATH, 0), 1, oflag)) &gt;= 0) {</code></p>
     <p><code>15    /* этот процесс создал семафор первым, он же его и инициализирует */</code></p>
     <p><code>16    arg.val = 1;</code></p>
     <p><code>17    Semctl(semid, 0, SETVAL, arg);</code></p>
     <p><code>18   } else if (errno == EEXIST) {</code></p>
     <p><code>19    /* семафор создан другим процессом, убедимся, что он проинициализирован */</code></p>
     <p><code>20    semid = Semget(Ftok(LOCK_PATH, 0), 1, SVSEM_MODE);</code></p>
     <p><code>21    arg.buf = &amp;seminfo;</code></p>
     <p><code>22    for (i = 0; i &lt; MAX_TRIES; i++) {</code></p>
     <p><code>23     Semctl(semid, 0, IPC_STAT, arg);</code></p>
     <p><code>24     if (arg.buf-&gt;sem_otime != 0)</code></p>
     <p><code>25      goto init;</code></p>
     <p><code>26     sleep(1);</code></p>
     <p><code>27    }</code></p>
     <p><code>28    err_quit("semget OK, but semaphore not initialized");</code></p>
     <p><code>29   } else</code></p>
     <p><code>30    err_sys("semget error");</code></p>
     <p><code>31 init:</code></p>
     <p><code>32   initflag = 1;</code></p>
     <p><code>33   postop.sem_num = 0; /* инициализируем две структуры semop()*/</code></p>
     <p><code>34   postop.sem_op = 1;</code></p>
     <p><code>35   postop.sem_flg = SEM_UNDO;</code></p>
     <p><code>36   waitop.sem_num = 0;</code></p>
     <p><code>37   waitop.sem_op = –1;</code></p>
     <p><code>38   waitop.sem_flg = SEM_UNDO;</code></p>
     <p><code>39  }</code></p>
     <p><code>40  Semop(semid, &amp;waitop, 1); /* уменьшим на 1 */</code></p>
     <p><code>41 }</code></p>
     <empty-line/>
     <p><code>42 void</code></p>
     <p><code>43 my_unlock(int fd)</code></p>
     <p><code>44 {</code></p>
     <p><code>45  Semop(semid, &amp;postop, 1); /* увеличим на 1*/</code></p>
     <p><code>46 }</code></p>
     <subtitle>Попытка исключающего создания</subtitle>
     <p>13-17 Нам нужно гарантировать, что только один процесс проинициализирует семафор, поэтому при вызове semget мы указываем флаги IPC_CREAT | IPC_EXCL. Если этот вызов оказывается успешным, процесс вызывает semctl для инициализации семафора значением 1. Если мы запустим несколько процессов одновременно и все они вызовут функцию my_lock, только один из них создаст семафор (предполагается, что он еще не существует) и проинициализирует его.</p>
     <subtitle>Семафор уже существует, мы его открываем</subtitle>
     <p>18-20 Если первый вызов semget возвращает ошибку EEXIST, процесс вызывает semget еще раз, но уже без флагов IPC_CREAT и IPC_EXCL.</p>
     <subtitle>Ожидание инициализации семафора</subtitle>
     <p>21-28 В этой программе возникает такая же ситуация гонок, как и обсуждавшаяся в разделе 11.2, когда мы говорили об инициализации семафоров System V вообще. Для исключения такой ситуации все процессы, которые обнаруживают, что семафор уже создан, вызывают semctl с командой IPC_STAT, проверяя значение sem_otime данного семафора. Когда это значение становится ненулевым, мы можем быть уверены, что создавший семафор процесс проинициализировал его и вызвал semop (этот вызов находится в конце функции) успешно. Если значение этого поля оказывается нулевым (что должно происходить крайне редко), мы приостанавливаем выполнение процесса на одну секунду вызовом sleep, а затем повторяем попытку. Число попыток мы ограничиваем, чтобы процесс не «заснул» навсегда.</p>
     <subtitle>Инициализация структур sembuf</subtitle>
     <p>33-38 Как отмечалось ранее, конкретный порядок полей структуры sembuf зависит от реализации, поэтому статически инициализировать ее нельзя. Вместо этого мы выделяем место под две такие структуры и присваиваем значения их полям во время выполнения программы, когда процесс вызывает my_lock в первый раз. При этом мы указываем флаг SEM_UNDO, чтобы ядро сняло блокировку, если процесс завершит свою работу, не сняв ее самостоятельно (см. упражнение 10.3).</p>
     <p>Создание семафора при первой необходимости реализовать довольно просто (все процессы пытаются создать семафор, игнорируя ошибку, если он уже существует), но удаление семафора после завершения работы всех процессов организовать гораздо сложнее. В случае демона печати, использующего файл с последовательным номером для упорядочения заданий печати, удалять семафор нет необходимости. Но в других приложениях может возникнуть необходимость удалить семафор при удалении соответствующего файла. В этом случае лучше пользоваться блокировкой записи, чем семафором.</p>
    </section>
    <section>
     <title>
      <p>11.7. Ограничения семафоров System V</p>
     </title>
     <section>
      <p>На семафоры System V накладываются определенные системные ограничения, так же, как и на очереди сообщений. Большинство этих ограничений были связаны с особенностями реализации System V (раздел 3.8). Они показаны в табл. 11.1. Первая колонка содержит традиционное для System V имя переменной ядра, в которой хранится соответствующее oгрaничeниe.</p>
      <empty-line/>
      <p>Таблица 11.1. Типичные значения ограничений для семафоров System V</p>
      <table>
       <tr align="left">
        <th align="left" valign="top">Имя</th>
        <th align="left" valign="top">Описание</th>
        <th align="left" valign="top">DUnix 4.0B</th>
        <th align="left" valign="top">Solaris 2.6</th>
       </tr>
       <tr align="left">
        <td align="left" valign="top">semmni</td>
        <td align="left" valign="top">Максимальное количество наборов семафоров в системе</td>
        <td align="left" valign="top">16</td>
        <td align="left" valign="top">10</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">semmsl</td>
        <td align="left" valign="top">Максимальное количество семафоров в наборе</td>
        <td align="left" valign="top">25</td>
        <td align="left" valign="top">25</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">semmns</td>
        <td align="left" valign="top">Максимальное количество семафоров в системе</td>
        <td align="left" valign="top">400</td>
        <td align="left" valign="top">60</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">semopm</td>
        <td align="left" valign="top">Максимальное количество операций за один вызов semop</td>
        <td align="left" valign="top">10</td>
        <td align="left" valign="top">10</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">semmnu</td>
        <td align="left" valign="top">Максимальное количество структур undo в системе</td>
        <td align="left" valign="top"/>
        <td align="left" valign="top">30</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">semume</td>
        <td align="left" valign="top">Максимальное количество записей в структуре undo</td>
        <td align="left" valign="top">10</td>
        <td align="left" valign="top">10</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">semvmx</td>
        <td align="left" valign="top">Максимальное значение семафора</td>
        <td align="left" valign="top">32767</td>
        <td align="left" valign="top">32767</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">semaem</td>
        <td align="left" valign="top">Максимальное значение корректировки при выходе</td>
        <td align="left" valign="top">16384</td>
        <td align="left" valign="top">16384</td>
       </tr>
      </table>
      <p>В Digital Unix 4.0B никакого ограничения на semmnu не существует.</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Программа в листинге 11.7 позволяет определить ограничения, приведенные в табл. 11.1.</p>
      <subtitle>Листинг 11.7. Определение системных ограничений на семафоры System V</subtitle>
      <p><code>//svsem/limits.c</code></p>
      <p><code>1   #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2   /* максимальные величины, выше которых ограничение не проверяется */</code></p>
      <p><code>3   #define MAX_NIDS 4096 /* максимальное количество идентификаторов семафоров */</code></p>
      <p><code>4   #define MAX_VALUE 1024*1024 /* максимальное значение семафора */</code></p>
      <p><code>5   #define MAX_MEMBERS 4096 /* максимальное количество семафоров в наборе */</code></p>
      <p><code>6   #define MAX_NOPS 4096 /* максимальное количество операций за вызов semop */</code></p>
      <p><code>7   #define MAX_NPROC Sysconf(_SC_CHILD_MAX)</code></p>
      <empty-line/>
      <p><code>8   int</code></p>
      <p><code>9   main(int argc, char **argv)</code></p>
      <p><code>10  {</code></p>
      <p><code>11   int i, j, semid, sid[MAX_NIDS], pipefd[2];</code></p>
      <p><code>12   int semmni, semvmx, semmsl, semmns, semopn, semaem, semume, semmnu;</code></p>
      <p><code>13   pid_t *child;</code></p>
      <p><code>14   union semun arg;</code></p>
      <p><code>15   struct sembuf ops[MAX_NOPS];</code></p>
      <p><code>16   /* сколько наборов с одним элементом можно создать? */</code></p>
      <p><code>17   for (i = 0; i &lt;= MAX_NIDS; i++) {</code></p>
      <p><code>18    sid[i] = semget(IPC_PRIVATE, 1, SVSEM_MODE | IPC_CREAT);</code></p>
      <p><code>19    if (sid[i] == –1) {</code></p>
      <p><code>20     semmni = i;</code></p>
      <p><code>21     printf("%d identifiers open at once\n", semmni);</code></p>
      <p><code>22     break;</code></p>
      <p><code>23    }</code></p>
      <p><code>24   }</code></p>
      <p><code>25   /* перед удалением находим максимальное значение, используя sid[0] */</code></p>
      <p><code>26   for (j = 7; j &lt; MAX_VALUE; j += 8) {</code></p>
      <p><code>27    arg.val = j;</code></p>
      <p><code>28    if (semctl(sid[0], 0, SETVAL, arg) == –1) {</code></p>
      <p><code>29     semvmx = j – 8;</code></p>
      <p><code>30     printf("max semaphore value = %d\n", semvmx);</code></p>
      <p><code>31     break;</code></p>
      <p><code>32    }</code></p>
      <p><code>33   }</code></p>
      <p><code>34   for (j = 0; j &lt; i; j++)</code></p>
      <p><code>35    Semctl(sid[j], 0, IPC_RMID);</code></p>
      <p><code>36   /* определяем максимальное количество семафоров в наборе */</code></p>
      <p><code>37   for (i = 1; i &lt;= MAX_MEMBERS; i++) {</code></p>
      <p><code>38    semid = semget(IPC_PRIVATE, i, SVSEM_MODE | IPC_CREAT);</code></p>
      <p><code>39    if (semid == –1) {</code></p>
      <p><code>40     semmsl = i-1;</code></p>
      <p><code>41     printf("max of %d members per set\n", semmsl);</code></p>
      <p><code>42     break;</code></p>
      <p><code>43    }</code></p>
      <p><code>44    Semctl(semid, 0, IPC_RMID);</code></p>
      <p><code>45   }</code></p>
      <p><code>46   /* сколько всего семафоров можно создать? */</code></p>
      <p><code>47   semmns = 0;</code></p>
      <p><code>48   for (i = 0; i &lt; semmni; i++) {</code></p>
      <p><code>49    sid[i] = semget(IPC_PRIVATE, semmsl, SVSEM_MODE | IPC_CREAT);</code></p>
      <p><code>50    if (sid[i] == –1) {</code></p>
      <p><code>51     /*</code></p>
      <p><code>52      До этого в наборе было semmsl элементов,</code></p>
      <p><code>53      но теперь мы уменьшаем количество элементов на 1 и смотрим.</code></p>
      <p><code>54      не получится ли создать семафор</code></p>
      <p><code>55     */</code></p>
      <p><code>56     for (j = semmsl-1; j &gt; 0; j--) {</code></p>
      <p><code>57      sid[1] = semget(IPC_PRIVATE, j, SVSEM_MODE | IPC_CREAT);</code></p>
      <p><code>58      if (sid[i] != –1) {</code></p>
      <p><code>59       semmns += j;</code></p>
      <p><code>60       printf("max of %d semaphores\n", semmns);</code></p>
      <p><code>61       Semctl(sid[i], 0, IPC_RMID);</code></p>
      <p><code>62       goto done;</code></p>
      <p><code>63      }</code></p>
      <p><code>64     }</code></p>
      <p><code>65     err_quit("j reached 0, semmns = %d", semmns);</code></p>
      <p><code>66    }</code></p>
      <p><code>67    semmns += semmsl;</code></p>
      <p><code>68   }</code></p>
      <p><code>69   printf("max of %d semaphores\n", semns);</code></p>
      <p><code>70  done:</code></p>
      <p><code>71   for (j = 0; j &lt; i; j++)</code></p>
      <p><code>72    Semctl(sid[j], 0, IPC_RMID);</code></p>
      <p><code>73   /* определяем количество операций за вызов semop() */</code></p>
      <p><code>74   semid = Semget(IPC_PRIVATE, semmsl, SVSEM_MODE | IPC_CREAT);</code></p>
      <p><code>75   for (i = 1; i &lt;= MAX_NOPS; i++) {</code></p>
      <p><code>76    ops[i-1].sem_num = i-1;</code></p>
      <p><code>77    ops[i-1].sem_op = 1;</code></p>
      <p><code>78    ops[i-1].sem_flg = 0;</code></p>
      <p><code>79    if (semop(semid, ops, i) += –1) {</code></p>
      <p><code>80     if (errno != E2BIG)</code></p>
      <p><code>81      err_sys("expected E2BIG from semop");</code></p>
      <p><code>82     semopn = i-1;</code></p>
      <p><code>83     printf("max of %d operations per semop()\n", semopn);</code></p>
      <p><code>84     break;</code></p>
      <p><code>85    }</code></p>
      <p><code>86   }</code></p>
      <p><code>87   Semctl(semid, 0, IPC_RMID);</code></p>
      <p><code>88   /* определение максимального значения semadj */</code></p>
      <p><code>89   /* создание одного набора с одним семафором */</code></p>
      <p><code>90   semid = Semget(IPC_PRIVATE, 1, SVSEM_MODE | IPC_CREAT);</code></p>
      <p><code>91   arg.val = semvmx;</code></p>
      <p><code>92   Semctl(semid, 0, SETVAL, arg); /* устанавливаем значение на максимум */</code></p>
      <p><code>93   for (i = semvmx-1; i &gt; 0; i--) {</code></p>
      <p><code>94    ops[0].sem_num = 0;</code></p>
      <p><code>95    ops[0].sem_op = –i;</code></p>
      <p><code>96    ops[0].sem_flg = SEM_UNDO;</code></p>
      <p><code>97    if (semop(semid, ops, 1) != –1) {</code></p>
      <p><code>98     semaem = i;</code></p>
      <p><code>99     printf("max value of adjust-on-exit = %d\n", semaem);</code></p>
      <p><code>100    break;</code></p>
      <p><code>101   }</code></p>
      <p><code>102  }</code></p>
      <p><code>103  Semctl(semid, 0, IPC_RMID);</code></p>
      <p><code>104  /* определение максимального количества структур UNDO */</code></p>
      <p><code>105  /* создаем один набор с одним семафором и инициализируем нулем */</code></p>
      <p><code>106  semid = Semget(IPC_PRIVATE, 1, SVSEM_MODE | IPC_CREAT);</code></p>
      <p><code>107  arg.val = 0;</code></p>
      <p><code>108  Semctl(semid, 0, SETVAL, arg); /* установка значения семафора в 0 */</code></p>
      <p><code>109  Pipe(pipefd);</code></p>
      <p><code>110  child = Malloc(MAX_NPROC * sizeof(pid_t));</code></p>
      <p><code>111  for (i = 0; i &lt; MAX_NPROC; i++) {</code></p>
      <p><code>112   if ((child[i] = fork()) == –1) {</code></p>
      <p><code>113    semmnu = i – 1;</code></p>
      <p><code>114    printf("fork failed, semmnu at least %d\n", semmnu);</code></p>
      <p><code>115    break;</code></p>
      <p><code>116   } else if (child[i] == 0) {</code></p>
      <p><code>117    ops[0].sem_num = 0; /* дочерний процесс вызывает semop() */</code></p>
      <p><code>118    ops[0].sem_op = 1;</code></p>
      <p><code>119    ops[0].sem_flg = SEM_UNDO;</code></p>
      <p><code>120    j = semop(semid, ops, 1); /* 0 в случае успешного завершения. –1 – в случае ошибки */</code></p>
      <p><code>121    Write(pipefd[1], &amp;j, sizeof(j));</code></p>
      <p><code>122    sleep(30); /* ожидает завершения родительским процессом */</code></p>
      <p><code>123    exit(0); /* на всякий случай */</code></p>
      <p><code>124   }</code></p>
      <p><code>125   /* родительский процесс считывает результат вызова semop() */</code></p>
      <p><code>126   Read(pipefd[0], &amp;j, sizeof(j));</code></p>
      <p><code>127   if (j == –1) {</code></p>
      <p><code>128    semmnu = i;</code></p>
      <p><code>129    printf("max # undo structures = %d\n", semmnu);</code></p>
      <p><code>130    break;</code></p>
      <p><code>131   }</code></p>
      <p><code>132  }</code></p>
      <p><code>133  Semctl(semid, 0, IPC_RMID);</code></p>
      <p><code>134  for (j = 0; j &lt;= i &amp;&amp; child[j] &gt; 0; j++)</code></p>
      <p><code>135   Kill(child[j], SIGINT);</code></p>
      <p><code>136  /* определение максимального количества записей корректировки на процесс */</code></p>
      <p><code>137  /* создание одного набора с максимальным количеством семафоров */</code></p>
      <p><code>138  semid = Semget(IPC_PRIVATE, semmsl, SVSEM_MODE | IPC_CREAT);</code></p>
      <p><code>139  for (i = 0; i &lt; semmsl; i++) {</code></p>
      <p><code>140   arg.val = 0;</code></p>
      <p><code>141   Semctl(semid, i, SETVAL, arg); /* установка значения семафора в 0 */</code></p>
      <p><code>142   ops[i].sem_num = i;</code></p>
      <p><code>143   ops[i].sem_op = 1; /* добавляем 1 к значению семафора */</code></p>
      <p><code>144   ops[i].sem_flg = SEM_UNDO;</code></p>
      <p><code>145   if (semop(semid, ops, i+1) == –1) {</code></p>
      <p><code>146    semume = i;</code></p>
      <p><code>147    printf("max # undo entries per process = %d\n", semume);</code></p>
      <p><code>148    break;</code></p>
      <p><code>149   }</code></p>
      <p><code>150  }</code></p>
      <p><code>151  Semctl(semid, 0, IPC_RMID);</code></p>
      <p><code>152  exit(0);</code></p>
      <p><code>153 }</code></p>
     </section>
    </section>
    <section>
     <title>
      <p>11.8. Резюме</p>
     </title>
     <p>У семафоров System V имеются следующие отличия от семафоров Posix:</p>
     <p>1. Семафоры System V представляют собой набор значений. Последовательность операций над набором семафоров либо выполняется целиком, либо не выполняется вовсе.</p>
     <p>2. К любому элементу набора семафоров могут быть применены три операции: проверка на нулевое значение, добавление некоторого значения к текущему и вычитание некоторого значения из текущего (в предположении, что значение остается неотрицательным). Для семафоров Posix определены только операции увеличения и уменьшения значения семафора на 1 (в предположении, что значение остается неотрицательным).</p>
     <p>3. Создание семафора System V имеет некоторую особенность, заключающуюся в необходимости выполнения двух вызовов для создания и инициализации семафора, что может привести к ситуации гонок.</p>
     <p>4. Семафоры System V предоставляют возможность отмены операции с ними <emphasis>(undo)</emphasis> после завершения работы процесса.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Листинг 6.6 представлял собой измененный вариант листинга 6.4, в котором программа принимала идентификатор очереди вместо полного имени файла. Мы продемонстрировали, что для получения доступа к очереди System V достаточно знать только ее идентификатор (предполагается наличие достаточных разрешений). Проделайте аналогичные изменения с программой в листинге 11.5 и посмотрите, верно ли вышесказанное для семафоров System V.</p>
     <p>2. Что произойдет с программой в листинге 11.6, если файл LOCK_PATH не будет существовать?</p>
    </section>
   </section>
  </section>
  <section>
   <title>
    <p>ЧАСТЬ 4</p>
    <p>РАЗДЕЛЯЕМАЯ ПАМЯТЬ</p>
   </title>
   <section>
    <title>
     <p>ГЛАВА 12</p>
     <p>Введение в разделяемую память</p>
    </title>
    <section>
     <title>
      <p>12.1. Введение</p>
     </title>
     <p>Разделяемая память является наиболее быстрым средством межпроцессного взаимодействия. После отображения области памяти в адресное пространство процессов, совместно ее использующих, для передачи данных между процессами больше не требуется участие ядра. Обычно, однако, требуется некоторая форма синхронизации процессов, помещающих данные в разделяемую память и считывающих ее оттуда. В части 3 мы обсуждали различные средства синхронизации: взаимные исключения, условные переменные, блокировки чтения-записи, блокировки записей и семафоры.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Говоря «не требуется участие ядра», мы подразумеваем, что процессы не делают системных вызовов для передачи данных. Очевидно, что все равно именно ядро обеспечивает отображение памяти, позволяющее процессам совместно ею пользоваться, и затем обслуживает эту память (обрабатывает сбои страниц и т. п.).</p>
     </cite>
     <p>Рассмотрим по шагам работу программы копирования файла типа клиент-сервер, которую мы использовали в качестве примера для иллюстрации различных способов передачи сообщений (рис. 4.1).</p>
     <p>&#9632; Сервер считывает данные из входного файла. Данные из файла считываются ядром в свою память, а затем копируются из ядра в память процесса.</p>
     <p>&#9632; Сервер составляет сообщение из этих данных и отправляет его, используя именованный или неименованный канал или очередь сообщений. Эти формы IPC обычно требуют копирования данных из процесса в ядро.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Мы говорим «обычно», поскольку очереди сообщений Posix могут быть реализованы через отображение файла в память (функцию mmap мы опишем в этой главе), как мы показали в разделе 5.8 и в решении упражнения 12.2. На рис. 12.1 мы предполагаем, что очереди сообщений Posix реализованы в ядре, что также возможно. Но именованные и неименованные каналы и очереди сообщений System V требуют копирования данных из процесса в ядро вызовом write или msgsnd или копирования данных из ядра процессу вызовом read или msgrcv. </p>
     </cite>
     <p>&#9632; Клиент считывает данные из канала IPC, что обычно требует их копирования из ядра в пространство процесса.</p>
     <p>&#9632; Наконец, данные копируются из буфера клиента (второй аргумент вызова write) в выходной файл.</p>
     <p>Таким образом, для копирования файла обычно требуются четыре операции копирования данных. К тому же эти операции копирования осуществляются между процессами и ядром, что часто является дорогостоящей операцией (более дорогостоящей, чем копирование данных внутри ядра или внутри одного процесса). На рис. 12.1 изображено перемещение данных между клиентом и сервером через ядро. </p>
     <image l:href="#Any2FbImgLoader193"/>
     <p>Рис. 12.1. Передача содержимого файла от сервера к клиенту</p>
     <empty-line/>
     <p>Недостатком этих форм IPC — именованных и неименованных каналов — является то, что для передачи между процессами информация должна пройти через ядро.</p>
     <p>Разделяемая память дает возможность обойти этот недостаток, поскольку ее использование позволяет двум процессам обмениваться данными через общий участок памяти. Процессы, разумеется, должны синхронизировать и координировать свои действия. Одновременное использование участка памяти во многом аналогично совместному доступу к файлу, например к файлу с последовательным номером, который фигурировал во всех примерах на блокировку доступа к файлам. Для синхронизации такого рода может применяться любой из методов, описанных в третьей части книги.</p>
     <p>Теперь информация передается между клиентом и сервером в такой последовательности:</p>
     <p>&#9632; сервер получает доступ к объекту разделяемой памяти, используя для синхронизации семафор (например);</p>
     <p>&#9632; сервер считывает данные из файла в разделяемую память. Второй аргумент вызова read (адрес буфера) указывает на объект разделяемой памяти;</p>
     <p>&#9632; после завершения операции считывания клиент уведомляется сервером с помощью семафора;</p>
     <p>&#9632; клиент записывает данные из объекта разделяемой памяти в выходной файл. </p>
     <image l:href="#Any2FbImgLoader194"/>
     <p>Рис. 12.2. Копирование файла через разделяемую память</p>
     <empty-line/>
     <p>Этот сценарий иллюстрирует рис. 12.2.</p>
     <p>Из этого рисунка видно, что копирование данных происходит всего лишь дважды: из входного файла в разделяемую память и из разделяемой памяти в выходной файл. Мы нарисовали два прямоугольника штриховыми линиями; они подчеркивают, что разделяемая память принадлежит как адресному пространству клиента, так и адресному пространству сервера.</p>
     <p>Концепции, связанные с использованием разделяемой памяти через интерфейсы Posix и System V, похожи. Первый интерфейс описан в главе 13, а второй — в главе 14.</p>
     <p>В этой главе мы возвращаемся к примеру с увеличением последовательного номера, который впервые появился в главе 9. Теперь мы будем хранить последовательный номер в сегменте разделяемой памяти, а не в файле.</p>
     <p>Сначала мы подчеркнем, что память разделяется между родительским и дочерним процессами при вызове fork. В пpoгрaммe из листинга 12.1<a l:href="#n_1" type="note">[1]</a> родительский и дочерний процессы по очереди увеличивают глобальный целочисленный счетчик count.</p>
     <subtitle>Листинг 12.1. Увеличение глобального счетчика родительским и дочерним процессами</subtitle>
     <p><code>//shm/incr1.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define SEM_NAME "mysem"</code></p>
     <p><code>3  int count = 0;</code></p>
     <empty-line/>
     <p><code>4  int</code></p>
     <p><code>5  main(int argc, char **argv)</code></p>
     <p><code>6  {</code></p>
     <p><code>7   int i, nloop;</code></p>
     <p><code>8   sem_t *mutex;</code></p>
     <p><code>9   if (argc != 2)</code></p>
     <p><code>10   err_quit("usage: incr1 &lt;#loops&gt;");</code></p>
     <p><code>11  nloop = atoi(argv[1]);</code></p>
     <p><code>12  /* создание, инициализация и удаление семафора */</code></p>
     <p><code>13  mutex = Sem_open(Px_ipc_name(SEM_NAME), O_CREAT | O_EXCL, FILE_MODE, 1);</code></p>
     <p><code>14  Sem_unlink(Px_ipc_name(SEM_NAME));</code></p>
     <p><code>15  setbuf(stdout, NULL); /* stdout не буферизуется */</code></p>
     <p><code>16  if (Fork() == 0) { /* дочерний процесс */</code></p>
     <p><code>17   for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>18    Sem_wait(mutex);</code></p>
     <p><code>19    printf("child: %d\n", count++);</code></p>
     <p><code>20    Sem_post(mutex);</code></p>
     <p><code>21   }</code></p>
     <p><code>22   exit(0);</code></p>
     <p><code>23  }</code></p>
     <p><code>24  /* родительский процесс */</code></p>
     <p><code>25  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>26   Sem_wait(mutex);</code></p>
     <p><code>27   printf("parent: %d\r\", count++);</code></p>
     <p><code>28   Sem_post(mutex);</code></p>
     <p><code>29  }</code></p>
     <p><code>30  exit(0);</code></p>
     <p><code>31 }</code></p>
     <subtitle>Создание и инициализация семафора</subtitle>
     <p>12-14 Мы создаем и инициализируем семафор, защищающий переменную, которую мы считаем глобальной (count). Поскольку предположение о ее глобальности ложно, этот семафор на самом деле не нужен. Обратите внимание, что мы удаляем семафор из системы вызовом sem_unlink, но хотя файл с соответствующим полным именем при этом и удаляется, на открытый в данный момент семафор эта команда не действует. Этот вызов мы делаем для того, чтобы файл был удален даже при досрочном завершении программы.</p>
     <subtitle>Отключение буферизации стандартного потока вывода и вызов fork</subtitle>
     <p>15 Мы отключаем буферизацию стандартного потока вывода, поскольку запись в него будет производиться и родительским, и дочерним процессами. Это предотвращает смешивание вывода из двух процессов.</p>
     <p>16-29 Родительский и дочерний процессы увеличивают глобальный счетчик в цикле заданное число раз, выполняя операции только при установленном семафоре.</p>
     <p>Если мы запустим эту программу на выполнение и посмотрим на результат, обращая внимание только на те строки, где система переключается между родительским и дочерним процессами, мы увидим вот что:</p>
     <p><code>child: 0     <emphasis>дочерний процесс запущен первым,count=О</emphasis></code></p>
     <p><code>child; 1</code></p>
     <p><code>…</code></p>
     <p><code>child; 678</code></p>
     <p><code>child: 679</code></p>
     <p><code>parent: 0    <emphasis>дочерний процесс приостановлен, запускается родительский</emphasis></code></p>
     <p><code><emphasis>             процесс и отсчет начинается с О</emphasis></code></p>
     <p><code>parent: 1</code></p>
     <p><code>…</code></p>
     <p><code>parent: 1220</code></p>
     <p><code>parent: 1221</code></p>
     <p><code>child: 680   <emphasis>родительский процесс приостанавливается, начинает</emphasis></code></p>
     <p><code><emphasis>             выполняться дочерний процесс</emphasis></code></p>
     <p><code>child: 681</code></p>
     <p><code>…</code></p>
     <p><code>child: 2078</code></p>
     <p><code>child: 2079</code></p>
     <p><code>parent: 1222 <emphasis>дочерний процесс приостанавливается, начинает выполняться</emphasis></code></p>
     <p><code><emphasis>             родительский процесс</emphasis></code></p>
     <p><code>parent: 1223 и т. д.</code></p>
     <p>Как видно, каждый из процессов использует собственную копию глобального счетчика count. Каждый начинает со значения 0 и при прохождении цикла увеличивает значение своей копии счетчика. На рис. 12.3 изображен родительский процесс перед вызовом fork.</p>
     <image l:href="#Any2FbImgLoader195"/>
     <p>Рис. 12.3. Родительский процесс перед вызовом fork</p>
     <empty-line/>
     <p>При вызове fork дочерний процесс запускается с собственной копией данных родительского процесса. На рис. 12.4 изображены оба процесса после возвращения из fork.</p>
     <image l:href="#Any2FbImgLoader197"/>
     <p>Рис. 12.4. Родительский и дочерний процессы после возвращения из fork</p>
     <empty-line/>
     <p>Мы видим, что родительский и дочерний процессы используют отдельные копии счетчика count.</p>
    </section>
    <section>
     <title>
      <p>12.2. Функции mmap, munmap и msync</p>
     </title>
     <section>
      <p>Функция mmap отображает в адресное пространство процесса файл или объект разделяемой памяти Posix. Мы используем эту функцию в следующих ситуациях:</p>
      <p>1. С обычными файлами для обеспечения ввода-вывода через отображение в память (раздел 12.3).</p>
      <p>2. Со специальными файлами для обеспечения неименованного отображения памяти (разделы 12.4 и 12.5).</p>
      <p>3. С shm_open для создания участка разделяемой неродственными процессами памяти Posix.</p>
      <p><code>#include &lt;sys/mman.h&gt;</code></p>
      <p><code>void *mmap(void <emphasis>*addr,</emphasis> size_t <emphasis>len,</emphasis> int <emphasis>prot,</emphasis> int <emphasis>flags,</emphasis> int <emphasis>fd,</emphasis> off_t <emphasis>offset</emphasis>);</code></p>
      <p><code>/* Возвращает начальный адрес участка памяти в случае успешного завершения. MAP_FAILED – в случае ошибки */</code></p>
      <p>Аргумент <emphasis>addr</emphasis> может указывать начальный адрес участка памяти процесса, в который следует отобразить содержимое дескриптора <emphasis>fd</emphasis>. Обычно ему присваивается значение нулевого указателя, что говорит ядру о необходимости выбрать начальный адрес самостоятельно. В любом случае функция возвращает начальный адрес сегмента памяти, выделенной для отображения.</p>
      <p>Аргумент <emphasis>len</emphasis> задает длину отображаемого участка в байтах; участок может начинаться не с начала файла (или другого объекта), а с некоторого места, задаваемого аргументом <emphasis>offset.</emphasis> Обычно <emphasis>offset</emphasis> = 0. На рис. 12.5 изображена схема отображения объекта в память.</p>
      <image l:href="#Any2FbImgLoader200"/>
      <p>Рис. 12.5. Пример отображения файла в память</p>
      <empty-line/>
      <p>Защита участка памяти с отображенным объектом обеспечивается с помощью аргумента <emphasis>prot</emphasis> и констант, приведенных в табл. 12.1. Обычное значение этого аргумента — PROT_READ | PROT_WRITE, что обеспечивает доступ на чтение и запись.</p>
      <empty-line/>
      <p>Таблица 12.1. Аргумент prot для вызова mmap</p>
      <table>
       <tr align="left">
        <th align="left" valign="top">prot</th>
        <th align="left" valign="top">Описание</th>
       </tr>
       <tr align="left">
        <td align="left" valign="top">PROT_READ</td>
        <td align="left" valign="top">Данные могут быть считаны</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">PROT_WRITE</td>
        <td align="left" valign="top">Данные могут быть записаны</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">PROT_EXEC</td>
        <td align="left" valign="top">Данные могут быть выполнены</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">PROT_NONE</td>
        <td align="left" valign="top">Доступ к данным закрыт</td>
       </tr>
      </table>
      <empty-line/>
      <p>Таблица 12.2. Аргумент flag для вызова mmap</p>
      <table>
       <tr align="left">
        <th align="left" valign="top">flag</th>
        <th align="left" valign="top">Описание</th>
       </tr>
       <tr align="left">
        <td align="left" valign="top">MAP SHARED</td>
        <td align="left" valign="top">Изменения передаются другим процессам</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">MAP_PRIVATE</td>
        <td align="left" valign="top">Изменения не передаются другим процессам и не влияют на отображенный объект</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">MAP_FIXED</td>
        <td align="left" valign="top">Аргумент <emphasis>addr</emphasis> интерпретируется как адрес памяти</td>
       </tr>
      </table>
      <p>Аргумент <emphasis>flags </emphasis>может принимать значения из табл. 12.2. Можно указать только один из флагов — MAP_SHARED или MAP_PRIVATE, прибавив к нему при необходимости MAP_FIXED. Если указан флаг MAP_PRIVATE, все изменения будут производиться только с образом объекта в адресном пространстве процесса; другим процессам они доступны не будут. Если же указан флаг MAP_SHARED, изменения отображаемых данных видны всем процессам, совместно использующим объект.</p>
      <p>Для обеспечения переносимости пpoгрaмм флаг MAP_FIXED указывать не следует. Если он не указан, но аргумент <emphasis>addr</emphasis> представляет собой ненулевой указатель, интерпретация этого аргумента зависит от реализации. Ненулевое значение <emphasis>addr</emphasis> обычно трактуется как указатель на желаемую область памяти, в которую нужно произвести отображение. В переносимой программе значение <emphasis>addr</emphasis> должно быть нулевым и флаг MAP_FIXED не должен быть указан.</p>
      <p>Одним из способов добиться совместного использования памяти родительским и дочерним процессами является вызов mmap с флагом MAP_SHARED перед вызовом fork. Стандарт Posix.1 гарантирует в этом случае, что все отображения памяти, установленные родительским процессом, будут унаследованы дочерним. Более того, изменения в содержимом объекта, вносимые родительским процессом, будут видны дочернему, и наоборот. Эту схему мы вскоре продемонстрируем в действии.</p>
      <p>Для отключения отображения объекта в адресное пространство процесса используется вызов munmap:</p>
      <p><code>#include &lt;sys/mman.h&gt;</code></p>
      <p><code>int munmap(void <emphasis>*addr,</emphasis> size_t <emphasis>len</emphasis>);</code></p>
      <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
      <p>Аргумент <emphasis>addr</emphasis> должен содержать адрес, возвращенный mmap, a <emphasis>len —</emphasis> длину области отображения. После вызова munmap любые попытки обратиться к этой области памяти приведут к отправке процессу сигнала SIGSEGV (предполагается, что эта область памяти не будет снова отображена вызовом mmap).</p>
      <p>Если область была отображена с флагом MAP_PRIVATE, все внесенные за время работы процесса изменения сбрасываются.</p>
      <p>В изображенной на рис. 12.5 схеме ядро обеспечивает синхронизацию содержимого файла, отображенного в память, с самой памятью при помощи алгоритма работы с виртуальной памятью (если сегмент был отображен с флагом MAP_SHARED). Если мы изменяем содержимое ячейки памяти, в которую отображен файл, через некоторое время содержимое файла будет соответствующим образом изменено ядром. Однако в некоторых случаях нам нужно, чтобы содержимое файла всегда было в соответствии с содержимым памяти. Тогда для осуществления моментальной синхронизации мы вызываем msync:</p>
      <p><code>#include &lt;sys/mman.h&gt;</code></p>
      <p><code>int msync(void <emphasis>*addr,</emphasis> size_t <emphasis>len</emphasis>, int <emphasis>flags</emphasis>);</code></p>
      <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
      <p>Аргумент <emphasis>flags</emphasis> представляет собой комбинацию констант из табл. 12.3.</p>
      <empty-line/>
      <p>Таблица 12.3. Значения аргумента flags для функции msync</p>
      <table>
       <tr align="left">
        <th align="left" valign="top">Константа</th>
        <th align="left" valign="top">Описание</th>
       </tr>
       <tr align="left">
        <td align="left" valign="top">MS_ASYNC</td>
        <td align="left" valign="top">Осуществлять асинхронную запись</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">MS_SYNC</td>
        <td align="left" valign="top">Осуществлять синхронную запись</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">MS_INVALIDATE</td>
        <td align="left" valign="top">Сбросить кэш</td>
       </tr>
      </table>
      <p>Из двух констант MS_ASYNC и MS_SYNC указать нужно одну и только одну. Отличие между ними в том, что возврат из функции при указании флага MS_ASYNC происходит сразу же, как только данные для записи будут помещены в очередь ядром, а при указании флага MS_SYNC возврат происходит только после завершения операций записи. Если указан и флаг MS_INVALIDATE, все копии файла, содержимое которых не совпадает с его текущим содержимым, считаются устаревшими. Последующие обращения к этим копиям приведут к считыванию данных из файла.</p>
     </section>
     <section>
      <title>
       <p>Почему вообще используется отображение в память?</p>
      </title>
      <p>До сих пор мы всегда говорили об отображении в память содержимого файла, который сначала открывается вызовом open, а затем отображается вызовом mmap. Удобство состоит в том, что все операции ввода-вывода осуществляются ядром и скрыты от программиста, а он просто пишет код, считывающий и записывающий данные в некоторую область памяти. Ему не приходится вызывать read, write или lseek. Часто это заметно упрощает код.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Вспомните нашу реализацию очередей сообщений Posix с использованием mmap, где значения сохранялись в структуре msg_hdr и считывались из нее же (листинги 5.26 и 5.28).</p>
      </cite>
      <p>Следует, однако, иметь в виду, что не все файлы могут быть отображены в память. Попытка отобразить дескриптор, указывающий на терминал или сокет, приведет к возвращению ошибки при вызове mmap. К дескрипторам этих типов доступ осуществляется только с помощью read и write (и аналогичных вызовов).</p>
      <p>Другой целью использования mmap может являться разделение памяти между неродственными процессами. В этом случае содержимое файла становится начальным содержимым разделяемой памяти и любые изменения, вносимые в нее процессами, копируются обратно в файл (что дает этому виду IPC живучесть файловой системы). Предполагается, что при вызове mmap указывается флаг MAP_SHARED, необходимый для разделения памяти между процессами.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Детали реализации mmap и связь этого вызова с механизмами реализации виртуальной памяти описаны в [14] для 4.4BSD и [6] для SVR4. </p>
      </cite>
     </section>
    </section>
    <section>
     <title>
      <p>12.3. Увеличение счетчика в отображаемом в память файле</p>
     </title>
     <p>Изменим программу в листинге 12.1 (которая не работала) таким образом, чтобы родительский и дочерний процессы совместно использовали область памяти, в которой хранится счетчик. Для этого используем отображение файла в память вызовами open и mmap. В листинге 12.2 приведен текст новой программы.</p>
     <subtitle>Листинг 12.2. Родительский и дочерний процессы увеличивают значение счетчика в разделяемой памяти</subtitle>
     <p><code>//shm/incr2.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define SEM_NAME "mysem"</code></p>
     <empty-line/>
     <p><code>3  int</code></p>
     <p><code>4  main(int argc, char **argv)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   int fd, i, nloop, zero = 0;</code></p>
     <p><code>7   int *ptr;</code></p>
     <p><code>8   sem_t *mutex;</code></p>
     <p><code>9   if (argc != 3)</code></p>
     <p><code>10   err_quit("usage: incr2 &lt;pathname&gt; &lt;#loops&gt;");</code></p>
     <p><code>11  nloop = atoi(argv[2]);</code></p>
     <p><code>12  /* открываем файл, инициализируем нулем и отображаем в память */</code></p>
     <p><code>13  fd = Open(argv[1], O_RDWR | O_CREAT, FILE_MODE);</code></p>
     <p><code>14  Write(fd, &amp;zero, sizeof(int));</code></p>
     <p><code>15  ptr = Mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</code></p>
     <p><code>16  Close(fd);</code></p>
     <p><code>17  /* создаем, инициализируем и отключаем семафор */</code></p>
     <p><code>18  mutex = Sem_open(Px_ipc_name(SEM_NAME), O_CREAT | O_EXCL, FILE_MODE, 1);</code></p>
     <p><code>19  Sem_unlink(Px_ipc_name(SEM_NAME));</code></p>
     <p><code>20  setbuf(stdout, NULL); /* stdout не буферизуется */</code></p>
     <p><code>21  if (Fork() == 0) { /* дочерний процесс */</code></p>
     <p><code>22   for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>23    Sem_wait(mutex);</code></p>
     <p><code>24    printf("child: %d\n", (*ptr)++);</code></p>
     <p><code>25    Sem_post(mutex);</code></p>
     <p><code>26   }</code></p>
     <p><code>27   exit(0);</code></p>
     <p><code>28  }</code></p>
     <p><code>29  /* родительский процесс */</code></p>
     <p><code>30  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>31   Sem_wait(mutex);</code></p>
     <p><code>32   printf("parent: %d\n", (*ptr)++);</code></p>
     <p><code>33   Sem_post(mutex);</code></p>
     <p><code>34  }</code></p>
     <p><code>35  exit(0);</code></p>
     <p><code>36 }</code></p>
     <subtitle>Новый аргумент командной строки</subtitle>
     <p>11-14 Из командной строки теперь считывается еще один аргумент, задающий полное имя файла, который будет отображен в память. Мы открываем файл для чтения и записи, причем если файл не существует, он будет создан, а затем инициализируем файл нулем.</p>
     <subtitle>Вызов mmap и закрытие дескриптора</subtitle>
     <p>15-16 Вызов mmap позволяет отобразить открытый файл в адресное пространство процесса. Первый аргумент является нулевым указателем, при этом система сама выбирает адрес начала отображаемого сегмента. Длина файла совпадает с размером целого числа. Устанавливается доступ на чтение и запись. Четвертый аргумент имеет значение MAP_SHARED, что позволяет процессам «видеть» изменения, вносимые друг другом. Функция возвращает адрес начала участка разделяемой памяти, мы сохраняем его в переменной ptr.</p>
     <subtitle>fork</subtitle>
     <p>20-34 Мы отключаем буферизацию стандартного потока вывода и вызываем fork. И родительский, и дочерний процессы по очереди увеличивают значение целого, на которое указывает ptr.</p>
     <p>Отображенные в память файлы обрабатываются при вызове fork специфическим образом в том смысле, что созданные родительским процессом отображения наследуются дочерним процессом. Следовательно, открыв файл и вызвав mmap с флагом MAP_SHARED, мы получили область памяти, совместно используемую родительским и дочерним процессами. Более того, поскольку эта общая область на самом деле представляет собой отображенный файл, все изменения, вносимые в нее (область памяти, на которую указывает ptr, — размером sizeof (int)), также действуют и на содержимое реального файла (имя которого было указано в командной строке).</p>
     <p>Запустив эту программу на выполнение, мы увидим, что память, на которую указывает ptr, действительно используется совместно родительским и дочерним процессами. Приведем значения счетчика перед переключением процессов:</p>
     <p><code>solaris % <strong>incr2 /tmp/temp.110000</strong></code></p>
     <p><code>child: 0     <emphasis>запускается дочерний процесс</emphasis></code></p>
     <p><code>child: 1</code></p>
     <p><code>…</code></p>
     <p><code>child: 128</code></p>
     <p><code>child: 129</code></p>
     <p><code>parent: 130  <emphasis>дочерний процесс приостанавливается, запускается родительский процесс</emphasis></code></p>
     <p><code>parent: 131</code></p>
     <p><code>…</code></p>
     <p><code>parent: 636</code></p>
     <p><code>parent: 637</code></p>
     <p><code>child: 638   <emphasis>родительский процесс приостанавливается, запускается дочерний процесс</emphasis></code></p>
     <p><code>child: 639</code></p>
     <p><code>…</code></p>
     <p><code>child: 1517</code></p>
     <p><code>child: 1518</code></p>
     <p><code>parent: 1519 <emphasis>дочерний процесс приостанавливается, запускается родительский процесс</emphasis></code></p>
     <p><code>parent: 1520</code></p>
     <p><code>…</code></p>
     <p><code>parent: 19999 <emphasis>последняя строка вывода</emphasis></code></p>
     <p><code>solaris % <strong>od –D /tmp/temp.1</strong></code></p>
     <p><code>0000000 0000020000</code></p>
     <p><code>0000004</code></p>
     <p>Поскольку использовалось отображение файла в память, мы можем взглянуть на его содержимое с помощью программы od и увидеть, что окончательное значение счетчика (20000) действительно было сохранено в файле.</p>
     <p>На рис. 12.6 изображена схема, отличающаяся от рис. 12.4. Здесь используется разделяемая память и показано, что семафор также используется совместно. Семафор мы изобразили размещенным в ядре, но для семафоров Posix это не обязательно. В зависимости от реализации семафор может обладать различной живучестью, но она должна быть по крайней мере не меньше живучести ядра. Семафор может быть реализован также через отображение файла в память, что мы продемонстрировали в разделе 10.15. </p>
     <image l:href="#Any2FbImgLoader202"/>
     <p>Рис. 12.6. Родительский и дочерний процессы используют разделяемую память и общий семафор </p>
     <empty-line/>
     <p>Мы показали, что у родительского и дочернего процессов имеются собственные копии указателя ptr, но обе копии указывают на одну и ту же область памяти — счетчик, увеличиваемый обоими процессами.</p>
     <p>Изменим программу в листинге 12.2 так, чтобы использовались семафоры Posix, размещаемые в памяти (вместо именованных). Разместим такой семафор в разделяемой области памяти. Новая программа приведена в листинге 12.3.</p>
     <subtitle>Листинг 12.3. Счетчик и семафор размещены в разделяемой памяти</subtitle>
     <p><code>//shm/incr3.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  struct shared {</code></p>
     <p><code>3   sem_t mutex; /* взаимное исключение: семафор, размещаемый в памяти */</code></p>
     <p><code>4   int count; /* и счетчик */</code></p>
     <p><code>5  } shared;</code></p>
     <empty-line/>
     <p><code>6  int</code></p>
     <p><code>7  main(int argc, char **argv)</code></p>
     <p><code>8  {</code></p>
     <p><code>9   int fd, i, nloop;</code></p>
     <p><code>10  struct shared *ptr;</code></p>
     <p><code>11  if (argc != 3)</code></p>
     <p><code>12   err_quit("usage: incr3 &lt;pathname&gt; &lt;#loops&gt;");</code></p>
     <p><code>13  nloop = atoi(argv[2]);</code></p>
     <p><code>14  /* открываем файл, инициализируем нулем, отображаем в память */</code></p>
     <p><code>15  fd = Open(argv[1], O_RDWR | O_CREAT, FILE_MODE);</code></p>
     <p><code>16  Write(fd, &amp;shared, sizeof(struct shared));</code></p>
     <p><code>17  ptr = Mmap(NULL, sizeof(struct shared), PROT_READ | PROT_WRITE,</code></p>
     <p><code>18   MAP_SHARED, fd, 0);</code></p>
     <p><code>19  Close(fd);</code></p>
     <p><code>20  /* инициализация семафора, совместно используемого процессами */</code></p>
     <p><code>21  Sem_init(&amp;ptr-&gt;mutex, 1, 1);</code></p>
     <p><code>22  setbuf(stdout, NULL); /* stdout не буферизуется */</code></p>
     <p><code>23  if (Fork() == 0) { /* дочерний процесс */</code></p>
     <p><code>24   for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>25    Sem_wait(&amp;ptr-&gt;mutex);</code></p>
     <p><code>26    printf("child: %d\n", ptr-&gt;count++);</code></p>
     <p><code>27    Sem_post(&amp;ptr-&gt;mutex);</code></p>
     <p><code>28   }</code></p>
     <p><code>29   exit(0);</code></p>
     <p><code>30  }</code></p>
     <p><code>31  /* родительский процесс */</code></p>
     <p><code>32  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>33   Sem_wait(&amp;ptr-&gt;mutex);</code></p>
     <p><code>34   printf("parent: %d\n", ptr-&gt;count++);</code></p>
     <p><code>35   Sem_post(&amp;ptr-&gt;mutex);</code></p>
     <p><code>36  }</code></p>
     <p><code>37  exit(0);</code></p>
     <p><code>38 }</code> </p>
     <subtitle>Определение структуры, хранящейся в разделяемой памяти</subtitle>
     <p>2-5 Помещаем целочисленный счетчик и семафор, защищающий его, в одну структуру. Эта структура будет храниться в разделяемой памяти.</p>
     <subtitle>Отображаем в память</subtitle>
     <p>14-19 Создается файл для отображения в память, который инициализируется структурой с нулевым значением обоих полей. При этом инициализируется только счетчик, поскольку семафор будет инициализирован позднее вызовом sem_init. Тем не менее проще инициализировать всю структуру нулями, чем только одно целочисленное поле.</p>
     <subtitle>Инициализация семафора</subtitle>
     <p>20-21 Используем семафор, размещаемый в памяти, вместо именованного. Для его инициализации единицей вызываем sem_init. Второй аргумент должен быть ненулевым, чтобы семафор мог совместно использоваться несколькими процессами.</p>
     <p>На рис. 12.7 изображена модификация рис. 12.6, где семафор переместился из ядра в разделяемую память. </p>
     <image l:href="#Any2FbImgLoader204"/>
     <p>Рис. 12.7. И семафор, и счетчик теперь хранятся в разделяемой памяти</p>
    </section>
    <section>
     <title>
      <p>12.4. Неименованное отображение в память в 4.4BSD</p>
     </title>
     <p>Наши примеры из листингов 12.2 и 12.3 работают отлично, но нам приходится создавать файл в файловой системе (аргумент командной строки), вызывать open, записывать нули в файл вызовом write (чтобы проинициализировать его). Если mmap используется для передачи области разделяемой памяти через fork, мы можем упростить эту схему, используя свойства реализации.</p>
     <p>1. В версии 4.4BSD предоставляется возможность неименованного отображения в память. При этом полностью пропадает необходимость создавать или открывать файлы. Вместо этого указываются флаги MAP_SHARED | MAP_ANON и дескриптор fd = –1. Сдвиг, задаваемый аргументом <emphasis>offset, </emphasis>игнорируется. Память автоматически инициализируется нулями. Пример использования приведен в листинге 12.4.</p>
     <p>2. В версии SVR4 имеется файл /dev/zero, который мы открываем и дескриптор которого указываем при вызове mmap. Это устройство возвращает нули при попытке считывания, а весь направляемый на него вывод сбрасывается. Пример использования приведен в листинге 12.5. (Во многих реализациях, произошедших от BSD, также поддерживается устройство /dev/zero, например в SunOS 4.1.x и BSD/OS 3.1.)</p>
     <p>В листинге 12.4 приведена часть листинга 12.2, которая изменяется при переходе к использованию неименованного отображения в память в 4.4BSD.</p>
     <subtitle>Листинг 12.4. Отображение в память в 4.4BSD</subtitle>
     <p><code>//shm/incr_map_anon.с</code></p>
     <p><code>3  int</code></p>
     <p><code>4  main(int argc, char **argv)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   int i, nloop;</code></p>
     <p><code>7   int *ptr;</code></p>
     <p><code>8   sem_t *mutex;</code></p>
     <p><code>9   if (argc != 2)</code></p>
     <p><code>10   err_quit("usage: incr_map_anon &lt;#loops&gt;");</code></p>
     <p><code>11  nloop = atoi(argv[1]);</code></p>
     <p><code>12  /* отображение в память */</code></p>
     <p><code>13  ptr = Mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE,</code></p>
     <p><code>14   MAP_SHARED | MAP_ANON, –1, 0);</code></p>
     <p>6-11 Автоматические переменные fd и zero больше не используются, как и аргумент командной строки, задававший имя создаваемого файла.</p>
     <p>12-14 Файл больше не нужно открывать. Вместо этого указывается флаг MAP_ANON при вызове mmap, а пятый аргумент этой функции (дескриптор) принимает значение –1.</p>
    </section>
    <section>
     <title>
      <p>12.5. Отображение в память в SVR4 с помощью /dev/zero</p>
     </title>
     <p>В листинге 12.5 приведена часть новой версии программы, претерпевшая изменения по сравнению с листингом 12.2 при переходе к использованию отображения с помощью /dev/zero.</p>
     <subtitle>Листинг 12.5. Отображение памяти в SVR4 с помощью /dev/zero</subtitle>
     <p><code>//shm/incr_dev_zero.c</code></p>
     <p><code>3  int</code></p>
     <p><code>4  main(int argc char **argv)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   int fd, i, nloop;</code></p>
     <p><code>7   int *ptr;</code></p>
     <p><code>8   sem_t *mutex;</code></p>
     <p><code>9   if (argc != 2)</code></p>
     <p><code>10   err_quit("usage: incr_dev_zero &lt;#loops&gt;");</code></p>
     <p><code>11  nloop = atoi(argv[1]);</code></p>
     <p><code>12  /* открываем /dev/zero и отображаем в память */</code></p>
     <p><code>13  fd = Open("/dev/zero", O_RDWR);</code></p>
     <p><code>14  ptr = Mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</code></p>
     <p><code>15  Close(fd);</code></p>
     <p>6-11 Автоматическая переменная zero больше не используется, как и аргумент командной строки, задававший имя создаваемого файла.</p>
     <p>12-15 Мы открываем файл /dev/zero и передаем его дескриптор функции mmap. Область памяти будет гарантированно проинициализирована нулями.</p>
    </section>
    <section>
     <title>
      <p>12.6. Обращение к объектам, отображенным в память</p>
     </title>
     <p>Когда в память отображается обычный файл, размер полученной области (второй аргумент вызова mmap), как правило, совпадает с размером файла. Например, в листинге 12.3 размер файла устанавливается равным размеру структуры shared вызовом write и это же значение размера области используется при отображении его в память. Однако эти два параметра — размер файла и размер области памяти, в которую он отображен, — могут и отличаться.</p>
     <p>Для детального изучения особенностей функции mmap воспользуемся программой в листинге 12.6.</p>
     <subtitle>Листинг 12.6. Отображение файла: размер файла совпадает с размером области памяти</subtitle>
     <p><code>//shra/test1.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  int</code></p>
     <p><code>3  main(int argc, char **argv)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   int fd, i;</code></p>
     <p><code>6   char *ptr;</code></p>
     <p><code>7   size_t filesize, mmapsize, pagesize;</code></p>
     <p><code>8   if (argc != 4)</code></p>
     <p><code>9    err_quit("usage: test1 &lt;pathname&gt; &lt;filesize&gt; &lt;mmapsize&gt;");</code></p>
     <p><code>10  filesize = atoi(argv[2]);</code></p>
     <p><code>11  mmapsize = atoi(argv[3]);</code></p>
     <p><code>12  /* открытие файла, установка его размера */</code></p>
     <p><code>13  fd = Open(argv[1], O_RDWR | O_CREAT | O_TRUNC, FILE_MODE);</code></p>
     <p><code>14  Lseek(fd, filesize-1, SEEK_SET);</code></p>
     <p><code>15  Write(fd, "", 1);</code></p>
     <p><code>16  ptr = Mmap(NULL, mmapsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</code></p>
     <p><code>17  Close(fd);</code></p>
     <p><code>18  pagesize = Sysconf(_SC_PAGESIZE);</code></p>
     <p><code>19  printf("PAGESIZE = %ld\n", (long) pagesize);</code></p>
     <p><code>20  for (i = 0; i &lt; max(filesize, mmapsize); i += pagesize) {</code></p>
     <p><code>21   printf("ptr[*d] = %d\n", i, ptr[i]);</code></p>
     <p><code>22   ptr[i] = 1;</code></p>
     <p><code>23   printf("ptr[%d] = %d\n", i + pagesize – 1, ptr[i + pagesize – 1]);</code></p>
     <p><code>24   ptr[i + pagesize – 1] = 1;</code></p>
     <p><code>25  }</code></p>
     <p><code>26  printf("ptr[%d] = %d\n", i, ptr[i]);</code></p>
     <p><code>27  exit(0);</code></p>
     <p><code>28 }</code></p>
     <subtitle>Аргументы командной строки</subtitle>
     <p>8-11 Аргументы командной строки задают полное имя создаваемого и отображаемого в память файла, его размер и размер области памяти.</p>
     <subtitle>Создание, открытие, урезание файла; установка его размера</subtitle>
     <p>12-15 Если файл не существует, он будет создан. Если он существует, его длина будет установлена равной нулю. Затем размер файла устанавливается равным указанному размеру путем вызова lseek для установки текущей позиции, равной трe-буемому размеру минус 1 и записи 1 байта.</p>
     <subtitle>Отображение файла в память</subtitle>
     <p>16-17 Файл отображается в память, причем размер области задается последним аргументом командной строки. Затем дескриптор файла закрывается.</p>
     <subtitle>Вывод размера страницы памяти</subtitle>
     <p>18-19 Размер страницы памяти получается вызовом sysconf и выводится на экран.</p>
     <subtitle>Чтение и запись в область отображения</subtitle>
     <p>20-26 Считываются и выводятся данные из области памяти, в которую отображен файл. Считываются первый и последний байты каждой страницы этой области памяти. Все значения должны быть нулевыми. Затем первый и последний байты каждой страницы устанавливаются в 1. Одно из обращений к памяти может привести к отправке сигнала процессу, что приведет к его завершению. После завершения цикла for мы добавляем еще одно обращение к следующей странице памяти, что должно заведомо привести к ошибке и завершению пpoгрaммы (если ошибка не возникла раньше).</p>
     <p>Рассмотрим первую ситуацию: размер файла совпадает с размером области памяти, но эта величина не кратна размеру страницы памяти в данной реализации:</p>
     <p><code>solaris % <strong>ls –l foo</strong></code></p>
     <p><code>foo: No such file or directory</code></p>
     <p><code>solaris % <strong>test1 foo 5000 5000</strong></code></p>
     <p><code>PAGESIZE = 4096</code></p>
     <p><code>ptr[0] = 0</code></p>
     <p><code>ptr[4095] = 0</code></p>
     <p><code>ptr[4096] = 0</code></p>
     <p><code>ptr[8191] = 0</code></p>
     <p><code>Segmentation Fault(coredump)</code></p>
     <p><code>solaris % <strong>ls-l foo</strong></code></p>
     <p><code>-rw-r--r-- 1 rstevens other1 5000 Mar 20 17:18 foo</code></p>
     <p><code>solaris % <strong>od –b –A d foo</strong></code></p>
     <p><code>0000000 001 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000</code></p>
     <p><code>0000016 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000</code></p>
     <p><code>*</code></p>
     <p><code>0004080 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 001</code></p>
     <p><code>0004096 001 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000</code></p>
     <p><code>0004112 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000</code></p>
     <p><code>0005000</code></p>
     <p>Размер страницы памяти составляет 4096 байт, и мы смогли обратиться ко всему содержимому второй страницы (индексы 4096-8191), но обращение к третьей странице (8192) приводит к отправке сигнала SIGSEGV, о чем интерпретатор оповещает сообщением Segmentation Fault. Хотя мы и установили значение ptr[8191] = 1, оно не было записано в файл и его размер остался равным 5000 байт. Ядро позволяет считывать и записывать данные в ту часть последней страницы, которая не относится к отображенному файлу (поскольку защита памяти осуществляется ядром постранично), но изменения в этой области памяти не будут скопированы в файл. А вот относящиеся к файлу изменения (индексы 0, 4095 и 4096) были скопированы в него, в чем мы убедились, воспользовавшись программой od (параметр –b при вызове последней указывает на необходимость выводить значения байтов в восьмеричном формате, а параметр –Ad позволяет выводить адреса в десятичном формате). На рис. 12.8 изображена схема памяти для данного примера. </p>
     <image l:href="#Any2FbImgLoader206"/>
     <p>Рис. 12.8. Размер отображаемого файла совпадает с размером области памяти</p>
     <empty-line/>
     <p>Запустив этот пример в Digital Unix 4.0B, получим тот же результат, но размер страницы памяти в этой системе равняется 8192 байт:</p>
     <p><code>alpha % <strong>ls –l foo</strong></code></p>
     <p><code>foo not found</code></p>
     <p><code>alpha % <strong>test1 foo5000 5000</strong></code></p>
     <p><code>PAGESIZE = 8192</code></p>
     <p><code>ptr[0] = 0</code></p>
     <p><code>ptr[8191] = 0</code></p>
     <p><code>Memory fault (coredump)</code></p>
     <p><code>alpha % <strong>ls -l foo</strong></code></p>
     <p><code>-rw-r-r– 1 rstevens operator 5000 Mar 21 08:40 foo</code></p>
     <p>Мы все так же можем обратиться к памяти за пределами отображенного файла, но не выходя за грaницы страницы памяти (индексы с 5000 по 8191). Обращение к ptr[8192] приводит к отправке SIGSEGV, на что мы и рассчитывали.</p>
     <p>Вторая ситуация: размер области памяти (15000 байт) превышает размер файла (5000 байт):</p>
     <p><code>solaris % <strong>rm foo</strong></code></p>
     <p><code>solaris % <strong>test1 foo 5000 15000</strong></code></p>
     <p><code>ptr[0] = 0</code></p>
     <p><code>ptr[4095] = 0</code></p>
     <p><code>ptr[4096] = 0</code></p>
     <p><code>ptr[8191] = 0</code></p>
     <p><code>Bus Error(coredump)</code></p>
     <p><code>solaris % <strong>ls –l foo</strong></code></p>
     <p><code>-rw-r-r– 1 rstevens other1 5000 Mar 20 17:37 foo</code> </p>
     <image l:href="#Any2FbImgLoader207"/>
     <p>Рис. 12.9. Размер области памяти больше размера отображаемого файла</p>
     <empty-line/>
     <p>Полученный результат аналогичен результату предыдущего примера, в котором размер файла равнялся размеру области отображения (5000 байт). Однако в данном примере генерируется сигнал SIGBUS (о чем интерпретатор оповещает сообщением Bus Error), тогда как в предыдущем примере отправлялся сигнал SIGSEGV. Отличие в том, что SIGBUS означает выход за грaницы отображенного файла внутри области отображения, a SIGSEGV — выход за грaницы области. Этим примером мы показали, что ядро хранит информацию о размере отображенного объекта, даже несмотря на то, что его дескриптор закрыт. Ядро позволяет указать при вызове mmap размер области памяти, больший размера файла, но не позволяет обратиться к адресам в этой области (кроме остатка последней страницы, в которой еще имеется содержимое собственно файла — индексы с 5000 по 8191 в данном случае). На рис. 12.9 приведена иллюстрация к этому примеру. </p>
     <p>Следующая программа приведена в листинге 12.7. Ею мы иллюстрируем типичные методы работы с увеличивающимися в размерах файлами: при отображении в память заказывается большой размер области, текущий размер файла учитывается при всех операциях (чтобы не выйти за его пределы в памяти), а затем он просто увеличивается, по мере того как в файл записываются данные.</p>
     <subtitle>Листинг 12.7. Отображение увеличивающегося файла в память</subtitle>
     <p><code>//shm/test2.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define FILE "test.data"</code></p>
     <p><code>3  #define SIZE 32768</code></p>
     <empty-line/>
     <p><code>4  int</code></p>
     <p><code>5  main(int argc, char **argv)</code></p>
     <p><code>6  {</code></p>
     <p><code>7   int fd, i;</code></p>
     <p><code>8   char *ptr;</code></p>
     <p><code>9   /* открытие, создание, урезание и установка размера файла, вызов mmap */</code></p>
     <p><code>10  fd = Open(FILE, O_RDWR | O_CREAT | O_TRUNC, FILE_MODE);</code></p>
     <p><code>11  ptr = Mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</code></p>
     <p><code>12  for (i = 4096; i &lt;= SIZE; i += 4096) {</code></p>
     <p><code>13   printf("setting file size to %d\n", i);</code></p>
     <p><code>14   Ftruncate(fd, i);</code></p>
     <p><code>15   printf("ptr[%d] = %d\n", i-1, ptr[i-1]);</code></p>
     <p><code>16  }</code></p>
     <p><code>17  exit(0);</code></p>
     <p><code>18 }</code></p>
     <subtitle>Открытие файла</subtitle>
     <p>9-11 Мы создаем файл, если он еще не существует, или урезаем его до нулевой длины, если он существует. Затем файл отображается в область объемом 32 768 байт, хотя его текущий размер равен нулю.</p>
     <subtitle>Увеличение размера файла</subtitle>
     <p>12-16 Мы увеличиваем размер файла на 4096 байт за один вызов ftruncate (раздел 13.3) и считываем из него последний байт в каждом проходе цикла.</p>
     <p>Запустив эту программу, мы убедимся в возможности обращаться к новым данным по мере роста файла:</p>
     <p><code>alpha % <strong>ls –l test.data</strong></code></p>
     <p><code>test.data: No such file or directory</code></p>
     <p><code>alpha % <strong>test2</strong></code></p>
     <p><code>setting file size to 4096</code></p>
     <p><code>ptr[4095] = 0</code></p>
     <p><code>setting file size to 8192</code></p>
     <p><code>ptr[8191] = 0</code></p>
     <p><code>setting file size to 12288</code></p>
     <p><code>ptr[12287] = 0</code></p>
     <p><code>setting file size to 16384</code></p>
     <p><code>ptr[16383] = 0</code></p>
     <p><code>setting file size to 20480</code></p>
     <p><code>ptr[20479] = 0</code></p>
     <p><code>setting file size to 24576</code></p>
     <p><code>ptr[24575] = 0</code></p>
     <p><code>setting file size to 28672</code></p>
     <p><code>ptr[28671] = 0</code></p>
     <p><code>setting file size to 32768</code></p>
     <p><code>ptr[32767] = 0</code></p>
     <p><code>alpha % <strong>ls-l test.data</strong></code></p>
     <p><code>-rw-r--r-- 1 rstevens other1 32768 Mar 20 17:53 test.data</code></p>
     <p>Этот пример показывает, что ядро всегда следит за размером отображаемого в память объекта (в данном примере это файл test.data), и мы всегда имеем возможность обратиться к байтам, лежащим внутри области, ограниченной размером файла и размером отображения. Те же результаты получаются при запуске этой программы в Solaris 2.6.</p>
     <p>В этом разделе мы работали с отображением файлов в память с помощью mmap. В упражнении 13.1 нам придется немного изменить две наших программы для работы с разделяемой памятью Posix, и мы получим те же результаты.</p>
    </section>
    <section>
     <title>
      <p>12.7. Резюме</p>
     </title>
     <p>Разделяемая память представляет собой самую быстродействующую форму IPC, потому что данные из разделяемой области памяти доступны всем потокам и процессам, с ней работающим. Обычно для координации совместных действий потоков и процессов, использующих разделяемую память, требуется некоторая форма синхронизации.</p>
     <p>В этой главе мы подробно рассмотрели свойства функции mmap и отображение обычных файлов в память, потому что это один из способов обеспечения взаимодействия между неродственными процессами. После отображения файла в память для обращения к нему больше не нужно использовать вызовы read, write и lseek — вместо этого можно напрямую работать с ячейками памяти, относящимися к той области, указатель на которую возвращает mmap. Замена явных операций с файлом на обращение к ячейкам памяти может упростить программу и в некоторых случаях увеличить быстродействие.</p>
     <p>Если необходимо совместное использование области памяти после вызова fork, можно упростить решение этой задачи, используя неименованное отображение в память. Для этого в ядрах Berkeley при вызове mmap указывается флаг MAP_ANON, а в ядрах SVR4 производится отображение специального файла /dev/zero.</p>
     <p>Причина, по которой мы столь детально разобрали работу mmap, заключается в том, что отображение файлов в память часто оказывается очень полезным, а также в том, что mmap используется для работы с разделяемой памятью Posix, которая является предметом изучения следующей главы.</p>
     <p>Для работы с памятью стандартом Posix определено еще четыре функции:</p>
     <p>&#9632; mlockall делает всю память процесса резидентной; munlockall снимает эту блокировку;</p>
     <p>&#9632; mlock делает определенный диапазон адресов процесса резидентным. Аргументами функции являются начальный адрес и длина области. Функция munlock разблокирует указываемую область памяти.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Что произойдет с программой в листинге 12.7, если добавить еще один повтор цикла for?</p>
     <p>2. Предположим, что имеются два процесса, один из которых отправляет сообщения другому. Для этого используются очереди сообщений System V. Нарисуйте схему передачи сообщений от отправителя к получателю. Теперь представьте, что используется реализация очередей сообщений Posix из раздела 5.8, и нарисуйте аналогичную схему.</p>
     <p>3. Мы говорили, что при вызове mmap с флагом MAP_SHARED для синхронизации содержимого файла и памяти используются алгоритмы ядра для работы с виртуальной памятью. Прочитайте страницу документации, относящуюся к /dev/zero, чтобы узнать, что происходит, когда ядро записывает изменения обратно в этот файл.</p>
     <p>4. Измените программу в листинге 12.2, указав MAP_PRIVATE вместо MAP_SHARED. Проверьте, что результаты будут такими же, как и при выполнении программы из листинга 12.1. Что будет содержаться в файле, отображенном в память?</p>
     <p>5. В разделе 6.9 мы отметили, что единственным способом использовать select с очередью сообщений System V является создание неименованной области памяти, порождение процесса и блокирование его в вызове msgrcv, причем сообщение должно считываться в разделяемую память. Родительский процесс также создает два канала, один из которых используется для уведомления его о том, что сообщение помещено в разделяемую память, а другой — для уведомления дочернего процесса о возможности помещения нового сообщения в эту память. Тогда родительский процесс может вызвать select для открытого на чтение конца канала вместе с любыми другими дескрипторами. Напишите программу, реализующую этот алгоритм. Для выделения области неименованной разделяемой памяти используйте функцию my_shm (листинг А.31). Для создания очереди сообщений и помещения в нее записей используйте программы msgcreate и msgsnd из раздела 6.6. Родительский процесс должен просто выводить размер и тип всех считываемых дочерним процессом сообщений. </p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 13</p>
     <p>Разделяемая память Posix</p>
    </title>
    <section>
     <title>
      <p>13.1. Введение</p>
     </title>
     <p>В предыдущей главе рассматривались общие вопросы, связанные с разделяемой памятью, и детально разбиралась функция mmap. Были приведены примеры, в которых вызов mmap использовался для создания области памяти, совместно используемой родительским и дочерним процессами. В этих примерах использовалось:</p>
     <p>&#9632; отображение файлов в память (листинг 12.2);</p>
     <p>&#9632; неименованное отображение памяти в системе 4.4BSD (листинг 12.4);</p>
     <p>&#9632; неименованное отображение файла /dev/zero (листинг 12.5).</p>
     <p>Теперь мы можем расширить понятие разделяемой памяти, включив в него память, совместно используемую неродственными процессами. Стандарт Posix.1 предоставляет два механизма совместного использования областей памяти для неродственных процессов:</p>
     <p>1. Отображение файлов в память: файл открывается вызовом open, а его дескриптор используется при вызове mmap для отображения содержимого файла в адресное пространство процесса. Этот метод был описан в главе 12, и его использование было проиллюстрировано на примере родственных процессов. Однако он позволяет реализовать совместное использование памяти и для неродственных процессов.</p>
     <p>2. Объекты разделяемой памяти: функция shm_open открывает объект IPC с именем стандарта Posix (например, полным именем объекта файловой системы), возвращая дескриптор, который может быть использован для отображения в адресное пространство процесса вызовом mmap. Данный метод будет описан в этой главе.</p>
     <p>Оба метода требуют вызова mmap. Отличие состоит в методе получения дескриптора, являющегося аргументом mmap: в первом случае он возвращается функцией open, а во втором — shm_open. Мы показываем это на рис. 13.1. Стандарт Posix называет <emphasis>объектами памяти</emphasis> (memory objects) и отображенные в память файлы, и объекты разделяемой памяти стандарта Posix.</p>
    </section>
    <section>
     <title>
      <p>13.2. Функции shm_open и shm_unlink</p>
     </title>
     <p>Процесс получения доступа к объекту разделяемой памяти Posix выполняется в два этапа:</p>
     <p>1. Вызов shm_open с именем IPC в качестве аргумента позволяет либо создать новый объект разделяемой памяти, либо открыть существующий.</p>
     <image l:href="#Any2FbImgLoader211"/>
     <p>Рис. 13.1. Объекты памяти Posix: отображаемые в память файлы и объекты разделяемой памяти</p>
     <empty-line/>
     <p>2. Вызов mmap позволяет отобразить разделяемую память в адресное пространство вызвавшего процесса.</p>
     <p>Аргумент <emphasis>пате,</emphasis> указанный при первом вызове shm_open, должен впоследствии использоваться всеми прочими процессами, желающими получить доступ к данной области памяти.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Причина, по которой этот процесс выполняется в два этапа вместо одного, на котором в ответ на имя объекта возвращался бы адрес соответствующей области памяти, заключается в том, что функция mmap уже существовала, когда эта форма разделяемой памяти была включена в стандарт Posix. Разумеется, эти два действия могли бы выполняться и одной функцией. Функция shm_open возвращает дескриптор (вспомните, что mq_open возвращает значение типа mqd_t, a sem_open возвращает указатель на значение типа sem_t), потому что для отображения объекта в адресное пространство процесса функция mmap использует именно дескриптор этого объекта.</p>
     </cite>
     <p><code>#include &lt;sys/mman.h&gt;</code></p>
     <p><code>int shm_open(const char <emphasis>*name,</emphasis> int <emphasis>oflag,</emphasis> mode_t <emphasis>mode</emphasis>);</code></p>
     <p><code>/* Возвращает неотрицательный дескриптор в случае успешного завершения, -1 – в случае ошибки */</code></p>
     <p><code>int shm_unlink(const char <emphasis>*name</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения, -1 – в случае ошибки */</code></p>
     <p>Требования и правила, используемые при формировании аргумента name, были описаны в разделе 2.2.</p>
     <p>Аргумент <emphasis>oflag</emphasis> должен содержать флаг O_RDONLY либо O_RDWR и один из следующих: O_CREAT, O_EXCL, O_TRUNC. Флаги O_CREAT и O_EXCL были описаны в разделе 2.3. Если вместе с флагом O_RDWR указан флаг O_TRUNC, существующий объект разделяемой памяти будет укорочен до нулевой длины.</p>
     <p>Аргумент mode задает биты разрешений доступа (табл. 2.3) и используется только при указании флага O_CREAT. Обратите внимание, что в отличие от функций mq_open и sem_open для shm_open аргумент <emphasis>mode</emphasis> указывается всегда. Если флаг O_CREAT не указан, значение аргумента <emphasis>mode</emphasis> может быть нулевым.</p>
     <p>Возвращаемое значение shm_open представляет собой целочисленный дескриптор, который может использоваться при вызове mmap в качестве пятого аргумента.</p>
     <p>Функция shm_unlink удаляет имя объекта разделяемой памяти. Как и другие подобные функции (удаление файла из файловой системы, удаление очереди сообщений и именованного семафора Posix), она не выполняет никаких действий до тех пор, пока объект не будет закрыт всеми открывшими его процессами. Однако после вызова shm_unlink последующие вызовы open, mq_open и sem_open выполняться не будут.</p>
    </section>
    <section>
     <title>
      <p>13.3. Функции ftruncate и fstat</p>
     </title>
     <p>Размер файла или объекта разделяемой памяти можно изменить вызовом ftruncate:</p>
     <p><code>#include &lt;unistd.h&gt;</code></p>
     <p><code>int ftruncate(int <emphasis>fd,</emphasis> off_t <emphasis>length</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
     <p>Стандарт Posix делает некоторые различия в определении действия этой функции для обычных файлов и для объектов разделяемой памяти.</p>
     <p>1. Для обычного файла: если размер файла превышает значение <emphasis>length,</emphasis> избыточные данные отбрасываются. Если размер файла оказывается меньше значения <emphasis>length,</emphasis> действие функции не определено. Поэтому для переносимости следует использовать следующий способ увеличения длины обычного файла: вызов 1 seek со сдвигом <emphasis>length-1</emphasis> и запись 1 байта в файл. К счастью, почти все реализации Unix поддерживают увеличение размера файла вызовом ftruncate.</p>
     <p>2.  Для объекта разделяемой памяти: ftruncate устанавливает размер объекта равным значению аргумента <emphasis>length.</emphasis></p>
     <p>Итак, мы вызываем ftruncate для установки размера только что созданного объекта разделяемой памяти или изменения размера существующего объекта. При открытии существующего объекта разделяемой памяти следует воспользоваться fstat для получения информации о нем:</p>
     <p><code>#include &lt;sys/types.h&gt;</code></p>
     <p><code>#include &lt;sys/stat.h&gt;</code></p>
     <p><code>int fstat(int <emphasis>fd,</emphasis> struct stat <emphasis>*buf</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения. –1 – в случае ошибки */</code></p>
     <p>В структуре stat содержится больше десятка полей (они подробно описаны в главе 4 [21]), но только четыре из них содержат актуальную информацию, если <emphasis>fd</emphasis> представляет собой дескриптор области разделяемой памяти:</p>
     <p><code>struct stat {</code></p>
     <p><code> …</code></p>
     <p><code> mode_t st_mode; /* mode: S_I{RW}{USR,GRP,OTH} */</code></p>
     <p><code> uid_t st_uid; /* UID владельца */</code></p>
     <p><code> gid_t st_gid; /* GID владельца */</code></p>
     <p><code> off_t st_size; /* размер в байтах */</code></p>
     <p><code> …</code></p>
     <p><code>};</code></p>
     <p>Пример использования этих двух функций будет приведен в следующем разделе. </p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>К сожалению, стандарт Posix никак не оговаривает начальное содержимое разделяемой памяти. Описание функции shm_open гласит, что «объект разделяемой памяти будет иметь нулевой размер». Описание ftruncate гласит, что для обычных файлов (не объектов разделяемой памяти) «при увеличении размера файла он будет дополнен нулями». Однако в этом описании ничего не говорится о содержимом разделяемой памяти. Обоснование Posix.1 (Rationale) говорит, что «разделяемая память при расширении дополняется нулями», но это не официальный стандарт. Когда автор попытался уточнить этот вопрос в конференции comp.std.unix, он узнал, что некоторые производители протестовали против введения требования на заполнение памяти нулями из-за возникающих накладных расходов. Если новая область памяти не инициализируется каким-то значением (то есть содержимое остается без изменения), это может угрожать безопасности системы.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>13.4. Простые программы</p>
     </title>
     <section>
      <p>Приведем несколько примеров программ, работающих с разделяемой памятью Posix.</p>
     </section>
     <section>
      <title>
       <p>Программа shmcreate</p>
      </title>
      <p>Программа shmcreate, текст которой приведен в листинге 13.1,<a l:href="#n_1" type="note">[1]</a> создает объект разделяемой памяти с указанным именем и длиной.</p>
      <subtitle>Листинг 13.1. Создание объекта разделяемой памяти Posix указанного размера</subtitle>
      <p><code>//pxshm/shmcreate.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int c, fd, flags;</code></p>
      <p><code>6   char *ptr;</code></p>
      <p><code>7   off_t length;</code></p>
      <p><code>8   flags = O_RDWR | O_CREAT;</code></p>
      <p><code>9   while ((c = Getopt(argc, argv, "e")) != –1) {</code></p>
      <p><code>10   switch (c) {</code></p>
      <p><code>11   case 'e':</code></p>
      <p><code>12    flags |= O_EXCL;</code></p>
      <p><code>13    break;</code></p>
      <p><code>14   }</code></p>
      <p><code>15  }</code></p>
      <p><code>16  if (optind != argc – 2)</code></p>
      <p><code>17   err_quit("usage: shmcreate [ –e ] &lt;name&gt; &lt;length&gt;");</code></p>
      <p><code>18  length = atoi(argv[optind + 1]);</code></p>
      <p><code>19  fd = Shm_open(argv[optind], flags, FILE_MODE);</code></p>
      <p><code>20  Ftruncate(fd, length);</code></p>
      <p><code>21  ptr = Mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</code></p>
      <p><code>22  exit(0);</code></p>
      <p><code>23 }</code></p>
      <p>19-22 Вызов shm_open создает объект разделяемой памяти. Если указан параметр –е, будет возвращена ошибка в том случае, если такой объект уже существует. Вызов ftruncate устанавливает длину (размер объекта), a mmap отображает его содержимое в адресное пространство процесса. Затем программа завершает работу. Поскольку разделяемая память Posix обладает живучестью ядра, объект разделяемой памяти при этом не исчезает.</p>
     </section>
     <section>
      <title>
       <p>Программа shmunlink</p>
      </title>
      <p>В листинге 13.2 приведен текст тривиальной программы, удаляющей имя объекта разделяемой памяти из системы.</p>
      <subtitle>Листинг 13.2. Удаление имени объекта разделяемой памяти Posix</subtitle>
      <p><code>//pxshm/shmunlink.c</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2 int</code></p>
      <p><code>3 main(int argc, char **argv)</code></p>
      <p><code>4 {</code></p>
      <p><code>5  if (argc != 2)</code></p>
      <p><code>6   err_quit("usage: shmunlink &lt;name&gt;");</code></p>
      <p><code>7  Shm_unlink(argv[1]);</code></p>
      <p><code>8  exit(0);</code></p>
      <p><code>9 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа shmwrite</p>
      </title>
      <p>В листинге 13.3 приведен текст программы shmwrite, записывающей последовательность 0, 1, 2 254, 244, 0, 1 и т. д. в объект разделяемой памяти.</p>
      <subtitle>Листинг 13.3. Заполнение разделяемой памяти</subtitle>
      <p><code>//pxshm/shmwrite.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int i, fd;</code></p>
      <p><code>6   struct stat stat;</code></p>
      <p><code>7   unsigned char *ptr;</code></p>
      <p><code>8   if (argc != 2)</code></p>
      <p><code>9    err_quit("usage: shmwrite &lt;name&gt;");</code></p>
      <p><code>10  /* open, определяем размер, отображаем в память */</code></p>
      <p><code>11  fd = Shm_open(argv[1], O_RDWR, FILE_MODE);</code></p>
      <p><code>12  Fstat(fd, &amp;stat);</code></p>
      <p><code>13  ptr = Mmap(NULL, stat.st_size, PROT_READ | PROT_WRITE,</code></p>
      <p><code>14   MAP_SHARED, fd, 0);</code></p>
      <p><code>15  Close(fd);</code></p>
      <p><code>16  /* присваиваем: ptr[0] = 0, ptr[1] = 1 и т. д. */</code></p>
      <p><code>17  for (i = 0; i &lt; stat.st_size; i++)</code></p>
      <p><code>18   *ptr++ = i % 256;</code></p>
      <p><code>19  exit(0);</code></p>
      <p><code>20 }</code></p>
      <p>10-15 Объект разделяемой памяти открывается вызовом shm_open. Его размер мы узнаем с помощью fstat. Затем файл отображается в память вызовом mmap, после чего его дескриптор может быть закрыт.</p>
      <p>16-18 Последовательность записывается в разделяемую память.</p>
     </section>
     <section>
      <title>
       <p>Программа shmread</p>
      </title>
      <p>Программа shmread (листинг 13.4) проверяет значения, помещенные в разделяемую память программой shmwrite.</p>
      <subtitle>Листинг 13.4. Проверка значений в разделяемой памяти</subtitle>
      <p><code>//pxshm/shmread.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int i, fd;</code></p>
      <p><code>6   struct stat stat;</code></p>
      <p><code>7   unsigned char c, *ptr;</code></p>
      <p><code>8   if (argc != 2)</code></p>
      <p><code>9    err_quit("usage: shmread &lt;name&gt;");</code></p>
      <p><code>10  /* вызываем open, узнаем размер, отображаем в память*/</code></p>
      <p><code>11  fd = Shm_open(argv[1], O_RDONLY, FILE_MODE);</code></p>
      <p><code>12  Fstat(fd, &amp;stat);</code></p>
      <p><code>13  ptr = Mmap(NULL, stat.st_size, PROT_READ,</code></p>
      <p><code>14   MAP_SHARED, fd, 0);</code></p>
      <p><code>15  Close(fd);</code></p>
      <p><code>16  /* проверяем равенства ptr[0] = 0, ptr[1] = 1 и т. д. */</code></p>
      <p><code>17  for (i = 0; i &lt; stat.st_size; i++)</code></p>
      <p><code>18   if ((c = *ptr++) != (i % 256))</code></p>
      <p><code>19    err_ret("ptr[%d] = %d", i, c);</code></p>
      <p><code>20  exit(0);</code></p>
      <p><code>21 }</code></p>
      <p>10-15 Объект разделяемой памяти открывается только для чтения, его размер получается вызовом fstat, после чего он отображается в память с доступом только на чтение, а дескриптор закрывается.</p>
      <p>16-19 Проверяются значения, помещенные в разделяемую память вызовом shmwrite.</p>
     </section>
     <section>
      <title>
       <p>Примеры</p>
      </title>
      <p>Создадим объект разделяемой памяти с именем /tmp/myshm объемом 123 456 байт в системе Digital Unix 4.0B:</p>
      <p><code>alpha % <strong>shmcreate /tmp/myshm 123456</strong></code></p>
      <p><code>alpha % <strong>ls –l /tmp/myshm</strong></code></p>
      <p><code>-rw-r--r-- 1 rstevens system 123456 Dec 10 14:33 /tmp/myshm</code></p>
      <p><code>alpha % od –c /tmp/myshm</code></p>
      <p><code>0000000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0</code></p>
      <p><code>*</code></p>
      <p><code>0361100</code></p>
      <p>Мы видим, что файл с указываемым при создании объекта разделяемой памяти именем появляется в файловой системе. Используя программу od, мы можем выяснить, что после создания файл целиком заполнен нулями (восьмеричное число 0361100 — сдвиг, соответствующий байту, следующему за последним байтом файла, — эквивалентно десятичному 123 456).</p>
      <p>Запустим программу shmwrite и убедимся в правильности записываемых значений с помощью программы od:</p>
      <p><code>alpha % <strong>shmwrite /tmp/myshm</strong></code></p>
      <p><code>alpha * <strong>od –x /tmp/myshm | head-4</strong></code></p>
      <p><code>0000000 0100 0302 0504 0706 0908 0b0a 0d0c 0f0e</code></p>
      <p><code>0000020 1110 1312 1514 1716 1918 1b1a 1d1c 1f1e</code></p>
      <p><code>0000040 2120 2322 2524 2726 2928 2b2a 2d2c 2f2e</code></p>
      <p><code>0000060 3130 3332 3534 3736 3938 3b3a 3d3c 3f3e</code></p>
      <p><code>alpha % <strong>shmread /tmp/myshm</strong></code></p>
      <p><code>alpha % <strong>shmunlink /tmp/myshm</strong></code></p>
      <p>Мы проверили содержимое разделяемой памяти и с помощью shmread, а затем удалили объект, запустив программу shmunlink.</p>
      <p>Если теперь мы запустим программу shmcreate в Solaris 2.6, то увидим, что файл указанного размера создается в каталоге /tmp:</p>
      <p><code>solaris % <strong>shmcreate –e /testshm 123</strong></code></p>
      <p><code>solaris % <strong>ls-l/tmp/.*testshm*</strong></code></p>
      <p><code>-rw-r--r-- 1 rstevens other1 123 Dec 10 14:40 /tmp/.SHMtestshm</code></p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Приведем теперь пример (листинг 13.5), иллюстрирующий тот факт, что объект разделяемой памяти может отображаться в области, начинающиеся с разных адресов в разных процессах.</p>
      <subtitle>Листинг 13.5. Разделяемая память может начинаться с разных адресов в разных процессах</subtitle>
      <p><code>//pxshm/test3.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int fd1, fd2, *ptr1, *ptr2;</code></p>
      <p><code>6   pid_t childpid;</code></p>
      <p><code>7   struct stat stat;</code></p>
      <p><code>8   if (argc != 2)</code></p>
      <p><code>9    err_quit("usage: test3 &lt;name&gt;");</code></p>
      <p><code>10  shm_unlink(Px_ipc_name(argv[1]));</code></p>
      <p><code>11  fd1 = Shm_open(Px_ipc_name(argv[1]), O_RDWR | O_CREAT | O_EXCL, FILE_MODE);</code></p>
      <p><code>12  Ftruncate(fd1, sizeof(int));</code></p>
      <p><code>13  fd2 = Open("/etc/motd", O_RDONLY);</code></p>
      <p><code>14  Fstat(fd2, &amp;stat);</code></p>
      <p><code>15  if ((childpid = Fork()) == 0) {</code></p>
      <p><code>16   /* дочерний процесс */</code></p>
      <p><code>17   ptr2 = Mmap(NULL, stat.st_size, PROT_READ, MAP_SHARED, fd2, 0);</code></p>
      <p><code>18   ptr1 = Mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE,</code></p>
      <p><code>19    MAP_SHARED, fd1, 0);</code></p>
      <p><code>20   printf("child: shm ptr = %p, motd ptr = %p\n", ptr1, ptr2);</code></p>
      <p><code>21   sleep(5);</code></p>
      <p><code>22   printf("shared memory integer = %d\n", *ptr1);</code></p>
      <p><code>23   exit(0);</code></p>
      <p><code>24  }</code></p>
      <p><code>25  /* родительский процесс: вызовы map следуют в обратном порядке */</code></p>
      <p><code>26  ptr1 = Mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd1, 0);</code></p>
      <p><code>27  ptr2 = Mmap(NULL, stat.st_size, PROT_READ, MAP_SHARED, fd2, 0);</code></p>
      <p><code>28  printf("parent: shm ptr = %p, motd ptr = %p\n", ptr1, ptr2);</code></p>
      <p><code>29  *ptr1 = 777;</code></p>
      <p><code>30  Waitpid(childpid, NULL, 0);</code></p>
      <p><code>31  exit(0);</code></p>
      <p><code>32 }</code></p>
      <p>10-14 Создаем сегмент разделяемой памяти с именем, принимаемым в качестве аргумента командной строки. Его размер устанавливается равным размеру целого. Затем открываем файл /etc/motd.</p>
      <p>15-30 После вызова fork и родительский, и дочерний процессы вызывают mmap дважды, но в разном порядке. Каждый процесс выводит начальный адрес каждой из областей памяти. Затем дочерний процесс ждет 5 секунд, родительский процесс помещает значение 777 в область разделяемой памяти, после чего дочерний процесс считывает и выводит это значение.</p>
      <p>Запустив эту программу, мы убедимся, что объект разделяемой памяти начинается с разных адресов в пространствах дочернего и родительского процессов:</p>
      <p><code>solaris % <strong>test3 test3.data</strong></code></p>
      <p><code>parent: shm ptr = eee30000, motd ptr = eee20000</code></p>
      <p><code>child: shm ptr = eee20000, motd ptr = eee30000</code></p>
      <p><code>shared memory integer = 777</code></p>
      <p>Несмотря на разницу в начальных адресах, родительский процесс успешно помещает значение 777 по адресу 0xeee30000, а дочерний процесс благополучно считывает его по адресу 0хеее20000. Указатели ptr1 в родительском и дочернем процессах указывают на одну и ту же область разделяемой памяти, хотя их значения в этих процессах различны.</p>
     </section>
    </section>
    <section>
     <title>
      <p>13.5. Увеличение общего счетчика</p>
     </title>
     <p>Разработаем программу, аналогичную приведенной в разделе 12.3, — несколько процессов увеличивают счетчик, хранящийся в разделяемой памяти. Итак, мы помещаем счетчик в разделяемую память, а для синхронизации доступа к нему используем именованный семафор. Отличие программы из этого раздела от предыдущей состоит в том, что процессы более не являются родственными. Поскольку обращение к объектам разделяемой памяти Posix и именованным семафорам Posix осуществляется по именам, процессы, увеличивающие общий счетчик, могут не состоять в родстве. Достаточно лишь, чтобы каждый из них знал имя IPC счетчика и чтобы у каждого были соответствующие разрешения на доступ к объектам IPC (области разделяемой памяти и семафору).</p>
     <p>В листинге 13.6 приведен текст программы-сервера, которая создает объект разделяемой памяти, затем создает и инициализирует семафор, после чего завершает работу.</p>
     <subtitle>Листинг 13.6. Программа, создающая и инициализирующая объект разделяемой памяти и семафор</subtitle>
     <p><code>//pxshm/server1.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  struct shmstruct { /* структура, помещаемая в разделяемую память */</code></p>
     <p><code>3   int count;</code></p>
     <p><code>4  };</code></p>
     <p><code>5  sem_t *mutex; /* указатель на именованный семафор */</code></p>
     <empty-line/>
     <p><code>6  int</code></p>
     <p><code>7  main(int argc, char **argv)</code></p>
     <p><code>8  {</code></p>
     <p><code>9   int fd;</code></p>
     <p><code>10  struct shmstruct *ptr;</code></p>
     <p><code>11  if (argc != 3)</code></p>
     <p><code>12   err_quit("usage: server1 &lt;shmname&gt; &lt;semname&gt;");</code></p>
     <p><code>13  shm_unlink(Px_ipc_name(argv[1])); /* ошибки игнорируются */</code></p>
     <p><code>14  /* создание shm. установка размера, отображение, закрытие дескриптора */</code></p>
     <p><code>15  fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR | O_CREAT | O_EXCL, FILE_MODE);</code></p>
     <p><code>16  Ftruncate(fd, sizeof(struct shmstruct));</code></p>
     <p><code>17  ptr = Mmap(NULL, sizeof(struct shmstruct), PROT_READ | PROT_WRITE,</code></p>
     <p><code>18   MAP_SHARED, fd, 0);</code></p>
     <p><code>19  Close(fd);</code></p>
     <p><code>20  sem_unlink(Px_ipc_name(argv[2])); /* игнорируем ошибку */</code></p>
     <p><code>21  mutex = Sem_open(Px_ipc_name(argv[2]), O_CREAT | O_EXCL, FILE_MODE, 1);</code></p>
     <p><code>22  Sem_close(mutex);</code></p>
     <p><code>23  exit(0);</code></p>
     <p><code>24 }</code></p>
     <subtitle>Создание объекта разделяемой памяти</subtitle>
     <p>13-19 Программа начинает работу с вызова shm_unlink, на тот случай, если объект разделяемой памяти еще существует, а затем делается вызов shm_open, создающий этот объект. Его размер устанавливается равным размеру структуры sbmstruct вызовом ftruncate, а затем mmap отображает объект в наше адресное пространство. После этого дескриптор объекта закрывается.</p>
     <subtitle>Создание и инициализация семафора</subtitle>
     <p>20-22 Сначала мы вызываем sem_unlink, на тот случай, если семафор еще существует. Затем делается вызов sem_open для создания именованного семафора и инициализации его единицей. Этот семафор будет использоваться в качестве взаимного исключения всеми процессами, которые будут обращаться к объекту разделяемой памяти. После выполнения этих операций семафор закрывается.</p>
     <subtitle>Завершение работы процесса</subtitle>
     <p>23 Процесс завершает работу. Поскольку разделяемая память Posix обладает по крайней мере живучестью ядра, объект не прекращает существования до тех пор, пока он не будет закрыт всеми открывавшими его процессами и явно удален.</p>
     <p>Нам приходится использовать разные имена для семафора и объекта разделяемой памяти. Нет никаких гарантий, что в данной реализации к именам Posix IPC будут добавляться какие-либо суффиксы или префиксы, указывающие тип объекта (очередь сообщений, семафор, разделяемая память). Мы видели, что в Solaris эти типы имен имеют префиксы .MQ, .SEM и .SHM, но в Digital Unix они префиксов не имеют.</p>
     <p>В листинге 13.7 приведен текст программы-клиента, которая увеличивает счетчик, хранящийся в разделяемой памяти, определенное число раз, блокируя семафор для каждой операции увеличения.</p>
     <subtitle>Листинг 13.7. Программа, увеличивающая значение счетчика в разделяемой памяти</subtitle>
     <p><code>//pxshm/client1.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  struct shmstruct { /* структура, помещаемая в разделяемую память */</code></p>
     <p><code>3   int count;</code></p>
     <p><code>4  };</code></p>
     <p><code>5  sem_t *mutex; /* указатель на именованный семафор */</code></p>
     <empty-line/>
     <p><code>6  int</code></p>
     <p><code>7  main(int argc, char **argv)</code></p>
     <p><code>8  {</code></p>
     <p><code>9   int fd, i, nloop;</code></p>
     <p><code>10  pid_t pid;</code></p>
     <p><code>11  struct shmstruct *ptr;</code></p>
     <p><code>12  if (argc != 4)</code></p>
     <p><code>13   err_quit("usage: client1 &lt;shmname&gt; &lt;semname&gt; &lt;#loops&gt;");</code></p>
     <p><code>14  nloop = atoi(argv[3]);</code></p>
     <p><code>15  fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR, FILE_MODE);</code></p>
     <p><code>16  ptr = Mmap(NULL, sizeof(struct shmstruct), PROT_READ | PROT_WRITE,</code></p>
     <p><code>17   MAP_SHARED, fd, 0);</code></p>
     <p><code>18  Close(fd);</code></p>
     <p><code>19  mutex = Sem_open(Px_ipc_name(argv[2]), 0);</code></p>
     <p><code>20  pid = getpid();</code></p>
     <p><code>21  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>22   Sem_wait(mutex);</code></p>
     <p><code>23   printf("pid %ld: %d\n", (long) pid, ptr-&gt;count++);</code></p>
     <p><code>24   Sem_post(mutex);</code></p>
     <p><code>25  }</code></p>
     <p><code>26  exit(0);</code></p>
     <p><code>27 }</code></p>
     <subtitle>Открытие области разделяемойпамяти</subtitle>
     <p>15-18 Вызов shm_open открывает объект разделяемой памяти, который должен уже существовать (поскольку не указан флаг O_CREAT). Память отображается в адресное пространство процесса вызовом mmap, после чего дескриптор закрывается.</p>
     <subtitle>Открытие семафора</subtitle>
     <p>19 Открываем именованный семафор.</p>
     <subtitle>Блокирование семафора и увеличение счетчика</subtitle>
     <p>20-26 Параметр командной строки позволяет указать количество увеличений счетчика. Каждый раз мы выводим предыдущее значение счетчика вместе с идентификатором процесса, поскольку одновременно работают несколько экземпляров программы.</p>
     <p>Запустим сначала сервер, а затем три экземпляра программы-клиента в фоновом режиме.</p>
     <p><code>solaris % <strong>server shm1 sem1</strong></code></p>
     <p><code>solaris % <strong>client1 shm1 sem110000 &amp;client1 shm1 sem110000 &amp;client1 shm1 sem1 10000&amp;</strong></code></p>
     <p><code>[2] 17976        <emphasis>интерпретатор выводит идентификаторы процессов</emphasis></code></p>
     <p><code>[3] 17977</code></p>
     <p><code>[4] 17978</code></p>
     <p><code>pid 17977: 0     <emphasis>и этот процесс запускается первым</emphasis></code></p>
     <p><code>pid 17977: 1</code></p>
     <p><code>. . .            <emphasis>процесс 17977 продолжает работу</emphasis></code></p>
     <p><code>pid 17977: 32</code></p>
     <p><code>pid 17976: 33    <emphasis>ядро переключается междупроцессами</emphasis></code></p>
     <p><code>. . .            <emphasis>процесс 17976 продолжает работу</emphasis></code></p>
     <p><code>pid 17976: 707</code></p>
     <p><code>pid 17978: 708   <emphasis>ядро переключается между процессами</emphasis></code></p>
     <p><code>. . .            <emphasis>процесс 17978 продолжает работу</emphasis></code></p>
     <p><code>pid 17978: 852</code></p>
     <p><code>pid 17977: 853   <emphasis>ядро переключается между процессами</emphasis></code></p>
     <p><code>. . .            <emphasis>и т.д.</emphasis></code></p>
     <p><code>pid 17977: 29997</code></p>
     <p><code>pid 17977: 29999 <emphasis>последнее выводимое значение. Оно оказывается правильным.</emphasis></code></p>
    </section>
    <section>
     <title>
      <p>13.6. Отправка сообщений на сервер</p>
     </title>
     <p>Изменим наше решение задачи производителей и потребителей следующим образом. Сначала запускается сервер, создающий объект разделяемой памяти, в который клиенты записывают свои сообщения. Сервер просто выводит содержимое этих сообщений, хотя задачу можно и обобщить таким образом, чтобы он выполнял действия, аналогичные демону syslog, который описан в главе 13 [24]. Мы называем группу отправляющих сообщения процессов клиентами, потому что по отношению к нашему серверу они ими и являются, однако эти клиенты могут являться серверами по отношению к другим приложениям. Например, сервер Telnet является клиентом демона syslog, когда отправляет ему сообщения для занесения их в системный журнал.</p>
     <p>Вместо передачи сообщений одним из описанных ранее методов (часть 2) будем хранить сообщения в разделяемой памяти. Это, разумеется, потребует какой-либо формы синхронизации действий клиентов, помещающих сообщения, и сервера, читающего их. На рис. 13.2 приведена схема приложения в целом.</p>
     <image l:href="#Any2FbImgLoader215"/>
     <p>Рис. 13.2. Несколько клиентов отправляют сообщения серверу через разделяемую память</p>
     <empty-line/>
     <p>Перед нами взаимодействие нескольких производителей (клиентов) и одного потребителя (сервер). Разделяемая память отображается в адресное пространство сервера и каждого из клиентов.</p>
     <p>В листинге 13.8 приведен текст заголовочного файла cliserv2.h, в котором определена структура объекта, хранимого в разделяемой памяти.</p>
     <subtitle>Листинг 13.8. Заголовочный файл, определяющий содержимое разделяемой памяти</subtitle>
     <p><code>//pxshm/cliserv2.h</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  #define MESGSIZE 256 /* максимальный размер сообщения в байтах, включая завершающий ноль */</code></p>
     <p><code>3  #define NMESG 16 /* максимальное количество сообщений */</code></p>
     <empty-line/>
     <p><code>4  struct shmstruct { /* структура, хранящаяся в разделяемой памяти */</code></p>
     <p><code>5   sem_t mutex; /* три семафора Posix, размещаемые в памяти */</code></p>
     <p><code>6   sem_t nempty;</code></p>
     <p><code>7   sem_t nstored;</code></p>
     <p><code>8   int nput; /* индекс для следующего сообщения */</code></p>
     <p><code>9   long noverflow; /* количество переполнений */</code></p>
     <p><code>10  sem_t noverflowmutex; /* взаимное исключение для счетчика переполнений */</code></p>
     <p><code>11  long msgoff[NMESG]; /* сдвиг для каждого из сообщений */</code></p>
     <p><code>12  char msgdata[NMESG * MESGSIZE]; /* сами сообщения */</code></p>
     <p><code>13 };</code></p>
     <subtitle>Основные семафоры и переменные</subtitle>
     <p>5-8 Три семафора Posix, размещаемых в памяти, используются для того же, для чего семафоры использовались в задаче производителей и потребителей в разделе 10.6. Их имена mutex, nempty, nstored. Переменная nput хранит индекс следующего помещаемого сообщения. Поскольку одновременно работают несколько производителей, эта переменная защищена взаимным исключением и хранится в разделяемой памяти вместе со всеми остальными.</p>
     <subtitle>Счетчик переполнений</subtitle>
     <p>9-10 Существует вероятность того, что клиент не сможет отправить сообщение из-за отсутствия свободного места для него. Если программа-клиент представляет собой сервер для других приложений (например, сервер FTP или HTTP), она не должна блокироваться в ожидании освобождения места для сообщения. Поэтому программа-клиент будет написана таким образом, чтобы она не блокировалась, но увеличивала счетчик переполнений (noverflow). Поскольку этот счетчик также является общим для всех процессов, он также должен быть защищен взаимным исключением, чтобы его значение не было повреждено.</p>
     <subtitle>Сдвиги сообщений и их содержимое</subtitle>
     <p>11-12 Массив msgoff содержит сдвиги сообщений в массиве msgdata, в котором сообщения хранятся подряд. Таким образом, сдвиг первого сообщения msgoff[0] = 0, msgoff [1] = 256 (значение MESGSIZE), msgoff [2] = 512 и т. д.</p>
     <p>Нужно понимать, что при работе с разделяемой памятью использовать сдвиг в таких случаях необходимо, поскольку объект разделяемой памяти может быть отображен в разные области адресного пространства процесса (может начинаться с разных физических адресов). Возвращаемое mmap значение для каждого процесса может быть индивидуальным. Поэтому при работе с объектами разделяемой памяти нельзя использовать указатели, содержащие реальные адреса переменных в этом объекте.</p>
     <p>В листинге 13.9 приведен текст программы-сервера, которая ожидает помещения сообщений в разделяемую память, а затем выводит их.</p>
     <subtitle>Листинг 13.9. Сервер, считывающий сообщения из разделяемой памяти</subtitle>
     <p><code>//pxshm/server2.c</code></p>
     <p><code>1  #include "cliserv2.h"</code></p>
     <empty-line/>
     <p><code>2  int</code></p>
     <p><code>3  main(int argc, char **argv)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   int fd, index, lastnoverflow, temp;</code></p>
     <p><code>6   long offset;</code></p>
     <p><code>7   struct shmstruct *ptr;</code></p>
     <p><code>8   if (argc != 2)</code></p>
     <p><code>9    err_quit("usage: server2 &lt;name&gt;");</code></p>
     <p><code>10  /* создание объекта разделяемой памяти, установка размера, отображение в память, закрытие дескриптора */</code></p>
     <p><code>11  shm_unlink(Px_ipc_name(argv[1])); /* ошибка игнорируется */</code></p>
     <p><code>12  fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR | O_CREAT | O_EXCL, FILE_MODE);</code></p>
     <p><code>13  ptr = Mmap(NULL, sizeof(struct shmstruct), PROT_READ | PROT_WRITE,</code></p>
     <p><code>14   MAP_SHARED, fd, 0);</code></p>
     <p><code>15  Ftruncate(fd, sizeof(struct shmstruct));</code></p>
     <p><code>16  Close(fd);</code></p>
     <p><code>17  /* инициализация массива сдвигов */</code></p>
     <p><code>18  for (index = 0; index &lt; NMESG; index++)</code></p>
     <p><code>19   ptr-&gt;msgoff[index] = index * MESGSIZE;</code></p>
     <p><code>20  /* инициализация семафоров в разделяемой памяти */</code></p>
     <p><code>21  Sem_init(&amp;ptr-&gt;mutex, 1, 1);</code></p>
     <p><code>22  Sem_init(&amp;ptr-&gt;nempty, 1, NMESG);</code></p>
     <p><code>23  Sem_init(&amp;ptr-&gt;nstored, 1, 0);</code></p>
     <p><code>24  Sem_init(&amp;ptr-&gt;noverflowmutex, 1, 1);</code></p>
     <p><code>25  /* программа-потребитель */</code></p>
     <p><code>26  index = 0;</code></p>
     <p><code>27  lastnoverflow = 0;</code></p>
     <p><code>28  for (;;) {</code></p>
     <p><code>29   Sem_wait(&amp;ptr-&gt;nstored);</code></p>
     <p><code>30   Sem_wait(&amp;ptr-&gt;mutex);</code></p>
     <p><code>31   offset = ptr-&gt;msgoff[index];</code></p>
     <p><code>32   printf("index = %d: %s\n", index, &amp;ptr-&gt;msgdata[offset]);</code></p>
     <p><code>33   if (++index &gt;= NMESG)</code></p>
     <p><code>34    index =0; /* циклический буфер */</code></p>
     <p><code>35   Sem_post(&amp;ptr-&gt;mutex);</code></p>
     <p><code>36   Sem_post(&amp;ptr-&gt;nempty);</code></p>
     <p><code>37   Sem_wait(&amp;ptr-&gt;noverflowmutex);</code></p>
     <p><code>38   temp = ptr-&gt;noverflow; /* не выводим, пока не снимем блокировку */</code></p>
     <p><code>39   Sem_post(&amp;ptr-&gt;noverflowmutex);</code></p>
     <p><code>40   if (temp != lastnoverflow) {</code></p>
     <p><code>41    printf("noverflow = %d\n", temp);</code></p>
     <p><code>42    lastnoverflow = temp;</code></p>
     <p><code>43   }</code></p>
     <p><code>44  }</code></p>
     <p><code>45  exit(0);</code></p>
     <p><code>46 }</code></p>
     <subtitle>Создание объекта разделяемой памяти</subtitle>
     <p>10-16 Сначала делается вызов shm_unlink, чтобы удалить объект с тем же именем, который мог остаться после другого приложения. Затем объект разделяемой памяти создается вызовом shm_open и отображается в адресное пространство процесса вызовом mmap, после чего дескриптор объекта закрывается.</p>
     <subtitle>Инициализация массива сдвигов</subtitle>
     <p>17-19 Массив сдвигов инициализируется сдвигами сообщений.</p>
     <subtitle>Инициализация семафоров</subtitle>
     <p>20-24 Инициализируются четыре семафора, размещаемые в объекте разделяемой памяти. Второй аргумент sem_init всегда делается ненулевым, поскольку семафоры будут использоваться совместно несколькими процессами.</p>
     <subtitle>Ожидание сообщения<strong>, вывод его содержимого</strong></subtitle>
     <p>25-36 Первая половина цикла for написана по стандартному алгоритму потребителя: ожидание изменения семафора nstored, установка блокировки для семафора mutex, обработка данных, увеличение значения семафора nempty.</p>
     <subtitle>Обработка переполнений</subtitle>
     <p>37-43 При каждом проходе цикла мы проверяем наличие возникших переполнений. Сравнивается текущее значение noverflows с предыдущим. Если значение изменилось, оно выводится на экран и сохраняется. Обратите внимание, что значение считывается с заблокированным взаимным исключением noverflowmutex, но блокировка снимается перед сравнением и выводом значения. Идея в том, что нужно всегда следовать общему правилу минимизации количества операций, выполняемых с заблокированным взаимным исключением. В листинге 13.10 приведен текст программы-клиента.</p>
     <subtitle>Листинг 13.10. Клиент, помещающий сообщения в разделяемую память</subtitle>
     <p><code>//pxshm/client2.c</code></p>
     <p><code>1  #include "cliserv2.h"</code></p>
     <empty-line/>
     <p><code>2  int</code></p>
     <p><code>3  main(int argc, char **argv)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   int fd, i, nloop, nusec;</code></p>
     <p><code>6   pid_t pid;</code></p>
     <p><code>7   char mesg[MESGSIZE];</code></p>
     <p><code>8   long offset;</code></p>
     <p><code>9   struct shmstruct *ptr;</code></p>
     <p><code>10  if (argc != 4)</code></p>
     <p><code>11   err_quit("usage: client2 &lt;name&gt; &lt;#loops&gt; &lt;#usec&gt;");</code></p>
     <p><code>12  nloop = atoi(argv[2]);</code></p>
     <p><code>13  nusec = atoi(argv[3]);</code></p>
     <p><code>14  /* открытие и отображение объекта разделяемой памяти, созданного сервером заранее */</code></p>
     <p><code>15  fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR, FILE_MODE);</code></p>
     <p><code>16  ptr = Mmap(NULL, sizeof(struct shmstruct), PROT_READ | PROT_WRITE,</code></p>
     <p><code>17   MAP_SHARED, fd, 0);</code></p>
     <p><code>18  Close(fd);</code></p>
     <p><code>19  pid = getpid();</code></p>
     <p><code>20  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>21   Sleep_us(nusec);</code></p>
     <p><code>22   snprintf(mesg, MESGSIZE, "pid %ld; message %d", (long) pid, i);</code></p>
     <p><code>23   if (sem_trywait(&amp;ptr-&gt;nempty) == –1) {</code></p>
     <p><code>24    if (errno == EAGAIN) {</code></p>
     <p><code>25     Sem_wait(&amp;ptr-&gt;noverflowmutex);</code></p>
     <p><code>26     ptr-&gt;noverflow++;</code></p>
     <p><code>27     Sem_post(&amp;ptr-&gt;noverflowmutex);</code></p>
     <p><code>28     continue;</code></p>
     <p><code>29    } else</code></p>
     <p><code>30     err_sys("sem_trywait error");</code></p>
     <p><code>31   }</code></p>
     <p><code>32   Sem_wait(&amp;ptr-&gt;mutex);</code></p>
     <p><code>33   offset = ptr-&gt;msgoff[ptr-&gt;nput];</code></p>
     <p><code>34   if (++(ptr-&gt;nput) &gt;= NMESG)</code></p>
     <p><code>35    ptr-&gt;nput = 0; /* циклический буфер */</code></p>
     <p><code>36   Sem_post(&amp;ptr-&gt;mutex);</code></p>
     <p><code>37   strcpy(&amp;ptr-&gt;msgdata[offset], mesg);</code></p>
     <p><code>38   Sem_post(&amp;ptr-&gt;nstored);</code></p>
     <p><code>39  }</code></p>
     <p><code>40  exit(0);</code></p>
     <p><code>41 }</code></p>
     <subtitle>Аргументы командной строки</subtitle>
     <p>10-13 Первый аргумент командной строки задает имя объекта разделяемой памяти; второй — количество сообщений, которые должны быть отправлены серверу данным клиентом. Последний аргумент задает паузу перед отправкой очередного сообщения (в микросекундах). Мы сможем получить ситуацию переполнения, запустив одновременно несколько экземпляров клиентов и указав небольшое значение для этой паузы. Таким образом мы сможем убедиться, что сервер корректно обрабатывает ситуацию переполнения.</p>
     <subtitle>Открытие и отображение разделяемой памяти</subtitle>
     <p>14-18 Мы открываем объект разделяемой памяти, предполагая, что он уже создан и проинициализирован сервером, а затем отображаем его в адресное пространство процесса. После этого дескриптор может быть закрыт.</p>
     <subtitle>Отправка сообщений</subtitle>
     <p>19-31 Клиент работает по простому алгоритму программы-производителя, но вместо вызова sem_wait(nempty), который приводил бы к блокированию клиента в случае отсутствия места в буфере для следующего сообщения, мы вызываем sem_trywait — эта функция не блокируется. Если значение семафора нулевое, возвращается ошибка EAGAIN. Мы обрабатываем эту ошибку, увеличивая значение счетчика переполнений.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>sleep_us — функция из листингов С.9 и С.10 [21]. Она приостанавливает выполнение программы на заданное количество микросекунд. Реализуется вызовом select или poll. </p>
     </cite>
     <p>32-37 Пока заблокирован семафор mutex, мы можем получить значение сдвига (offset) и увеличить счетчик nput, но мы снимаем блокировку с этого семафора перед операцией копирования сообщения в разделяемую память. Когда семафор заблокирован, должны выполняться только самые необходимые операции.</p>
     <p>Сначала запустим сервер в фоновом режиме, а затем запустим один экземпляр программы-клиента, указав 50 сообщений и нулевую паузу между ними: </p>
     <p><code>solaris % server2 serv2 &amp;</code></p>
     <p><code>[2] 27223</code></p>
     <p><code>solaris % <strong>client2 serv250 0</strong></code></p>
     <p><code>index = 0: pid 27224: message 0</code></p>
     <p><code>index = 1: pid 27224: message 1</code></p>
     <p><code>index = 2: pid 27224: message 2</code></p>
     <p><code><emphasis>…                                продолжает в том же духе</emphasis></code></p>
     <p><code>index = 15: pid 27224: message 47</code></p>
     <p><code>index = 0: pid 27224: message 48</code></p>
     <p><code>index = 1: pid 27224: message 49 <emphasis>нет утерянных сообщений</emphasis></code></p>
     <p>Но если мы запустим программу-клиент еще раз, то мы увидим возникновение переполнений.</p>
     <p><code>solaris % <strong>client2 serv250 0</strong></code></p>
     <p><code>index = 2: pid 27228: message 0</code></p>
     <p><code>index = 3: pid 27228: message 1</code></p>
     <p><code><emphasis>…              пока все в порядке</emphasis></code></p>
     <p><code>index = 10: pid 27228: message 8</code></p>
     <p><code>index = 11: pid 27228: message 9</code></p>
     <p><code>noverflow = 25 <emphasis>утеряно 25 сообщений</emphasis></code></p>
     <p><code>index = 12: pid 27228: message 10</code></p>
     <p><code>index = 13: pid 27228: message 11</code></p>
     <p><code><emphasis>…              нормально обрабатываются сообщения 12-22</emphasis></code></p>
     <p><code>index = 9: pid 27228: message 23</code></p>
     <p><code>index = 10: pid 27228: message 24</code></p>
     <p>На этот раз клиент успешно отправил сообщения 0-9, которые были получены и выведены сервером. Затем клиент снова получил управление и поместил сообщения 10-49, но места хватило только для первых 15, а последующие 25 (с 25 по 49) не были сохранены из-за переполнения:</p>
     <p>Очевидно, что в этом примере переполнение возникло из-за того, что мы потребовали от клиента отправлять сообщения так часто, как только возможно, не делая между ними пауз. В реальном мире такое случается редко. Целью этого примера было продемонстрировать обработку ситуаций, в которых места для очередного сообщения нет, но клиент не должен блокироваться. Такая ситуация может возникнуть, разумеется, не только при использовании разделяемой памяти, но и при использовании очередей сообщений, именованных и неименованных каналов.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Переполнение приемного буфера данными встречается не только в этом примере. В разделе 8.13 [24] обсуждалась такая ситуация в связи с дейтаграммами UDP и приемным буфером сокета UDP. В разделе 18.2 [23] подробно рассказывается о том, как доменные сокеты Unix возвращают отправителю ошибку ENOBUFS при переполнении приемного буфера получателя. Это отличает доменные сокеты от протокола UDP. Программа-клиент из листинга 13.10 узнает о переполнении буфера, поэтому если этот код поместить в функцию общего назначения, которую затем будут использовать другие программы, такая функция сможет возвращать ошибку вызывающему процессу при переполнении буфера сервера.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>13.7. Резюме</p>
     </title>
     <p>Разделяемая память Posix реализуется с помощью функции mmap, обсуждавшейся в предыдущей главе. Сначала вызывается функция shm_open с именем объекта Posix IPC в качестве одного из аргументов. Эта функция возвращает дескриптор, который затем передается функции mmap. Результат аналогичен отображению файла в память, но разделяемая память Posix не обязательно реализуется через файл.</p>
     <p>Поскольку доступ к объектам разделяемой памяти может быть получен через дескриптор, для установки размера объекта используется функция ftruncate, а информация о существующем объекте (биты разрешений, идентификаторы пользователя и группы, размер) возвращается функцией fstat.</p>
     <p>В главах, рассказывающих об очередях сообщений и семафорах Posix, мы приводили примеры их реализации через отображение в память (разделы 5.8 и 10.15). Для разделяемой памяти Posix мы этого делать не будем, поскольку реализация тривиальна. Если мы готовы использовать отображение в файл (что и сделано в Solaris и Digital Unix), shm_open реализуется через open, a shm_unlink — через unlink.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Измените программы из листингов 12.6 и 12.7 таким образом, чтобы они работали с разделяемой памятью Posix, а не с отображаемым в память файлом. Убедитесь, что результаты будут такими же, как и для отображаемого в память файла.</p>
     <p>2. В циклах for в листингах 13.3 и 13.4 используется команда *ptr++ для перебора элементов массива. Не лучше ли было бы использовать ptr[i]? </p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 14</p>
     <p>Разделяемая память System V</p>
    </title>
    <section>
     <title>
      <p>14.1. Введение</p>
     </title>
     <p>Основные принципы разделяемой памяти System V совпадают с концепцией разделяемой памяти Posix. Вместо вызовов shm_open и mmap в этой системе используются вызовы shmget и shmat.</p>
     <p>Для каждого сегмента разделяемой памяти ядро хранит нижеследующую структуру, определенную в заголовочном файле &lt;sys/shm.h&gt;:</p>
     <p><code>struct shmid_ds {</code></p>
     <p><code> struct ipc_perm shm_perm; /* структура разрешений */</code></p>
     <p><code> size_t shm_segsz; /* размер сегмента */</code></p>
     <p><code> pid_t shm_lpid; /* идентификатор процесса, выполнившего последнюю операцию */</code></p>
     <p><code> pid_t shm_cpid; /* идентификатор процесса-создателя */</code></p>
     <p><code> shmatt_t shm_nattch; /* текущее количество подключений */</code></p>
     <p><code> shmat_t shm_cnattch; /* количество подключений in-core */</code></p>
     <p><code> time_t shm_atime; /* время последнего подключения */</code></p>
     <p><code> time_t shm_dtime; /* время последнего отключения */</code></p>
     <p><code> time_t shm_ctime; /* время последнего изменения данной структуры */</code></p>
     <p><code>};</code></p>
     <p>Структура ipc_perm была описана в разделе 3.3; она содержит разрешения доступа к сегменту разделяемой памяти.</p>
    </section>
    <section>
     <title>
      <p>14.2. Функция shmget</p>
     </title>
     <p>С помощью функции shmget можно создать новый сегмент разделяемой памяти или подключиться к существующему:</p>
     <p><code>#include &lt;sys/shm.h&gt;</code></p>
     <p><code>int shmget(key_t <emphasis>key,</emphasis> size_t <emphasis>size,</emphasis> int <emphasis>oflag</emphasis>);</code></p>
     <p><code>/* Возвращает идентификатор разделяемой памяти в случае успешного завершения. –1 –в случае ошибки */</code></p>
     <p>Возвращаемое целочисленное значение называется идентификатором разделяемой памяти. Он используется с тремя другими функциями shmXXX.</p>
     <p>Аргумент <emphasis>key</emphasis> может содержать значение, возвращаемое функцией ftok, или константу IPC_PRIVATE, как обсуждалось в разделе 3.2.</p>
     <p>Аргумент <emphasis>size</emphasis> указывает размер сегмента в байтах. При создании нового сегмента разделяемой памяти нужно указать ненулевой размер. Если производится обращение к существующему сегменту, аргумент <emphasis>size</emphasis> должен быть нулевым.</p>
     <p>Флаг <emphasis>oflag </emphasis>представляет собой комбинацию флагов доступа на чтение и запись из табл. 3.3. К ним могут быть добавлены с помощью логического сложения флаги IPC_CREAT или IPC_CREAT | IPC_EXCL, как уже говорилось в связи с рис. 3.2.</p>
     <p>Новый сегмент инициализируется нулями.</p>
     <p>Обратите внимание, что функция shmget создает или открывает сегмент разделяемой памяти, но не дает вызвавшему процессу доступа к нему. Для подключения сегмента памяти предназначена функция shmat, описанная в следующем разделе.</p>
    </section>
    <section>
     <title>
      <p>14.3. Функция shmat</p>
     </title>
     <p>После создания или открытия сегмента разделяемой памяти вызовом shmget его нужно подключить к адресному пространству процесса вызовом shmat:</p>
     <p><code>#include &lt;sys/shm.h&gt;</code></p>
     <p><code>void *shmat(int <emphasis>shmid,</emphasis> const void <emphasis>*shmaddr,</emphasis> int <emphasis>flag</emphasis>);</code></p>
     <p><code>/* Возвращает начальный адрес полученной области в случае успешного завершения. –1 –в случае ошибки */</code></p>
     <p>Аргумент <emphasis>shmid —</emphasis> это идентификатор разделяемой памяти, возвращенный shmget. Функция shmat возвращает адрес начала области разделяемой памяти в адресном пространстве вызвавшего процесса. Правила, по которым формируется этот адрес, таковы:</p>
     <p>&#9632; если аргумент <emphasis>shmaddr</emphasis> представляет собой нулевой указатель, система сама выбирает начальный адрес для вызвавшего процесса. Это рекомендуемый (и обеспечивающий наилучшую совместимость) метод;</p>
     <p>&#9632; если <emphasis>shmaddr</emphasis> отличен от нуля, возвращаемый адрес зависит от того, был ли указан флаг SHM_RND (в аргументе <emphasis>flag</emphasis> ):</p>
     <p> &#9633; если флаг SHM_RND не указан, разделяемая память подключается непосредственно с адреса, указанного аргументом <emphasis>shmaddr,</emphasis></p>
     <p> &#9633; если флаг SHM_RND указан, сегмент разделяемой памяти подключается с адреса, указанного аргументом <emphasis>shmaddr,</emphasis> округленного вниз до кратного константе SHMLBA. Аббревиатура LBA означает lower boundary address — нижний граничный адрес.</p>
     <p>По умолчанию сегмент подключается для чтения и записи, если процесс обладает соответствующими разрешениями. В аргументе <emphasis>flag</emphasis> можно указать константу SHM_RDONLY, которая позволит установить доступ только на чтение.</p>
    </section>
    <section>
     <title>
      <p>14.4. Функция shmdt</p>
     </title>
     <p>После завершения работы с сегментом разделяемой памяти его следует отключить вызовом shmdt:</p>
     <p><code>#include &lt;sys/shm.h&gt;</code></p>
     <p><code>int shmdt(const void <emphasis>*shmaddr</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
     <p>При завершении работы процесса все сегменты, которые не были отключены им явно, отключаются автоматически.</p>
     <p>Обратите внимание, что эта функция не удаляет сегмент разделяемой памяти. Удаление осуществляется функцией shmctl с командой IPC_RMIO.</p>
    </section>
    <section>
     <title>
      <p>14.5. Функция shmctl</p>
     </title>
     <p>Функция shmctl позволяет выполнять различные операции с сегментом разделяемой памяти:</p>
     <p><code>#include &lt;sys/shm.h&gt;</code></p>
     <p><code>int shmctl(int <emphasis>shmid,</emphasis> int <emphasis>and,</emphasis> struct shmid_ds <emphasis>*buff</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения, –1 в случае ошибки */</code></p>
     <p>Команд (значений аргумента <emphasis>cmd)</emphasis> может быть три:</p>
     <p>&#9632; IPC_RMID — удаление сегмента разделяемой памяти с идентификатором <emphasis>shmid</emphasis> из системы;</p>
     <p>&#9632; IPC_SET — установка значений полей структуры shmid_ds для сегмента разделяемой памяти равными значениям соответствующих полей структуры, на которую указывает аргумент <emphasis>buff:</emphasis> shm_perm.uid, shm_perm.gid, shm_perm.mode. Значение поля shm_ctime устанавливается равным текущему системному времени;</p>
     <p>&#9632; IPC_STAT — возвращает вызывающему процессу (через аргумент <emphasis>buff)</emphasis> текущее значение структуры shmid_ds для указанного сегмента разделяемой памяти.</p>
    </section>
    <section>
     <title>
      <p>14.6. Простые программы</p>
     </title>
     <section>
      <p>В этом разделе приведено несколько примеров простых программ, иллюстрирующих работу с разделяемой памятью System V.</p>
     </section>
     <section>
      <title>
       <p>Программа shmget</p>
      </title>
      <p>Программа shmget, текст которой приведен в листинге 14.1,<a l:href="#n_1" type="note">[1]</a> создает сегмент разделяемой памяти, принимая из командной строки полное имя и длину сегмента.</p>
      <subtitle>Листинг 14.1. Создание сегмента разделяемой памяти System V указанного размера</subtitle>
      <p><code>//svshm/shmget.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int c, id, oflag;</code></p>
      <p><code>6   char *ptr;</code></p>
      <p><code>7   size_t length;</code></p>
      <p><code>8   oflag = SVSHM_MODE | IPC_CREAT;</code></p>
      <p><code>9   while ((c = Getopt(argc, argv, "e")) != –1) {</code></p>
      <p><code>10   switch (c) {</code></p>
      <p><code>11   case 'e':</code></p>
      <p><code>12    oflag |= IPC_EXCL;</code></p>
      <p><code>13    break;</code></p>
      <p><code>14   }</code></p>
      <p><code>15  }</code></p>
      <p><code>16  if (optind != argc – 2)</code></p>
      <p><code>17   err_quit("usage: shmget [ –e ] &lt;pathname&gt; &lt;length&gt;");</code></p>
      <p><code>18  length = atoi(argv[optind + 1]);</code></p>
      <p><code>19  id = Shmget(Ftok(argv[optind], 0), length, oflag);</code></p>
      <p><code>20  ptr = Shmat(id, NULL, 0);</code></p>
      <p><code>21  exit(0);</code></p>
      <p><code>22 }</code></p>
      <p>19 Вызов shmget создает сегмент разделяемой памяти указанного размера. Полное имя, передаваемое в качестве аргумента командной строки, преобразуется в ключ IPC System V вызовом ftok. Если указан параметр –е, наличие существующего сегмента с тем же именем приведет к возвращению ошибки. Если мы знаем, что сегмент уже существует, в командной строке должна быть указана нулевая длина.</p>
      <p>20 Вызов shmat подключает сегмент к адресному пространству процесса. После этого программа завершает работу. Разделяемая память System V обладает поменьшей мере живучестью ядра, поэтому сегмент разделяемой памяти при этом не удаляется.</p>
     </section>
     <section>
      <title>
       <p>Программа shmrmid</p>
      </title>
      <p>В листинге 14.2 приведен текст тривиальной программы shmrmid, которая вызывает shmctl с командой IPC_RMID для удаления сегмента разделяемой памяти из системы.</p>
      <subtitle>Листинг 14.2. Удаление сегмента разделяемой памяти system V из системы</subtitle>
      <p><code>//svshm/shmrmid.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int id;</code></p>
      <p><code>6   if (argc != 2)</code></p>
      <p><code>7    err_quit("usage: shmrmid &lt;pathname&gt;");</code></p>
      <p><code>8   id = Shmget(Ftok(argv[1], 0), 0, SVSHM_MODE);</code></p>
      <p><code>9   Shmctl(id, IPC_RMID, NULL);</code></p>
      <p><code>10  exit(0);</code></p>
      <p><code>11 }</code></p>
     </section>
     <section>
      <title>
       <p>Программа shmwrite</p>
      </title>
      <p>В листинге 14.3 приведен текст программы shmwrite, которая заполняет сегмент разделяемой памяти последовательностью значений 0, 1, 2, …, 254, 255, 0, 1 и т. д. </p>
      <subtitle>Листинг 14.3. Заполнение сегмента разделяемой памяти последовательностью чисел</subtitle>
      <p><code>//svshm/shmwrite.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int i, id;</code></p>
      <p><code>6   struct shmid_ds buff;</code></p>
      <p><code>7   unsigned char *ptr;</code></p>
      <p><code>8   if (argc != 2)</code></p>
      <p><code>9    err_quit("usage: shmwrite &lt;pathname&gt;");</code></p>
      <p><code>10  id = Shmget(Ftok(argv[1], 0), 0, SVSHM_MODE);</code></p>
      <p><code>11  ptr = Shmat(id, NULL, 0);</code></p>
      <p><code>12  Shmctl(id, IPC_STAT, &amp;buff);</code></p>
      <p><code>13  /* присваиваем: ptr[0] = 0, ptr[1] = 1 и т. д. */</code></p>
      <p><code>14  for (i = 0; i &lt; buff.shm_segsz; i++)</code></p>
      <p><code>15   *ptr++ = i % 256;</code></p>
      <p><code>16  exit(0);</code></p>
      <p><code>17 }</code></p>
      <p>10-12 Сегмент разделяемой памяти открывается вызовом shmget и подключается вызовом shmat. Его размер может быть получен вызовом shmctl с командой IPC_STAT.</p>
      <p>13-15 В разделяемую память записывается последовательность значений.</p>
     </section>
     <section>
      <title>
       <p>Программа shmread</p>
      </title>
      <p>Программа shmread, текст которой приведен в листинге 14.4, проверяет последовательность значений, записанную в разделяемую память программой shmwrite.</p>
      <subtitle>Листинг 14.4. Проверка значений в сегменте разделяемой памяти</subtitle>
      <p><code>//svshm/shmread.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int i, id;</code></p>
      <p><code>6   struct shmid_ds buff;</code></p>
      <p><code>7   unsigned char c, *ptr;</code></p>
      <p><code>8   if (argc != 2)</code></p>
      <p><code>9    err_quit("usage: shmread &lt;pathname&gt;");</code></p>
      <p><code>10  id = Shmget(Ftok(argv[1], 0), 0, SVSHM_MODE);</code></p>
      <p><code>11  ptr = Shmat(id, NULL, 0);</code></p>
      <p><code>12  Shmctl(id, IPC_STAT, &amp;buff);</code></p>
      <p><code>13  /* проверка значений ptr[0] = 0, ptr[1] = 1 и т. д. */</code></p>
      <p><code>14  for (i = 0; i &lt; buff.shm_segsz; i++)</code></p>
      <p><code>15   if ((c = *ptr++) != (i % 256))</code></p>
      <p><code>16    err_ret("ptr[%d] = %d", i.e);</code></p>
      <p><code>17  exit(0);</code></p>
      <p><code>18 }</code></p>
      <p>10-12 Открываем и подключаем сегмент разделяемой памяти. Его размер может быть получен вызовом shmctl с командой IPC_STAT. 13-16 Проверяется последовательность, записанная программой shmwrite.</p>
     </section>
     <section>
      <title>
       <p>Примеры</p>
      </title>
      <p>Создадим сегмент разделяемой памяти длиной 1234 байта в системе Solaris 2.6. Для идентификации сегмента используем полное имя нашего исполняемого файла shmget. Это имя будет передано функции ftok. Имя исполняемого файла сервера часто используется в качестве уникального идентификатора для данного приложения:</p>
      <p><code>solaris % <strong>shmget shmget 1234</strong></code></p>
      <p><code>solaris % <strong>ipcs –bmo</strong></code></p>
      <p><code>IPC status from &lt;running system&gt; as of Thu Jan 8 13:17:06 1998</code></p>
      <p><code>T ID KEY        MODE       OWNER    GROUP  NATTCH SEGSZ</code></p>
      <p><code>Shared Memory:</code></p>
      <p><code>m 1  0x0000f12a –rw-r--r-- rstevens other1 0      1234</code></p>
      <p>Программу ipcs мы запускаем для того, чтобы убедиться, что сегмент разделяемой памяти действительно был создан и не был удален по завершении программы shmcreate. Количество подключений (хранящееся в поле shm_nattch структуры shmid_ds) равно нулю, как мы и предполагали.</p>
      <p>Теперь запустим пpoгрaммy shmwrite, чтобы заполнить содержимое разделяемой памяти последовательностью значений. Затем проверим содержимое сегмента разделяемой памяти программой shmread и удалим этот сегмент:</p>
      <p><code>solaris % <strong>shmwrite shmget</strong></code></p>
      <p><code>solaris % <strong>shmread shmget</strong></code></p>
      <p><code>solaris % <strong>shmrmid shmget</strong></code></p>
      <p><code>solaris % <strong>ipes –bmo</strong></code></p>
      <p><code>IPC status from &lt;running system&gt; as of Thu Jan 8 13:17:06 1998</code></p>
      <p><code>T ID KEY        MODE       OWNER    GROUP  NATTCH SEGSZ</code></p>
      <p><code>Shared Memory:</code></p>
      <p>Мы используем программу ipcs, чтобы убедиться, что сегмент разделяемой памяти действительно был удален.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>При использовании имени исполняемого файла сервера в качестве аргумента ftok для идентификации какого-либо вида IPC System V обычно передается полное имя этого файла (например, /usr/bin/myserverd), а не часть имени, как сделано у нас (shmget). У нас не возникло проблем в этом примере, потому что все программы запускались из того же каталога, в котором был расположен исполняемый файл сервера. Вы помните, что функция ftok использует номер i-node файла для формирования ключа IPC и ей безразлично, определяется файл своим полным именем или его частью (относительным именем). </p>
      </cite>
     </section>
    </section>
    <section>
     <title>
      <p>14.7. Ограничения, накладываемые на разделяемую память</p>
     </title>
     <section>
      <p>На разделяемую память System V накладываются определенные ограничения точно так же, как и на семафоры и очереди сообщений System V (раздел 3.8). В табл. 14.1 приведены значения этих ограничений для разных реализаций. В первом столбце приведены традиционные для System V имена переменных ядра, в которых хранятся эти ограничения.</p>
      <empty-line/>
      <p>Таблица 14.1. Типичные значения ограничений, накладываемых на разделяемую память System V</p>
      <table>
       <tr align="left">
        <th align="left" valign="top">Имя</th>
        <th align="left" valign="top">Описание</th>
        <th align="left" valign="top">DUnix 4.0B</th>
        <th align="left" valign="top">Solaris 2.6</th>
       </tr>
       <tr align="left">
        <td align="left" valign="top">shmmax</td>
        <td align="left" valign="top">Максимальный размер сегмента в байтах</td>
        <td align="left" valign="top">4194304</td>
        <td align="left" valign="top">1048576</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">shmmnb</td>
        <td align="left" valign="top">Минимальный размер сегмента разделяемой памяти в байтах</td>
        <td align="left" valign="top">1</td>
        <td align="left" valign="top">1</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">shmmni</td>
        <td align="left" valign="top">Максимальное количество идентификаторов разделяемой памяти в системе</td>
        <td align="left" valign="top">128</td>
        <td align="left" valign="top">100</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">shmseg</td>
        <td align="left" valign="top">Максимальное количество сегментов, подключенных к процессу</td>
        <td align="left" valign="top">32</td>
        <td align="left" valign="top">6</td>
       </tr>
      </table>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Программа в листинге 14.5 определяет значения четырех ограничений, приведенных в табл. 14.1.</p>
      <subtitle>Листинг 14.5. Определение системных ограничений на разделяемую память</subtitle>
      <p><code>//svshm/limits.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #define MAX_NIDS 4096</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int i, j, shmid[MAX_NIDS];</code></p>
      <p><code>7   void *addr[MAX_NIDS];</code></p>
      <p><code>8   unsigned long size;</code></p>
      <p><code>9   /* проверка максимального количества открываемых идентификаторов */</code></p>
      <p><code>10  for (i = 0; i &lt;= MAX_NIDS; i++) {</code></p>
      <p><code>11   shmid[i] = shmget(IPC_PRIVATE, 1024, SVSHM_MODE | IPC_CREAT);</code></p>
      <p><code>12   if (shmid[i]== –1) {</code></p>
      <p><code>13    printf("%d identifiers open at once\n", i);</code></p>
      <p><code>14    break;</code></p>
      <p><code>15   }</code></p>
      <p><code>16  }</code></p>
      <p><code>17  for (j = 0; j &lt; i; j++)</code></p>
      <p><code>18   Shmctl(shmid[j], IPC_RMID, NULL);</code></p>
      <p><code>19   /* определяем максимальное количество подключаемых сегментов */</code></p>
      <p><code>20   for (i=0;i &lt;= MAX_NIDS; i++) {</code></p>
      <p><code>21    shmid[i] = Shmget(IPC_PRIVATE, 1024, SVSHM_MODE | IPC_CREAT);</code></p>
      <p><code>22    addr[i] = shmat(shmid[i], NULL, 0);</code></p>
      <p><code>23    if (addr[i] == (void *) –1) {</code></p>
      <p><code>24     printf("%d shared memory segments attached at once\n", i);</code></p>
      <p><code>25     Shmctl(shmid[i], IPC_RMID, NULL); /* удаляем неудачно подключенный сегмент */</code></p>
      <p><code>26     break;</code></p>
      <p><code>27    }</code></p>
      <p><code>28   }</code></p>
      <p><code>29   for (j = 0; j &lt; i; j++) {</code></p>
      <p><code>30    Shmdt(addr[j]);</code></p>
      <p><code>31    Shmcfl(shmid[j], IPC_RMID, NULL);</code></p>
      <p><code>32   }</code></p>
      <p><code>33   /* проверка минимального размера сегмента */</code></p>
      <p><code>34   for (size = 1; ; size++) {</code></p>
      <p><code>35   shmid[0] = shmget(IPC_PRIVATE, size, SVSHM_MODE | IPC_CREAT);</code></p>
      <p><code>36   if (shmid[0] != –1) { /* выход при успешном создании */</code></p>
      <p><code>37    printf("minimum size of shared memory segment = %lu\n", size);</code></p>
      <p><code>38    Shmctl(shmid[0], IPC_RMID, NULL);</code></p>
      <p><code>39    break;</code></p>
      <p><code>40   }</code></p>
      <p><code>41  }</code></p>
      <p><code>42  /* определение максимального размера сегмента */</code></p>
      <p><code>43  for (size = 65536; ; size += 4096) {</code></p>
      <p><code>44   shmid[0] = shmget(IPC_PRIVATE, size, SVSHM_MODE | IPC_CREAT);</code></p>
      <p><code>45   if (shmid[0] == –1) { /* выход при ошибке */</code></p>
      <p><code>46    printf("maximum size of shared memory segment = %lu\n", size-4096);</code></p>
      <p><code>47    break;</code></p>
      <p><code>48   }</code></p>
      <p><code>49   Shmctl(shmid[0], IPC_RMID, NULL);</code></p>
      <p><code>50  }</code></p>
      <p><code>51  exit(0);</code></p>
      <p><code>52 }</code></p>
      <p>Запустив эту программу в Digital Unix 4.0B, увидим:</p>
      <p><code>alpha % <strong>limits</strong></code></p>
      <p><code>127 identifiers open at once</code></p>
      <p><code>32 shared memory segments attached at once</code></p>
      <p><code>minimum size of shared memory segment = 1</code></p>
      <p><code>maximum size of shared memory segment = 4194304</code></p>
      <p>Причина, по которой в табл. 14.1 приведено значение 128 для числа идентификаторов, а наша программа выводит значение 127, заключается в том, что один сегмент разделяемой памяти всегда используется системным демоном.</p>
     </section>
    </section>
    <section>
     <title>
      <p>14.8. Резюме</p>
     </title>
     <p>Разделяемая память System V похожа на разделяемую память Posix. Наиболее схожи функции:</p>
     <p>&#9632; shmget для получения идентификатора; </p>
     <p>&#9632; shmat для подключения сегмента разделяемой памяти к адресному пространству процесса;</p>
     <p>&#9632; shmctl с командой IPC_STAT для получения размера существующего сегмента разделяемой памяти;</p>
     <p>&#9632; shmctl с командой IPC_RMID для удаления объекта разделяемой памяти.</p>
     <p>Одно из отличий состоит в том, что размер объекта разделяемой памяти Posix может быть изменен в любой момент вызовом ftruncate (как мы продемонстрировали в упражнении 13.1), тогда как размер объекта разделяемой памяти System V устанавливается изначально вызовом shmget и не может быть изменен.</p>
    </section>
    <section>
     <title>
      <p>Упражнение</p>
     </title>
     <p>Листинг 6.6 содержал измененную версию программы из листинга 6.4. Новая программа использовала для обращения к объекту IPC System V идентификатор вместо полного имени. Таким образом мы показали, что для доступа к очереди сообщений System V достаточно знать только ее идентификатор (если у нас имеются соответствующие разрешения). Сделайте аналогичные изменения в программе из листинга 14.4, продемонстрировав, что это верно и для разделяемой памяти System V. </p>
    </section>
   </section>
  </section>
  <section>
   <title>
    <p>ЧАСТЬ 5</p>
    <p>УДАЛЕННЫЙ ВЫЗОВ ПРОЦЕДУР</p>
   </title>
   <section>
    <title>
     <p>ГЛАВА 15</p>
     <p>Двери</p>
    </title>
    <section>
     <title>
      <p>15.1. Введение</p>
     </title>
     <section>
      <p>Поговорим о схеме клиент-сервер и вызове процедур. Существуют три различных типа вызова процедур, показанные на рис. 15.1.</p>
      <image l:href="#Any2FbImgLoader220"/>
      <p>Рис. 15.1. Три типа вызова процедур</p>
      <empty-line/>
      <p>1. Локальный вызов процедуры (local procedure call) знаком нам по обычному программированию на языке С. Вызываемая и вызывающая процедуры (функции) при этом относятся к одному и тому же процессу. При этом обычно выполняется некая команда процессора, передающая управление новой процедуре, а вызвавшая процедура сохраняет значение регистров процессора и выделяет место в стеке Под свои локальные переменные.</p>
      <p>2. Удаленный вызов процедуры (remote procedure call — RPC) происходит в ситуации, когда вызвавшая и вызываемая процедуры относятся к разным процессам. В такой ситуации мы обычно называем вызвавшую процедуру клиентом, а вызванную — сервером. Во втором сценарии на рис. 15.1 клиент и сервер выполняются на одном и том же узле. Это типичный частный случай третьего сценария, и это именно то, что осуществляется с помощью дверей (doors). Итак, двери дают возможность вызывать процедуру (функцию) другого процесса на том же узле. Один из процессов (сервер) делает процедуру, находящуюся внутри него, доступной для вызова другим процессам (клиентам), создавая для этой процедуры дверь. Мы можем считать двери специальным типом IPC, поскольку при этом между процессами (клиентом и сервером) передается информация в форме аргументов функции и возвращаемых значений.</p>
      <p>3. RPC в общем случае дает возможность клиенту на одном узле вызвать процедуру сервера на другом узле, если эти два узла связаны каким-либо образом по сети (третий сценарий на рис. 15.1). Такой вид взаимодействия будет описан в главе 16.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Впервые двери были разработаны для распределенной операционной системы Spring. Детали этого проекта доступны по адресу http://www.sun.com/tech/projects/spring. Описание механизма дверей в этой операционной системе можно найти в книге [7].</p>
       <p>Затем двери появились в версии Solaris 2.5, хотя единственная страница документации, к ним относящаяся, содержала только предупреждение о том, что двери являются экспериментальным интерфейсом, используемым отдельными приложениями Sun. В Solaris 2.6 описание этого интерфейса занимает уже 8 страниц, но в них он характеризуется как «развивающийся». В будущих версиях Solaris 2.6 описываемый в этой главе интерфейс API может быть изменен. Предварительная версия дверей для Linux уже разрабатывается, детали можно выяснить по адресу http://www.cs.brown.edu/~tor/doors.</p>
       <p>Чтобы воспользоваться интерфейсом дверей в Solaris 2.6, нужно подключить соответствующую библиотеку (-ldoor), содержащую функции door_XXX, описываемые в этой главе, и использовать файловую систему ядра (/kernel/sys/doorfs).</p>
       <p>Хотя двери поддерживаются только в системе Solaris, мы описываем их достаточно подробно, поскольку это описание позволяет подготовить читателя к удаленному вызову процедур без необходимости обсуждать какие-либо детали сетевого интерфейса. В приложении А мы увидим, что этот интерфейс достаточно быстр — едва ли не быстрее, чем все остальные средства передачи сообщений.</p>
      </cite>
      <p>Локальные вызовы процедур являются синхронными (synchronous): вызывающий процесс не получает управление до тех пор, пока не происходит возврат из вызванной процедуры. Потоки могут восприниматься как средство асинхронного вызова процедур: функция (указанная в третьем аргументе pthread_create) выполняется одновременно с вызвавшим процессом. Вызвавший процесс может ожидать завершения вызванного процесса с помощью функции pthread_join. Удаленный вызов процедур может быть как синхронным, так и асинхронным, но мы увидим, что вызовы через двери являются синхронными.</p>
      <p>Внутри процесса двери идентифицируются дескрипторами. Извне двери могут идентифицироваться именами в файловой системе. Сервер создает дверь вызовом door_create; аргументом этой функции является указатель на процедуру, которая будет связана с данной дверью, а возвращаемое значение является дескриптором двери. Затем сервер связывает полное имя файла с дескриптором двери с помощью функции fattach. Клиент открывает дверь вызовом open, при этом аргументом функции является полное имя файла, которое сервер связал с дверью, а возвращаемым значением — дескриптор, который будет использоваться клиентом для доступа к двери. Затем клиент может вызывать процедуру с помощью door_call. Естественно, программа, являющаяся сервером для некоторой двери, может являться клиентом для другой.</p>
      <p>Мы уже сказали, что вызовы через двери являются синхронными: когда клиент вызывает door_call, возврата из этой функции не происходит до тех пор, пока процедура на сервере не завершит работу (возможно, с ошибкой). Реализация дверей в Solaris связана с потоками. Каждый раз, когда клиент вызывает процедуру сервера, для обработки этого вызова создается новый поток в процессе-сервере. Работа с потоками обычно осуществляется автоматически функциями библиотеки дверей, при этом потоки создаются по мере необходимости, но мы увидим, что сервер может и сам управлять этими потоками, если это требуется. Это также означает, что одна и та же процедура может выполняться сервером для нескольких клиентов, причем для каждого из них будет создан отдельный поток. Такой сервер является параллельным. Поскольку одновременно могут выполняться несколько экземпляров процедуры сервера (каждая из которых представляет собой отдельный поток), содержимое этих процедур должно соответствовать определенным требованиям, которые обычно предъявляются к многопоточным программам.</p>
      <p>При удаленном вызове процедуры и данные, и дескрипторы могут быть переданы от клиента к серверу. Обратно также могут быть переданы данные и дескрипторы. Передача дескрипторов вообще является неотъемлемым свойством дверей. Более того, поскольку двери идентифицируются дескрипторами, это позволяет процессу передать дверь другому процессу. Более подробно о передаче дескрипторов будет говориться в разделе 15.8.</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>Начнем описание интерфейса дверей с простого примера: клиент передает серверу длинное целое, а сервер возвращает клиенту квадрат этого значения тоже как длинное целое. В листинге 15.1<a l:href="#n_1" type="note">[1]</a> приведен текст программы-клиента (в этом примере мы опускаем множество деталей, большую часть которых мы обсудим далее в тексте главы).</p>
      <subtitle>Листинг 15.1 .Клиент передает серверу длинное целое для возведения его в квадрат</subtitle>
      <p><code>//doors/client1.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int fd;</code></p>
      <p><code>6   long ival, oval;</code></p>
      <p><code>7   door_arg_t arg;</code></p>
      <p><code>8   if (argc != 3)</code></p>
      <p><code>9    err_quit("usage: client1 &lt;server-pathname&gt; &lt;integer-value&gt;");</code></p>
      <p><code>10  fd = Open(argv[1], O_RDWR); /* открываем дверь */</code></p>
      <p><code>11  /* задаем аргументы и указатель на результат */</code></p>
      <p><code>12  ival = atol(argv[2]);</code></p>
      <p><code>13  arg.data_ptr = (char *) &amp;ival; /* аргументы */</code></p>
      <p><code>14  arg.data_size = sizeof(long); /* размер аргументов */</code></p>
      <p><code>15  arg.desc_ptr = NULL;</code></p>
      <p><code>16  arg.desc_num = 0;</code></p>
      <p><code>17  arg.rbuf = (char *) &amp;oval; /* результат */</code></p>
      <p><code>18  arg.rsize = sizeof(long); /* размер результата */</code></p>
      <p><code>19  /* вызываем процедуру на сервере и выводим результат */</code></p>
      <p><code>20  Door_call(fd, &amp;arg);</code></p>
      <p><code>21  printf("result: %ld\n", oval);</code></p>
      <p><code>22  exit(0);</code></p>
      <p><code>23 }</code></p>
      <subtitle>Открываем дверь</subtitle>
      <p>8-10 Дверь задается полным именем, передаваемым в качестве аргумента командной строки. Она открывается вызовом open. Возвращаемый дескриптор называется дескриптором двери, но часто его самого и называют дверью.</p>
      <subtitle>Подготовка аргументов и указателя на результат</subtitle>
      <p>11-18 Структура arg содержит указатели на аргументы и результат. Поле data_ptr указывает на первый байт аргументов, a data_size содержит количество байтов в аргументах. Два поля desc_ptr и desc_num предназначены для передачи дескрипторов, о чем мы будем подробно говорить в разделе 15.8. rbuf указывает на первый байт буфера результата, a rsize задает его размер.</p>
      <subtitle>Вызов процедуры на сервере и вывод результата</subtitle>
      <p>19-21 Мы вызываем процедуру на сервере с помощью door_call; аргументами этого вызова являются дескриптор двери и указатель на структуру аргументов. После возвращения из этого вызова программа печатает получившийся результат.</p>
      <p>Программа-сервер приведена в листинге 15.2. Она состоит из процедуры сервера с именем servproc и функции main.</p>
      <subtitle>Листинг 15.2. Сервер, возводящий длинное целое в квадрат</subtitle>
      <p><code>//doors/server1.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   long arg, result;</code></p>
      <p><code>7   arg = *((long *) dataptr);</code></p>
      <p><code>8   result = arg * arg;</code></p>
      <p><code>9   Door_return((char *) &amp;result, sizeof(result), NULL, 0);</code></p>
      <p><code>10 }</code></p>
      <empty-line/>
      <p><code>11 int</code></p>
      <p><code>12 main(int argc, char **argv)</code></p>
      <p><code>13 {</code></p>
      <p><code>14  int fd;</code></p>
      <p><code>15  if (argc != 2)</code></p>
      <p><code>16   err_quit("usage: server1 &lt;server-pathname&gt;");</code></p>
      <p><code>17  /* создание двери и связывание ее с файлом */</code></p>
      <p><code>18  fd = Door_create(servproc, NULL, 0);</code></p>
      <p><code>19  unlink(argv[1]);</code></p>
      <p><code>20  Close(Open(argv[1], O_CREAT | O_RDWR, FILE_MODE));</code></p>
      <p><code>21  Fattach(fd, argv[1]);</code></p>
      <p><code>22  /* функция servproc() обрабатывает все запросы клиентов */</code></p>
      <p><code>23  for (;;)</code></p>
      <p><code>24   pause();</code></p>
      <p><code>25 }</code></p>
      <subtitle>Процедура сервера</subtitle>
      <p>2-10 Процедура сервера вызывается с пятью аргументами, но мы используем только один из них — dataptr. Он указывает на первый байт аргумента. Аргумент, представляющий собой длинное целое, передается через этот указатель и возводится в квадрат. Управление передается клиенту вместе с результатом вызовом door_return. Первый аргумент указывает на результат, второй задает его размер, а оставшиеся предназначены для возврата дескрипторов.</p>
      <subtitle>Создание дескриптора двери и связывание с ним файла</subtitle>
      <p>17-21 Дескриптор двери создается вызовом door_create. Первый аргумент является указателем на функцию, соответствующую этой двери (servproc). После получения этого дескриптора его нужно связать с некоторым именем в файловой системе, поскольку оно будет использоваться клиентом для подключения к этой двери. Делается это путем создания обычного файла в файловой системе (сначала мы вызываем unlink, на тот случай, если такой файл уже существует, причём возможная ошибка игнорируется) и вызова fattach — функции SVR4, связывающей дескриптор с полным именем файла.</p>
      <subtitle>Главный поток сервера ничего не делает</subtitle>
      <p>22-24 Главный поток сервера блокируется при вызове pause. Вся функциональность обеспечивается функцией servproc, которая будет запускаться как отдельный поток каждый раз при получении запроса клиента.</p>
      <p>Запустим сервер в отдельном окне:</p>
      <p><code>solaris % <strong>server1 /tmp/server1</strong></code></p>
      <p>После этого запустим пpoгрaммy-клиeнт в другом окне, указав в качестве аргумента то же полное имя, которое было указано при вызове сервера:</p>
      <p><code>solaris % <strong>client1 /tmp/server19</strong></code></p>
      <p><code>result: 81</code></p>
      <p><code>solaris % <strong>ls -l /tmp/server1</strong></code></p>
      <p><code>Drw-r-r– 1 rstevens other1 0 Apr 9 10:09 /tmp/server1</code></p>
      <p>Мы получили ожидаемый результат. Вызвав ls, мы видим, что эта пpoгрaммa выводит букву D в начале строки, соответствующей файлу, указывая, что этот файл является дверью.</p>
      <p>На рис. 15.2 приведена диaгрaммa работы данного примера. Функция door_call вызывает процедуру на сервере, которая затем вызывает door_return для возврата.</p>
      <p>На рис. 15.3 приведена диaгрaммa, показывающая, что в действительности происходит при вызове процедуры в другом процессе на том же узле.</p>
      <image l:href="#Any2FbImgLoader223"/>
      <p>Рис. 15.2. Внешний вид вызова процедуры в другом процессе</p>
      <empty-line/>
      <p>На рис. 15.3 выполняются следующие действия:</p>
      <p>0. Запускается сервер, вызывает door_create, чтобы создать дескриптор для функции servproc, затем связывает этот дескриптор с именем файла в файловой системе.</p>
      <p>1. Запускается клиент и вызывает door_call. Это функция в библиотеке дверей.</p>
      <p>2. Библиотечная функция door_call делает системный вызов. При этом указывается процедура, которая должна быть выполнена, а управление передается функции из библиотеки дверей процесса-сервера.</p>
      <p>3. Вызывается процедура сервера (servproc в данном примере).</p>
      <p>4. Процедура сервера делает все необходимое для обработки запроса клиента и вызывает door_return по завершении работы.</p>
      <p>5. Библиотечная функция door_return осуществляет системный вызов, передавая управление ядру.</p>
      <p>6. В этом вызове указывается процесс-клиент, которому и передается управление.</p>
      <image l:href="#Any2FbImgLoader225"/>
      <p>Рис. 15.3. Что в действительности происходит при вызове процедуры в другом процессе</p>
      <empty-line/>
      <p>Последующие разделы этой главы описывают интерфейс дверей (doors API) более подробно, с множеством примеров. В приложении А мы убедимся, что двери представляют собой наиболее быструю форму IPC (при измерении времени ожидания).</p>
     </section>
    </section>
    <section>
     <title>
      <p>15.2. Функция door_call</p>
     </title>
     <p>Функция door_call вызывается клиентом для обращения к процедуре сервера, выполняемой в адресном пространстве процесса-сервера:</p>
     <p><code>#include &lt;door.h&gt;</code></p>
     <p><code>int door_call(int <emphasis>fd,</emphasis> door_arg_t <emphasis>*argp</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения. –1 – в случае ошибки */</code></p>
     <p>Дескриптор <emphasis>fd</emphasis> обычно возвращается функцией open (см. листинг 15.1). Полное имя файла, открываемого клиентом, однозначно идентифицирует процедуру сервера, которая вызывается door_call при передаче дескриптора.</p>
     <p>Второй аргумент — <emphasis>argp</emphasis> — указывает на структуру, описывающую аргументы и приемный буфер для возвращаемых значений:</p>
     <p><code>typedef struct door_arg {</code></p>
     <p><code> char *data_ptr; /* при вызове указывает на аргументы, при возврате – на результаты */</code></p>
     <p><code> size_t data_size; /* при вызове определяет общий размер аргументов в байтах, при возврате – общий размер возвращаемых данных в байтах */</code></p>
     <p><code> door_desc_t *desc_ptr; /* при вызове указывает на аргументы-дескрипторы, при возврате указывает на возвращаемые дескрипторы */</code></p>
     <p><code> size_t desc_num; /* при вызове задает количество аргументов-дескрипторов, при возврате задает количество возвращаемых дескрипторов */</code></p>
     <p><code> char *rbuf; /* указатель на буфер результатов */</code></p>
     <p><code> size_t rsize; /* размер буфера результатов */ </code></p>
     <p><code>} door_arg_t;</code></p>
     <p>При возврате из удаленного вызова эта структура описывает возвращаемые значения. Все поля структуры могут быть изменены при возврате, мы подробно рассмотрим это ниже.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Использование типа char* для двух указателей кажется странным и требует использования явного преобразования типов для предотвращения вывода предупреждений компилятора. Естественно было бы использовать указатели типа void*. С указателями char* мы еще столкнемся в функции door_return. Вероятно, в Solaris 2.7 тип данных desc_num изменится на unsigned int и последний аргумент door_return изменится соответствующим образом.</p>
     </cite>
     <p>Аргументы и результаты могут быть двух типов: данные и дескрипторы.</p>
     <p>&#9632; Аргументы-данные представляют собой последовательность данных длиной data_size байт. На эту последовательность должен указывать data_ptr. Клиент и сервер должны заранее знать формат этих данных (и аргументов, и результатов). Нет способа указать серверу тип аргументов. В пpoгрaммax листингов 15.1 и 15.2 клиент и сервер были написаны таким образом, что они оба знали, что аргумент представлял собой одно длинное целое и возвращаемый результат также был одним длинным целым. Для скрытия внутреннего устройства передаваемых данных их можно объединить в структуру, что упростит работу тому, кто будет читать код несколько лет спустя. Итак, все аргументы можно заключить в одну структуру, результаты — в другую и обе их определить в одном заголовочном файле, используемом клиентом и сервером. Пример будет приведен в листингах 15.8 и 15.9. Если аргументов-данных нет, указатель data_ptr должен быть нулевым и размер данных data_size должен иметь значение 0.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Поскольку клиент и сервер работают с аргументами и результатами, помещаемыми в соответствующие буферы, компилировать их следует одним и тем же компилятором, поскольку разные компиляторы могут по-разному упорядочивать данные в структурах даже в одной и той же системе.</p>
     </cite>
     <p>&#9632; Аргументы-дескрипторы хранятся в массиве структур door_desc_t, каждая из которых содержит один передаваемый от клиента серверу дескриптор. Количество структур типа door_desc_t задается аргументом desc_num. (Мы описываем эту структуру и смысл «передачи дескриптора» в разделе 15.8.) Если аргументов-дескрипторов нет, следует передать нулевой указатель desc_ptr и присвоить полю desc_num значение 0.</p>
     <p>&#9632; При возврате из функции data_ptr указывает на результаты-данные, a data_size задает размер возвращаемых данных. Если никакие данные не возвращаются, data_size будет иметь значение 0, а значение указателя data_ptr следует игнорировать.</p>
     <p>&#9632; Функция может возвращать и дескрипторы, при этом desc_ptr указывает на массив структур типа door_desc_t, каждая из которых содержит один передаваемый сервером клиенту дескриптор. Количество возвращаемых структур типа door_desc_t хранится в поле desc_num. Если дескрипторы не возвращаются, значение desc_num будет равно 0, а указатель desc_ptr следует игнорировать.</p>
     <p>Можно спокойно использовать один и тот же буфер для передаваемых аргументов и возвращаемых результатов. При вызове door_call и data_ptr, и desc_ptr могут указывать на буфер, указанный аргументом rbuf.</p>
     <p>Перед вызовом door_call клиент устанавливает указатель rbuf на буфер для результатов, a rsize делает равным размеру буфера. После возвращения из функции и data_ptr, и desc_ptr будут указывать на этот буфер. Если он слишком мал для хранения результатов, возвращаемых сервером, библиотека дверей автоматически выделит новый буфер в адресном пространстве клиента с помощью mmap (раздел 12.2) и обновит значения rbuf и rsize соответствующим образом. Поля data_ptr и desc_ptr будут указывать на новый буфер. Клиент отвечает за то, чтобы обнаружить изменение этих указателей и впоследствии освободить занимаемую память вызовом munmap с аргументами rbuf и rsize. Пример будет приведен в листинге 15.4.</p>
    </section>
    <section>
     <title>
      <p>15.3. Функция door_create</p>
     </title>
     <p>Процесс-сервер определяет некоторую функцию как процедуру сервера вызовом door_create:</p>
     <p><code>#include &lt;door.h&gt;</code></p>
     <p><code>typedef void Door_server_proc(void <emphasis>*cookie,</emphasis> char <emphasis>*dataptr,</emphasis> size_t <emphasis>datasize, </emphasis>door_desc_t <emphasis>*descptr,</emphasis> size_t <emphasis>ndesc</emphasis>);</code></p>
     <p><code>int door_create(Door_server_proc <emphasis>*proc,</emphasis> void <emphasis>*cookie,</emphasis> u_int <emphasis>attr</emphasis>);</code></p>
     <p><code>/* Возвращает неотрицательный дескриптор в случае успешного завершения, –1 –в случае ошибки */</code></p>
     <p>Здесь мы добавили наше собственное определение типа, что упрощает прототип функции. Это определение утверждает, что процедуры сервера (например, servproc в листинге 15.2) вызываются с пятью аргументами и ничего не возвращают.</p>
     <p>Когда сервер вызывает door_create, первый аргумент <emphasis>(proc)</emphasis> указывает адрес процедуры сервера, которая будет вызываться через дескриптор двери, возвращаемый этим вызовом. При вызове процедуры сервера ее аргумент <emphasis>cookie</emphasis> содержит значение, передаваемое в качестве второго аргумента door_create. Это дает серверу возможность передавать процедуре какой-либо указатель каждый раз, когда эта процедура вызывается клиентом. Следующих четыре аргумента процедуры сервера — <emphasis>dataptr, datasize, descptr</emphasis> и <emphasis>ndesc</emphasis> — описывают аргументы-данные и аргументы-дескрипторы клиента. Они соответствуют первым четырем полям структуры door_arg_t, описанной в предыдущем разделе.</p>
     <p>Последний аргумент door_create(attr) описывает специальные атрибуты процедуры сервера и может быть равен либо 0, либо логической сумме двух констант:</p>
     <p>&#9632; DOOR_PRIVATE — библиотека дверей автоматически создает новые потоки в процессе-сервере при поступлении запросов от клиентов. По умолчанию эти потоки помещаются в пул потоков и могут использоваться для обслуживания запросов клиентов по всем дверям данного процесса.</p>
     <p>Указание атрибута DOOR_PRIVATE говорит библиотеке, что для данной двери следует создать собственный пул потоков, отдельный от пула потоков процесса.</p>
     <p>&#9632; DOOR_UNREF — когда количество дескрипторов, открытых для данной двери, изменяется с двух до одного, процедура сервера вызывается со вторым аргументом, имеющим значение DOOR_UNREF_DATA. При этом аргумент descptr представляет собой нулевой указатель, а аргументы datasize и ndesc равны нулю. Мы приведем пример использования этого атрибута в листинге 15.13.</p>
     <p>Возвращаемое сервером значение имеет тип void, поскольку процедура сервера никогда не завершает работу вызовом return. Вместо этого процедура должна вызывать door_return (функция описана в следующем разделе).</p>
     <p>В листинге 15.2 мы видели, что после получения дескриптора двери вызовом door_create сервер должен вызвать fattach для связывания этого дескриптора с некоторым файлом. Клиент затем может открыть этот файл для получения дескриптора двери, который впоследствии может быть использован при вызове door_call.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Функция fattach не включена в стандарт Posix.1, но ее наличие требуется стандартом Unix 98. Кроме того, этот стандарт определяет также функцию fdetach, отключающую связь дескриптора и файла, и программу fdetach, вызывающую эту функцию.</p>
     </cite>
     <p>Для дескрипторов дверей, создаваемых door_create, устанавливается бит FD_CLOEXEC. Это означает, что дескриптор закрывается при вызове процессом функций типа exec. Что касается вызова fork, несмотря на то что открытые родительским процессом дескрипторы используются дочерним процессом совместно с ним, только родительский процесс будет принимать вызовы от клиентов. Дочерним процессам вызовы не передаются, хотя дескриптор, возвращаемый door_create, и будет в них открыт.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Если мы учтем, что дверь идентифицируется с помощью PID и адреса процедуры сервера (что мы узнаем из структуры door_info_t в разделе 15.6), ограничения на вызовы exec и fork станут понятны. Дочерний процесс не будет принимать вызовов, поскольку его идентификатор процесса отличается от идентификатора, связанного с дверью. Дескриптор должен быть закрыт при вызове exec, потому что хотя идентификатор при этом и не меняется, адрес процедуры сервера уже не будет иметь никакого смысла в той программе, которая будет запущена после вызова exec.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>15.4. Функция door_return</p>
     </title>
     <p>После завершения работы процедуры сервера возврат из нее осуществляется вызовом door_return. Это приводит к возврату из door_call соответствующего клиента. </p>
     <p><code>#include &lt;door.h&gt;</code></p>
     <p><code>int door_return(char <emphasis>*dataptr,</emphasis> size_t <emphasis>datasize,</emphasis> door_desc_t <emphasis>*descptr,</emphasis> size_t <emphasis>ndesc</emphasis>);</code></p>
     <p><code>/* Ничего не возвращает вызвавшему процессу в случае успешного завершения. –1 – в случае ошибки */</code></p>
     <p>Возвращаемые данные задаются аргументами <emphasis>dataptr</emphasis> и <emphasis>datasize,</emphasis> а возвращаемые дескрипторы — <emphasis>descptr</emphasis> и <emphasis>ndesc.</emphasis></p>
    </section>
    <section>
     <title>
      <p>15.5. Функция door_cred</p>
     </title>
     <p>Интерфейс дверей предусматривает полезную возможность получения информации о клиенте при каждом вызове. Это осуществляется функцией door_cred:</p>
     <p><code>#include &lt;door.h&gt;</code></p>
     <p><code>int door_cred(door_cred_t <emphasis>*cred</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
     <p>Структура, на которую указывает аргумент <emphasis>cred,</emphasis> имеет тип door_cred_t, определяемый как</p>
     <p><code>typedef struct door_cred {</code></p>
     <p><code> uid_t dc_euid; /* действующий идентификатор пользователя клиента */</code></p>
     <p><code> gid_t dc_egid; /* действующий идентификатор группы клиента */</code></p>
     <p><code> uid_t dc_ruid; /* реальный идентификатор пользователя клиента */</code></p>
     <p><code> gid_t dc_rgid; /* реальный идентификатор группы клиента */</code></p>
     <p><code> pid_t dc_pid; /* идентификатор процесса клиента */</code></p>
     <p><code>} door_cred_t;</code></p>
     <p>В эту структуру помещается информация о клиенте при возвращении из вызова door_cred. В разделе 4.4 [21] подробно рассказывается о различиях между действующими и реальными идентификаторами пользователя и группы, а пример использования этой функции приведен в листинге. 15.5.</p>
     <p>Обратите внимание, что эта функция не принимает никаких дескрипторов. Она возвращает информацию о клиенте, осуществившем конкретный вызов через дверь, и поэтому должна вызываться из процедуры сервера или другой функции, вызываемой из процедуры сервера.</p>
    </section>
    <section>
     <title>
      <p>15.6. Функция door_info</p>
     </title>
     <p>Только что описанная функция door_cred предоставляет серверу информацию о клиенте. Клиент же может получить информацию о сервере, вызвав doo_info:</p>
     <p><code>#include &lt;door.h&gt;</code></p>
     <p><code>int door_info(int <emphasis>fd,</emphasis> door_info_t <emphasis>*info</emphasis>);</code></p>
     <p><code>/* Возвращает 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
     <p>Дескриптор <emphasis>fd</emphasis> указывает на открытую дверь. Структура типа door_info_t, на которую указывает <emphasis>info,</emphasis> после возвращения из функции содержит информацию о сервере:</p>
     <p><code>typedef struct doo_info {</code></p>
     <p><code> pid_t di_target; /* идентификатор процесса сервера */</code></p>
     <p><code> door_ptr_t di_proc; /* процедура сервера */</code></p>
     <p><code> door_ptr_t di_data; /* принимаемые процедурой сервера данные */</code></p>
     <p><code> door_attr_t di_attributes; /* атрибуты, связанные с данной дверью */</code></p>
     <p><code> door_id_t di_uniquifier; /* уникальный номер двери */</code></p>
     <p><code>} door info t;</code></p>
     <p>Поле di_target содержит идентификатор процесса сервера, a di_proc — адрес процедуры сервера в процессе (от которого клиенту, вообще говоря, пользы мало). Указатель, передаваемый процедуре сервера в качестве первого аргумента <emphasis>(cookie),</emphasis> возвращается клиенту в поле di_data.</p>
     <p>Текущие атрибуты двери помещаются в поле di_attributes, и два из них уже были описаны в разделе 15.3. Это атрибуты DOOR_PRIVATE и DOOR_UNREF. Два других атрибута называются DOOR_LOCAL (процедура является локальной для данного процесса) и DOOR_REVOKE (сервер аннулировал процедуру, связанную с этой дверью, вызвав door_revoke).</p>
     <p>Каждой двери при создании сопоставляется уникальный в пределах системы номер, который возвращается в поле di_uniquifier.</p>
     <p>Эта функция обычно вызывается клиентом для получения информации о сервере. Однако она может быть вызвана и из процедуры сервера, причем первым аргументом в этом случае должна быть константа DOOR_QUERY. Тогда функция возвратит информацию о вызвавшем потоке, то есть о данном экземпляре процедуры сервера. В этом случае адреса процедуры сервера и принимаемых аргументов (di_proc и di_data) могут представлять интерес.</p>
    </section>
    <section>
     <title>
      <p>15.7. Примеры</p>
     </title>
     <section>
      <p>В этом разделе мы приведем примеры использования пяти только что описанных функций.</p>
     </section>
     <section>
      <title>
       <p>Функция door_info</p>
      </title>
      <p>В листинге 15.3 приведен текст программы, открывающей дверь и вызывающей door_infо для получения информации об этой двери, которая затем выводится на экран.</p>
      <subtitle>Листинг 15.3. Вывод информации о двери</subtitle>
      <p><code>//doors/doorinfo.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int fd;</code></p>
      <p><code>6   struct stat stat;</code></p>
      <p><code>7   struct door_info info;</code></p>
      <p><code>8   if (argc != 2)</code></p>
      <p><code>9    err_quit("usage; doorinfo &lt;pathname&gt;");</code></p>
      <p><code>10  fd = Open(argv[1], O_RDONLY);</code></p>
      <p><code>11  Fstat(fd, &amp;stat);</code></p>
      <p><code>12  if (S_ISDOOR(stat.st_mode) == 0)</code></p>
      <p><code>13   err_quit("pathname is not a door");</code></p>
      <p><code>14  Door_info(fd, &amp;info);</code></p>
      <p><code>15  printf("server PID = %ld, uniquifier = %ld",</code></p>
      <p><code>16   (long)info.di_target, (long)info.di_uniquifier);</code></p>
      <p><code>17  if (info.di_attributes &amp; DOOR_LOCAL)</code></p>
      <p><code>18   printf(", DOOR_LOCAL");</code></p>
      <p><code>19  if (info.di_attributes &amp; DOOR_PRIVATE)</code></p>
      <p><code>20   printf(", DOOR_PRIVATE");</code></p>
      <p><code>21  if (info.di_attributes &amp; DOOR_REVOKED)</code></p>
      <p><code>22   printf(", DOOR_REVOKED");</code></p>
      <p><code>23  if (info.di_attributes &amp; DOOR_UNREF)</code></p>
      <p><code>24   printf(", DOOR_UNREF");</code></p>
      <p><code>25  printf("\n");</code></p>
      <p><code>26  exit(0);</code></p>
      <p><code>27 }</code></p>
      <p>Сначала программа открывает файл с указанным полным именем и проверяет, что это действительно дверь. Поле st_mode структуры stat в этом случае должно содержать такое значение, что макрос S_ISDOOR будет возвращать значение «истина». Затем вызывается функция door_info.</p>
      <p>Сначала мы укажем этой программе полное имя файла, не являющегося дверью, а затем попробуем получить информацию о двух встроенных дверях Solaris 2.6:</p>
      <p><code>solaris % <strong>doorinfo/etc/passwd</strong></code></p>
      <p><code>pathname is not a door</code></p>
      <p><code>solaris % <strong>doorinfo /etc/.name_service_door</strong></code></p>
      <p><code>server PID = 308, uniquifier = 18, DOOR_UNREF</code></p>
      <p><code>solaris % <strong>doorinfo /etc/.syslog_door</strong></code></p>
      <p><code>server PID = 282, uniquifier = 1635</code></p>
      <p><code>solaris % <strong>ps –f -p 308</strong></code></p>
      <p><code>root 308 1 0 Apr 01 ? 0:34 /usr/sbin/nscd</code></p>
      <p><code>solaris % <strong>ps –f -p 282</strong></code></p>
      <p><code>root 282 1 0 Apr 01 ? 0:10 /usr/sbin/syslogd –n –z 14</code></p>
      <p>Команду ps мы используем для того, чтобы узнать, какая программа выполняется с идентификатором, возвращаемым door_info.</p>
     </section>
     <section>
      <title>
       <p>Буфер результатов слишком мал</p>
      </title>
      <p>Когда мы рассказывали о функции door_call, мы отметили, что если буфер результатов оказывается слишком мал, библиотека дверей осуществляет автоматическое выделение нового буфера. Сейчас мы покажем это на примере. В листинге 15.4 приведен текст новой программы-клиента, которая представляет собой измененную версию листинга 15.2.</p>
      <subtitle>Листинг 15.4. Вывод адреса полученного результата</subtitle>
      <p><code>//doors/client2.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int fd;</code></p>
      <p><code>6   long ival, oval;</code></p>
      <p><code>7   door_arg_t arg;</code></p>
      <p><code>8   if (argc != 3)</code></p>
      <p><code>9    err_quit("usage: client2 &lt;server-pathname&gt; &lt;integer-value&gt;");</code></p>
      <p><code>10  fd = Open(argv[1], O_RDWR); /* открываем дверь */</code></p>
      <p><code>11  /* подготовка аргументов и указателя на результат */</code></p>
      <p><code>12  ival = atol(argv[2]);</code></p>
      <p><code>13  arg.data_ptr = (char *) &amp;ival; /* аргументы-данные */</code></p>
      <p><code>14  arg.data_size = sizeof(long); /* объем данных */</code></p>
      <p><code>15  arg.desc_ptr = NULL;</code></p>
      <p><code>16  arg.desc_num = 0;</code></p>
      <p><code>17  arg.rbuf = (char *) &amp;oval; /* возвращаемые данные */</code></p>
      <p><code>18  arg.rsize = sizeof(long); /* объем возвращаемых данных */</code></p>
      <p><code>19  /* вызов процедуры сервера и вывод результата */</code></p>
      <p><code>20  Door_call(fd, &amp;arg);</code></p>
      <p><code>21  printf("&amp;oval = %p, data_ptr = %p, rbuf = %p, rsize = %d\n",</code></p>
      <p><code>22   &amp;oval, arg.data_ptr, arg.rbuf, arg.rsize);</code></p>
      <p><code>23  printf("result: %ld\n", *((long *) arg.data_ptr));</code></p>
      <p><code>24  exit(0);</code></p>
      <p><code>25 }</code></p>
      <p>19-22 В этой версии программы на экран выводится адрес переменной oval, содержимое указателя data_ptr, который должен указывать на возвращаемые функцией door_call данные, и адрес и размер приемного буфера (rbuf и rsize).</p>
      <p>Запустим эту программу, не изменяя размер приемного буфера по сравнению с листингом 15.2. Мы ожидаем, что data_ptr и rbuf будут указывать на переменную oval и rsize будет иметь значение 4 (4 байта в буфере). И действительно, вот что мы видим:</p>
      <p><code>solaris % <strong>client2 /tmp/server2 22</strong></code></p>
      <p><code>&amp;oval = effff740, data_ptr = effff740, rbuf = effff740, rsize = 4</code></p>
      <p><code>result: 484</code></p>
      <p>Изменим только одну строку в листинге 15.4, уменьшив размер буфера клиента до одного байта. Новый вариант строки 18 будет иметь вид:</p>
      <p><code>arg.rsize = sizeof(long) – 1; /* размер буфера данных */</code></p>
      <p>Запустим новую программу и увидим, что библиотека автоматически выделила место под новый буфер результатов и data_ptr теперь указывает на новый буфер:</p>
      <p><code>solaris % <strong>client3 /tmp/server3 33</strong></code></p>
      <p><code>&amp;oval = effff740, data_ptr = ef620000, rbuf = ef620000, rsize = 4096</code></p>
      <p><code>result: 1089</code></p>
      <p>Размер выделенного буфера равен 4096 байт, что совпадает с размером страницы в данной системе, который мы узнали в разделе 12.6. Этот пример показывает, что следует всегда обращаться к результатам через указатель data_ptr, а не через переменные, адреса которых были переданы в rbuf. В нашем примере к результату типа «длинное целое» следует обращаться как *(long*)arg.data_ptr, а не oval (что мы делали в листинге 15.2).</p>
      <p>Новый буфер выделяется вызовом mmap и может быть возвращен системе с помощью munmap. Клиент может повторно использовать этот буфер при новых вызовах door_call.</p>
     </section>
     <section>
      <title>
       <p>Функция door_cred и информация о клиенте</p>
      </title>
      <p>На этот раз мы изменим нашу функцию servproc из листинга 15.3, добавив в нее вызов door_cred для получения информации о пользователе. В листинге 15.5 приведен текст новой процедуры сервера; функции main клиента и сервера не претерпевают изменений по сравнению с листингами 15.2 и 15.3.</p>
      <subtitle>Листинг 15.5. Процедура сервера, получающая информацию о клиенте</subtitle>
      <p><code>//doors/server4.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   long arg, result;</code></p>
      <p><code>7   door_cred_t info;</code></p>
      <p><code>8   /* получение и вывод информации о клиенте */</code></p>
      <p><code>9   Door_cred(&amp;info);</code></p>
      <p><code>10  printf("euid = %ld, ruid = %ld, pid = %ld\n",</code></p>
      <p><code>11  (long) info.dc_euid, (long) info.dc_ruid, (long) info.dc_pid);</code></p>
      <p><code>12  arg = *((long *) dataptr);</code></p>
      <p><code>13  result = arg * arg;</code></p>
      <p><code>14  Door_return((char *) &amp;result, sizeof(result), NULL, 0);</code></p>
      <p><code>15 }</code></p>
      <p>Сначала мы запустим программу-клиент и увидим, что действующий и реальный идентификаторы клиента совпадают, как мы и предполагали. Затем мы сменим владельца исполняемого файла на привилегированного пользователя, установим бит SUID и запустим программу снова:</p>
      <p><code>solaris % <strong>client4 /tmp/server4 77 </strong><emphasis>первый запуск клиента</emphasis></code></p>
      <p><code>result: 5929</code></p>
      <p><code>solaris % <strong>su                      </strong><emphasis>вход под именем привилегированного пользователя</emphasis></code></p>
      <p><code>Password:</code></p>
      <p><code>Sun Microsystems Inc. Sun OS 5.6 Generic August 1997</code></p>
      <p><code>solaris # <strong>cd                     </strong><emphasis>каталог, в котором находится исполняемый файл</emphasis></code></p>
      <p><code>solaris # <strong>ls –l client4</strong></code></p>
      <p><code>-rwxrwxr-x 1 rstevens other1 139328 Apr 13 06:02 client4</code></p>
      <p><code>solaris # <strong>chown root client4     </strong><emphasis>смена владельца на привилегированного пользователя</emphasis></code></p>
      <p><code>solaris # <strong>chmod u+s client4      </strong><emphasis>включение бита SUID</emphasis></code></p>
      <p><code>solaris # <strong>ls -l client4           </strong><emphasis>проверка разрешений и владельца файла</emphasis></code></p>
      <p><code>-rwsrwxr-x 1 root     other1 139328 Apr 13 06:02 client4</code></p>
      <p><code>solaris # <strong>exit</strong></code></p>
      <p><code>solaris % <strong>ls -l client4</strong></code></p>
      <p><code>-rwsrwxr-x 1 root     other1 139328 Apr 13 06:02 client4</code></p>
      <p><code>solaris % <strong>client4 /tmp/server477 </strong><emphasis>и еще раз запускаем программу-клиент</emphasis></code></p>
      <p><code>result: 5929</code></p>
      <p>Если мы посмотрим, что в это время выводил сервер, то увидим следующую картину:</p>
      <p><code>solaris % <strong>server4 /tmp/server4</strong></code></p>
      <p><code>euid = 224, ruid = 224, pid = 3168</code></p>
      <p><code>euid = 0, ruid = 224, pid = 3176</code></p>
      <p>Действующий идентификатор пользователя при втором запуске изменился. Значение 0 означает привилегированного пользователя.</p>
     </section>
     <section>
      <title>
       <p>Автоматическое управление потоками сервера</p>
      </title>
      <p>Чтобы посмотреть, как осуществляется управление потоками сервера, добавим в процедуру сервера команду выдачи ее идентификатора потока. Добавим в нее также пятисекундную паузу, чтобы имитировать длительное выполнение. За это время мы сможем запустить несколько клиентов. В листинге 15.6 приведен текст новой процедуры сервера.</p>
      <subtitle>Листинг 15.6. Процедура сервера, выводящая идентификатор потока</subtitle>
      <p><code>//doors/server5.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   long arg, result;</code></p>
      <p><code>7   arg = *((long *) dataptr);</code></p>
      <p><code>8   printf("thread id %ld, arg = %ld\n", pr_thread_id(NULL), arg);</code></p>
      <p><code>9   sleep(5);</code></p>
      <p><code>10  result = arg * arg;</code></p>
      <p><code>11  Door_return((char*)&amp;result, sizeof(result), NULL, 0);</code></p>
      <p><code>12 }</code></p>
      <p>Здесь используется новая функция из нашей библиотеки — pr_thread_id. Она принимает один аргумент (указатель на идентификатор потока или нулевой указатель вместо идентификатора вызвавшего потока) и возвращает идентификатор этого потока (обычно небольшое целое число, но всегда в формате длинного целого). Процессу всегда можно сопоставить целое число — его идентификатор. Хотя мы и не знаем, к какому типу принадлежит идентификатор процесса (int или long), мы просто преобразуем значение, возвращаемое getpid, к типу long и выводим значение (листинг 9.2). Однако идентификатор потока принадлежит к типу pthread_t, который не обязательно является одним из целых типов. И действительно, в Solaris 2.6 идентификаторами потоков являются короткие целые, тогда как в Digital Unix используются указатели. Однако часто возникает необходимость сопоставлять потокам небольшие целые числа для задач отладки (как в данном примере). Наша библиотечная функция, текст которой приведен в листинге 15.7, решает этот вопрос.</p>
      <subtitle>Листинг 15.7. Функция pr_thread_id: возвращает небольшой целочисленный идентификатор потока</subtitle>
      <p><code>//lib/wrappthread.c</code></p>
      <p><code>245 long</code></p>
      <p><code>246 pr_thread_id(pthread_t *ptr)</code></p>
      <p><code>247 {</code></p>
      <p><code>248 #if defined(sun)</code></p>
      <p><code>249  return((ptr == NULL) ? pthread_self() : *ptr); /* Solaris */</code></p>
      <p><code>250 #elif defined(__osf__) &amp;&amp; defined(__alpha)</code></p>
      <p><code>251  pthread_t tid;</code></p>
      <p><code>252  tid = (ptr == NULL) ? pthread_self() : *ptr; /* Digital Unix */</code></p>
      <p><code>253  return(pthread_getsequence_np(tid));</code></p>
      <p><code>254 #else</code></p>
      <p><code>255  /* прочие системы */</code></p>
      <p><code>256  return((ptr == NULL) ? pthread_self() : *ptr);</code></p>
      <p><code>257 #endif</code></p>
      <p><code>258 }</code></p>
      <p>Если в данной реализации идентификатор потока не является небольшим целым числом, функция может быть сложнее. Она может осуществлять отображение значений типа pthread_t в целые числа и сохранять эти отображения для последующих вызовов в массиве или связном списке. Эта задача решена в функции thread_name в книге [13].</p>
      <p>Вернемся к программе из листинга 15.6. Запустим ее три раза подряд. Поскольку нам приходится ждать возвращения подсказки интерпретатора, чтобы запустить клиент еще раз, мы можем быть уверены, что каждый раз выполняется пятисекундная пауза:</p>
      <p><code>solaris % <strong>client5 /tmp/server5 55</strong></code></p>
      <p><code>result: 3025</code></p>
      <p><code>solaris % <strong>client5 /tmp/server5 66</strong></code></p>
      <p><code>result: 4356</code></p>
      <p><code>solaris % <strong>client5 /tmp/server5 77</strong></code></p>
      <p><code>result: 5929</code></p>
      <p>Взглянув на текст, выводимый сервером, мы увидим, что клиенты каждый раз обслуживались одним и тем же потоком сервера:</p>
      <p><code>solaris % <strong>server5 /tmp/server5</strong></code></p>
      <p><code>thread id 4, arg = 55</code></p>
      <p><code>thread id 4, arg = 66</code></p>
      <p><code>thread id 4, arg = 77</code></p>
      <p>Теперь запустим три экземпляра программы-клиента одновременно:</p>
      <p><code>solaris % <strong>client5 /tmp/server5 11 &amp; client5 /tmp/server5 22 &amp; client5 /tmp/server5 33 &amp;</strong></code></p>
      <p><code>[2] 3812</code></p>
      <p><code>[3] 3813</code></p>
      <p><code>[4] 3814</code></p>
      <p><code>solaris % result: 484</code></p>
      <p><code>result: 121</code></p>
      <p><code>result: 1089</code></p>
      <p>Выводимый сервером текст показывает, что для обработки второго и третьего вызова процедуры сервера создаются новые потоки:</p>
      <p><code>thread id 4, arg = 22</code></p>
      <p><code>thread id 5, arg = 11</code></p>
      <p><code>thread id 6, arg = 33</code></p>
      <p>Затем мы запустим еще два клиента одновременно (первые три уже завершили работу):</p>
      <p><code>solaris % <strong>client5 /tmp/server5 11 &amp; client5 /tmp/server5 22 &amp;</strong></code></p>
      <p><code>[2] 3830</code></p>
      <p><code>[3] 3831</code></p>
      <p><code>solaris % result: 484</code></p>
      <p><code>result: 121</code></p>
      <p>При этом сервер использует созданные ранее потоки:</p>
      <p><code>thread id 6, arg = 22</code></p>
      <p><code>thread id 5, arg = 11</code></p>
      <p>Этот пример показывает, что серверный процесс (то есть библиотека дверей, подключенная к нему) автоматически создает потоки серверных процедур по мере необходимости. Если приложению требуется контроль над созданием потоков, оно может его осуществить с помощью функций, описанных в разделе 15.9.</p>
      <p>Мы также убедились, что сервер в этом случае является параллельным (concurrent): одновременно может выполняться несколько экземпляров процедуры сервера в виде отдельных потоков для обслуживания клиентов. Это следует также из того, что результат работы сервера выводится тремя экземплярами клиента одновременно пять секунд спустя после их одновременного запуска. Если бы сервер был последовательным, первый результат появился бы через 5 секунд после запуска, следующий — через 10, а последний — через 15.</p>
     </section>
     <section>
      <title>
       <p>Автоматическое управление потоками сервера: несколько процедур</p>
      </title>
      <p>В предыдущем примере процесс-сервер содержал лишь одну процедуру сервера. Вопрос, которым мы займемся теперь, звучит так: могут ли несколько процедур одного процесса использовать один и тот же пул потоков сервера? Чтобы узнать ответ, добавим к нашему серверу еще одну процедуру, а заодно перепишем наши программы заново, чтобы продемонстрировать более приличный стиль передачи аргументов и результатов между процессами.</p>
      <p>Первый файл в этом примере называется squareproc.h. В нем определен один тип данных для входных аргументов функции, возводящей в квадрат, и еще один — для возвращаемых ею результатов. В этом заголовочном файле также определяется полное имя двери для данной процедуры. Его текст его приведен в листинге 15.8.</p>
      <subtitle>Листинг 15.8. Заголовочный файл squareproc.h</subtitle>
      <p><code>//doors/squareproc.h</code></p>
      <p><code>1 #define PATH_SQUARE_DOOR "/tmp/squareproc_door"</code></p>
      <empty-line/>
      <p><code>2 typedef struct { /* аргументы squareproc() */</code></p>
      <p><code>3  long arg1;</code></p>
      <p><code>4 } squareproc_in_t;</code></p>
      <empty-line/>
      <p><code>5 typedef struct { /* возврат squareproc() */</code></p>
      <p><code>6  long res1;</code></p>
      <p><code>7 } squareproc_out_t;</code></p>
      <p>Наша новая процедура будет принимать длинное целое и возвращать квадратный корень из него (типа double). Мы определяем полное имя двери этой процедуры, структуры аргументов и результатов в заголовочном файле sqrtproc.h в листинге 15.9.</p>
      <subtitle>Листинг 15.9. Заголовочный файл sqrtproc.h</subtitle>
      <p><code>//doors/sqrtproc.h</code></p>
      <p><code>1 #define PATH_SQRT_DOOR "/tmp/sqrtproc_door"</code></p>
      <empty-line/>
      <p><code>2 typedef struct { /* входные данные sqrtproc() */</code></p>
      <p><code>3  long arg1;</code></p>
      <p><code>4 } sqrtproc_in_t;</code></p>
      <empty-line/>
      <p><code>5 typedef struct { /* возвращаемые sqrtproc() данные */</code></p>
      <p><code>6  double res1;</code></p>
      <p><code>7 } sqrtproc_out_t;</code></p>
      <p>Программа-клиент приведена в листинге 15.10. Она последовательно вызывает две процедуры сервера и выводит возвращаемые ими результаты. Эта программа устроена аналогично другим клиентским программам, приведенным в этой главе.</p>
      <subtitle>Листинг 15.10. Клиент, вызывающий две процедуры</subtitle>
      <p><code>//doors/client7.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "squareproc.h"</code></p>
      <p><code>3  #include "sqrtproc.h"</code></p>
      <empty-line/>
      <p><code>4  int</code></p>
      <p><code>5  main(int argc, char **argv)</code></p>
      <p><code>6  {</code></p>
      <p><code>7   int fdsquare, fdsqrt;</code></p>
      <p><code>8   door_arg_t arg;</code></p>
      <p><code>9   squareproc_in_t square_in;</code></p>
      <p><code>10  squareproc_out_t square_out;</code></p>
      <p><code>11  sqrtproc_in_t sqrt_in;</code></p>
      <p><code>12  sqrtproc_out_t sqrt_out;</code></p>
      <p><code>13  if (argc != 2)</code></p>
      <p><code>14   err_quit("usage: client7 &lt;integer-value&gt;");</code></p>
      <p><code>15  fdsquare = Open(PATH_SQUARE_DOOR, O_ROWR);</code></p>
      <p><code>16  fdsqrt = Open(PATH_SQRT_DOOR, O_RDWR);</code></p>
      <p><code>17  /* подготовка аргументов и вызов squareproc() */</code></p>
      <p><code>18  square_in.arg1 = atol(argv[1]);</code></p>
      <p><code>19  arg.data_ptr = (char*)&amp;square_in;</code></p>
      <p><code>20  arg.data_size = sizeof(square_in);</code></p>
      <p><code>21  arg.desc_ptr = NULL;</code></p>
      <p><code>22  arg.desc_num = 0;</code></p>
      <p><code>23  arg.rbuf = (char*)&amp;square_out;</code></p>
      <p><code>24  arg.rsize = sizeof(square_out);</code></p>
      <p><code>25  Door_call(fdsquare, &amp;arg);</code></p>
      <p><code>26  /* подготовка аргументов и вызов sqrtproc() */</code></p>
      <p><code>27  sqrt_in.arg1 = atol(argv[1]);</code></p>
      <p><code>28  arg.data_ptr = (char*)&amp;sqrt_in;</code></p>
      <p><code>29  arg.data_size = sizeof(sqrt_in);</code></p>
      <p><code>30  arg.desc_ptr = NULL;</code></p>
      <p><code>31  arg.desc_num = 0;</code></p>
      <p><code>32  arg.rbuf = (char*)&amp;sqrt_out;</code></p>
      <p><code>33  arg.rsize = sizeof(sqrt_out);</code></p>
      <p><code>34  Door_call(fdsqrt, &amp;arg);</code></p>
      <p><code>35  printf("result: %ld %g\n", square_out.res1, sqrt_out.res1);</code></p>
      <p><code>36  exit(0);</code></p>
      <p><code>37 }</code></p>
      <p>Текст двух серверных процедур приведен в листинге 15.11. Каждая из них выводит текущий идентификатор потока и значение аргумента, делает 5-секунд-ную паузу, вычисляет результат и завершает работу.</p>
      <subtitle>Листинг 15.11. Две процедуры сервера</subtitle>
      <p><code>//doors/server7.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include &lt;math.h&gt;</code></p>
      <p><code>3  #include "squareproc.h"</code></p>
      <p><code>4  #include "sqrtproc.h"</code></p>
      <empty-line/>
      <p><code>5  void</code></p>
      <p><code>6  squareproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>7   door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>8  {</code></p>
      <p><code>9   squareproc_in_t in;</code></p>
      <p><code>10  squareproc_out_t out;</code></p>
      <p><code>11  memcpy(&amp;in, dataptr, min(sizeof(in), datasize));</code></p>
      <p><code>12  printf("squareproc: thread id %ld, arg = %ld\n",</code></p>
      <p><code>13   pr_thread_id(NULL), in.arg1);</code></p>
      <p><code>14  sleep(5);</code></p>
      <p><code>15  out.res1 = in.arg1 * in.arg1;</code></p>
      <p><code>16  Door_return((char *) &amp;out, sizeof(out), NULL, 0);</code></p>
      <p><code>17 }</code></p>
      <empty-line/>
      <p><code>18 void</code></p>
      <p><code>19 sqrtproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>20  door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>21 {</code></p>
      <p><code>22  sqrtproc_in_t in;</code></p>
      <p><code>23  sqrtproc_out_t out;</code></p>
      <p><code>24  memcpy(&amp;in, dataptr, min(sizeof(in), datasize));</code></p>
      <p><code>25  printf("sqrtproc: thread id %ld, arg = %ld\n",</code></p>
      <p><code>26   pr_thread_id(NULL), in.arg1);</code></p>
      <p><code>27  sleep(5);</code></p>
      <p><code>28  out.res1 = sqrt((double)in.arg1);</code></p>
      <p><code>29  Door_return((char *) &amp;out, sizeof(out), NULL, 0);</code></p>
      <p><code>30 }</code></p>
      <p>Функция main сервера, текст которой приведен в листинге 15.12, открывает дескрипторы дверей и связывает каждый из них с одной из процедур сервера.</p>
      <subtitle>Листинг 15.12. Функция main сервера</subtitle>
      <p><code>//doors/server7.c</code></p>
      <p><code>31 int</code></p>
      <p><code>32 main(int argc, char **argv)</code></p>
      <p><code>33 {</code></p>
      <p><code>34  int fd;</code></p>
      <p><code>35  if (argc != 1)</code></p>
      <p><code>36   err_quit("usage: server7");</code></p>
      <p><code>37  fd = Door_create(squareproc, NULL, 0);</code></p>
      <p><code>38  unlink(PATH_SQUARE_DOOR);</code></p>
      <p><code>39  Close(Open(PATH_SQUARE_DOOR, O_CREAT | O_RDWR, FILE_MODE));</code></p>
      <p><code>40  Fattach(fd, PATH_SQUARE_DOOR);</code></p>
      <p><code>41  fd = Door_create(sqrtproc, NULL, 0);</code></p>
      <p><code>42  unlink(PATH_SQRT_DOOR);</code></p>
      <p><code>43  Close(Open(PATH_SQRT_DOOR, O_CREAT | O_RDWR, FILE_MODE));</code></p>
      <p><code>44  Fattach(fd, PATH_SQRT_DOOR);</code></p>
      <p><code>45  for (;;)</code></p>
      <p><code>46   pause();</code></p>
      <p><code>47 }</code></p>
      <p>Запустим программу-клиент и подождем 10 секунд до вывода результатов (как мы и ожидали):</p>
      <p><code>solaris % <strong>client7 77</strong></code></p>
      <p><code>result: 5929 8.77496</code></p>
      <p>Посмотрев на выводимый сервером текст, мы увидим, что один и тот же поток этого процесса использовался для обработки обоих запросов клиента:</p>
      <p><code>solaris % <strong>server7</strong></code></p>
      <p><code>squareproc: thread id 4, arg = 77</code></p>
      <p><code>sqrtproc: thread id 4, arg = 77</code></p>
      <p>Это подтверждает наши предположения о том, что любой поток из пула сервера может использоваться при обработке запросов клиентов для любой процедуры.</p>
     </section>
     <section>
      <title>
       <p>Атрибут DOOR_UNREF для серверов</p>
      </title>
      <p>В разделе 15.3 мы отметили, что при вызове door_create для создаваемой двери можно указать атрибут DOOR_UNREF. В документации говорится, что если количество дескрипторов, относящихся к этой двери, уменьшается с двух до одного, осуществляется специальный вызов процедуры сервера. Особенность вызова заключается в том, что второй аргумент процедуры сервера (указатель на данные) при этом является константой DOOR_UNREF_DATA. Мы продемонстрируем три способа обращения к двери.</p>
      <p>1. Дескриптор, возвращаемый door_create, считается первой ссылкой на эту дверь. Вообще говоря, причина, по которой специальный вызов происходит при изменении количества дескрипторов с 2 на 1, а не с 1 на 0, заключается в том, что первый дескриптор обычно не закрывается сервером до завершения работы.</p>
      <p>2. Полное имя, связанное с дверью в файловой системе, также считается ссылкой на дверь. Ее можно удалить вызовом функции fdetach, или запустив программу fdetach, или удалив полное имя из файловой системы (функцией unlink или командой rm).</p>
      <p>3.  Дескриптор, возвращаемый клиенту функцией open, считается открытой ссылкой до тех пор, пока не будет закрыт либо явным вызовом close, либо неявно, при завершении клиента. Во всех примерах этой главы дескриптор закрывается неявно.</p>
      <p>Первый пример показывает, что если сервер закрывает свой дескриптор после вызова fattach, немедленно происходит специальный вызов процедуры сервера. В листинге 15.13 приведен текст процедуры сервера и функции main.</p>
      <subtitle>Листинг 15.13. Процедура сервера, обрабатывающая специальный вызов</subtitle>
      <p><code>//doors/serverunref1.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   long arg, result;</code></p>
      <p><code>7   if (dataptr == DOOR_UNREF_DATA) {</code></p>
      <p><code>8    printf("door unreferenced\n");</code></p>
      <p><code>9    Door_return(NULL, 0, NULL, 0);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  arg = *((long*)dataptr);</code></p>
      <p><code>12  printf("thread id %ld, arg = %ld\n", pr_thread_id(NULL), arg);</code></p>
      <p><code>13  sleep(6);</code></p>
      <p><code>14  result = arg * arg;</code></p>
      <p><code>15  Door_return((char *)&amp;result, sizeof(result), NULL, 0);</code></p>
      <p><code>16 }</code></p>
      <empty-line/>
      <p><code>17 int</code></p>
      <p><code>18 main(int argc, char **argv)</code></p>
      <p><code>19 {</code></p>
      <p><code>20  int fd;</code></p>
      <p><code>21  if (argc != 2)</code></p>
      <p><code>22   err_quit("usage: server1 &lt;server-pathname&gt;");</code></p>
      <p><code>23  /* создание дескриптора и связывание с файлом */</code></p>
      <p><code>24  fd = Door_create(servproc, NULL, DOOR_UNREF);</code></p>
      <p><code>25  unlink(argv[1]);</code></p>
      <p><code>26  Close(Open(argv[1], O_CREAT | O_RDWR, FILE_MODE));</code></p>
      <p><code>27  Fattach(fd, argv[1]);</code></p>
      <p><code>28  Close(fd);</code></p>
      <p><code>29  /* процедура servproc() обрабатывает все запросы клиентов */</code></p>
      <p><code>30  for(;;)</code></p>
      <p><code>31   pause();</code></p>
      <p><code>32 }</code></p>
      <p>7-10 Процедура сервера распознает специальный вызов и выводит сообщение об этом. Возврат из специального вызова происходит путем вызова door_return с двумя нулевыми указателями и нулевыми значениями размеров.</p>
      <p>28 Теперь мы закрываем дескриптор двери после выполнения fattach. Этот дескриптор может быть нужен серверу только для вызовов door_bind, doo_info и door_revoke.</p>
      <p>Запустив сервер, мы увидим, что немедленно произойдет специальный вызов:</p>
      <p><code>solaris % <strong>serverunref1 /tmp/door1</strong></code></p>
      <p><code>door unreferenced</code></p>
      <p>Если мы проследим за значением счетчика открытых дескрипторов, мы увидим, что он становится равен 1 после возврата из door_create и 2 после возврата из fattach. Вызов close уменьшает количество открытых дескрипторов с двух до одного, что приводит к специальному вызову процедуры. Единственная оставшаяся ссылка при этом представляет собой имя в файловой системе, а этого клиенту достаточно, чтобы обратиться к двери. Поэтому клиент продолжает работать правильно:</p>
      <p><code>solaris % <strong>clientunref1 /tmp/door1 11</strong></code></p>
      <p><code>result: 121</code></p>
      <p><code>solaris % <strong>clientunref1 /tmp/door1 22</strong></code></p>
      <p><code>result: 484</code></p>
      <p>Более того, дальнейших специальных вызовов серверной процедуры не происходит. Для каждой двери осуществляется только один специальный вызов.</p>
      <p>Теперь изменим нашу программу-сервер обратно, убрав вызов close для дескриптора двери. Процедура сервера и функция main приведены в листинге 15.14.</p>
      <subtitle>Листинг 15.14. Сервер, не закрывающий дескриптор двери</subtitle>
      <p><code>//doors/serverunref2.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  servproc(void *cookie. char *dataptr, size_t datasize,</code></p>
      <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   long arg, result;</code></p>
      <p><code>7   if (dataptr == DOOR_UNREF_DATA) {</code></p>
      <p><code>8    printf("door unreferenced\n");</code></p>
      <p><code>9    Door_return(NULL, 0, NULL, 0);</code></p>
      <p><code>10  }</code></p>
      <p><code>11  arg = *((long *)dataptr);</code></p>
      <p><code>12  printf("thread id %ld, arg = %ld\n", pr_thread_id(NULL), arg);</code></p>
      <p><code>13  sleep(6);</code></p>
      <p><code>14  result = arg * arg;</code></p>
      <p><code>15  printf("thread id %ld returning\n", pr_thread_id(NULL));</code></p>
      <p><code>16  Door_return((char *)&amp;result, sizeof(result), NULL, 0);</code></p>
      <p><code>17 }</code></p>
      <empty-line/>
      <p><code>18 int</code></p>
      <p><code>19 main(int argc, char **argv)</code></p>
      <p><code>20 {</code></p>
      <p><code>21  int fd;</code></p>
      <p><code>23  if (argc != 2)</code></p>
      <p><code>24   err_quit("usage: server1 &lt;server-pathname&gt;");</code></p>
      <p><code>25  /* создание двери, дескриптора и подключение к файлу */</code></p>
      <p><code>26  fd = Door_create(servproc, NULL, DOOR_UNREF);</code></p>
      <p><code>27  unlink(argv[1]);</code></p>
      <p><code>28  Close(Open(argv[1], O_CREAT | O_RDWR, FILE_MODE));</code></p>
      <p><code>29  Fattach(fd, argv[1]);</code></p>
      <p><code>30  /* servproc() обрабатывает все запросы клиентов */</code></p>
      <p><code>31  for(;;)</code></p>
      <p><code>32   pause();</code></p>
      <p><code>33 }</code></p>
      <p>Мы оставляем 6-секундную паузу и выводим сообщение о возврате из процедуры сервера. Запустим сервер в одном окне, а из другого проверим существование имени файла двери в файловой системе и удалим его с помощью rm:</p>
      <p><code>solaris % <strong>ls –l /tmp/door2</strong></code></p>
      <p><code>Drw-r--r-- 1 rstevens other1 0 Apr 16 08:58 /tmp/door2</code></p>
      <p><code>solaris % <strong>rm /tmp/door2</strong></code></p>
      <p>После удаления имени файла происходит специальный вызов процедуры сервера:</p>
      <p><code>solaris % <strong>serverunref2 /trap/door2</strong></code></p>
      <p><code>door unreferenced <emphasis>после удаления файла из файловой системы</emphasis></code></p>
      <p>Если мы проследим за количеством ссылок на эту дверь, то увидим следующее: одна ссылка появляется после вызова door_create, вторая — после fattach. После удаления файла с помощью rm количество ссылок снова уменьшается до единицы, что приводит к специальному вызову процедуры.</p>
      <p>В последнем примере использования этого атрибута мы снова удалим имя из файловой системы. Но на этот раз мы сначала запустим три экземпляра программы-клиента. Специальный вызов процедуры произойдет только после завершения последнего клиента, потому что каждый экземпляр клиента увеличивает количество ссылок на дверь. Используем сервер из листинга 15.14 и клиент из листинга 15.2.</p>
      <p><code>solaris % <strong>clientunref2 /tmp/door2 44 &amp; clientunref2 /tmp/door2 55 &amp; clientunref2/tmp/door2 55 &amp;</strong></code></p>
      <p><code>[2] 13552</code></p>
      <p><code>[3] 13553</code></p>
      <p><code>[4] 13554</code></p>
      <p><code>solaris % <strong>rm /tmp/door2 </strong><emphasis>клиенты все еще выполняются</emphasis></code></p>
      <p><code>solaris % result: 1936</code></p>
      <p><code>result: 3025</code></p>
      <p><code>result: 4356</code></p>
      <p>Сервер при этом выведет вот что:</p>
      <p><code>solaris % <strong>serverunref2 /tmp/door2</strong></code></p>
      <p><code>thread id 4, arg = 44</code></p>
      <p><code>thread id 5, arg = 55</code></p>
      <p><code>thread id 6, arg = 66</code></p>
      <p><code>thread id 4 returning</code></p>
      <p><code>thread id 5 returning</code></p>
      <p><code>thread id 6 returning</code></p>
      <p><code>door unreferenced</code></p>
      <p>Проследим за значением счетчика открытых ссылок для этой двери. Он становится равным 1 после вызова door_create, 2 после вызова fattach. Когда три клиента вызывают open, счетчик увеличивается с 2 до 5. После удаления имени файла счетчик уменьшается до 4. После завершения работы трех клиентов счетчик уменьшается с 4 до 1 (последовательно), и последнее его изменение с 2 до 1 приводит к специальному вызову процедуры.</p>
      <p>Этими примерами мы показали, что хотя описание атрибута DOOR_UNREF выглядит просто («специальный вызов происходит при изменении счетчика ссылок с 2 до 1»), мы должны понимать принципы работы этого счетчика, чтобы им пользоваться.</p>
     </section>
    </section>
    <section>
     <title>
      <p>15.8. Передача дескрипторов</p>
     </title>
     <p>Когда мы говорим о передаче открытого дескриптора от одного процесса другому, обычно подразумевается одно из двух:</p>
     <p>&#9632; наследование всех открытых дескрипторов родительского процесса дочерним после вызова fork;</p>
     <p>&#9632; сохранение открытых дескрипторов при вызове exec.</p>
     <p>В первом случае процесс открывает дескриптор, вызывает fork, а затем родительский процесс закрывает дескрипторы, предоставляя дочернему возможность работать с ними. При этом открытый дескриптор передается от родительского процесса дочернему.</p>
     <p>В современных версиях Unix возможности передачи дескрипторов существенно расширены, и теперь имеется возможность передавать открытый дескриптор от одного процесса другому вне зависимости от их родства. Двери являются одним из существующих интерфейсов для передачи дескрипторов от клиента серверу и от сервера клиенту.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Передача дескрипторов через доменные сокеты Unix была описана в разделе 14.7 [24]. В ядрах Berkeley и производных от них дескрипторы передаются именно через такие сокеты. Все подробности описаны в главе 18 [23]. В ядрах SVR4 используются другие методы передачи дескрипторов, а именно команды I_SENDFD и I_RECVFD функции ioctl. Они описаны в разделе 15.5.1 [21]. Но процесс в SVR4 может воспользоваться и механизмом доменных сокетов Unix.</p>
     </cite>
     <p>Нужно правильно понимать, что именно подразумевается под передачей дескриптора. На рис. 4.7 сервер открывал файл и копировал его целиком через нижний (на рисунке) канал. Если размер файла 1 Мбайт, через канал будет передан 1 Мбайт данных. Но если сервер передает клиенту дескриптор вместо самого файла, то через канал передается только дескриптор (который содержит небольшое количество информации ядра). Клиент может использовать этот дескриптор для считывания содержимого файла. Чтение файла при этом осуществляется именно клиентом, а сервер осуществляет только открытие файла.</p>
     <p>Нужно понимать, что сервер не может просто записать в канал числовое значение дескриптора, как в следующем фрагменте кода:</p>
     <p><code>int fd;</code></p>
     <p><code>fd = Open(…);</code></p>
     <p><code>Write(pipefd, &amp;fd, sizeof(int));</code></p>
     <p>Этот подход не работает. Дескрипторы вычисляются для каждого процесса в отдельности. Предположим, что значение дескриптора файла на сервере равно 4. Даже если дескриптор с тем же значением и открыт клиентом, он почти наверняка относится к другому файлу. Единственная ситуация, в которой дескрипторы одного процесса имеют значение для другого процесса, возникает при вызове fork.</p>
     <p>Если первый свободный дескриптор сервера имеет значение 4, вызов open вернет именно это значение. Если сервер передает дескриптор 4 клиенту, а у клиента наименьшее свободное значение дескриптора равно 7, нужно, чтобы дескриптор 7 клиента был установлен в соответствие с тем же файлом, что и дескриптор 4 сервера. Рисунки 15.4 в [21] и 18.4 в [23] иллюстрируют, что должно произойти с точки зрения ядра: два дескриптора (4 у сервера и 7 у клиента) должны указывать на один и тот же файл из таблицы ядра. Интерфейсы типа дверей и доменных сокетов Unix скрывают внутренние детали реализации, предоставляя процессам возможность легко передавать дескрипторы друг другу.</p>
     <p>Дескрипторы передаются через дверь от клиента серверу путем присваивания полю desc_ptr структуры door_arg_t значения указателя на массив структур типа door_desc_t и помещения в поле desc_num количества этих структур. Дескрипторы передаются от сервера клиенту путем присваивания третьему аргументу door_return значения указателя на массив структур door_desc_t и помещения в четвертый аргумент количества передаваемых дескрипторов:</p>
     <image l:href="#Any2FbImgLoader228"/>
     <p>Рис. 15.4. Сервер файлов, передающий клиенту дескриптор</p>
     <empty-line/>
     <p><code>typedef struct door_desc {</code></p>
     <p><code> door_attr_t d_attributes; /* тег объединения */</code></p>
     <p><code> union {</code></p>
     <p><code>  struct { /* верна, если tag = DOOR_DESCRIPTOR */</code></p>
     <p><code>   int d_descriptor; /* номер дескриптора */</code></p>
     <p><code>   door_id_t d_id; /* уникальный идентификатор */</code></p>
     <p><code>  } d_desc;</code></p>
     <p><code> } d_data;</code></p>
     <p><code>} door_desc_t;</code></p>
     <p>Эта структура содержит объединение (union), и первое поле структуры является тегом, идентифицирующим содержимое этого объединения. В настоящий момент определено только одно поле объединения (структура d_desc, описывающая дескриптор), и тег (d_attributes) должен иметь значение DOOR_DESCRIPTOR.</p>
    </section>
    <section>
     <title>
      <p>Пример</p>
     </title>
     <p>Изменим наш пример с сервером файлов таким образом, чтобы сервер открывал файл, передавал дескриптор клиенту, а клиент копировал содержимое файла в стандартный поток вывода. На рис. 15.4 приведена схема приложения. В листинге 15.15 приведен текст программы клиента.</p>
     <subtitle>Листинг 15.15. Клиент для сервера, передающего дескриптор</subtitle>
     <p><code>//doors/clientfd1.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  int</code></p>
     <p><code>3  main(int argc, char **argv)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   int door, fd;</code></p>
     <p><code>6   char argbuf[BUFFSIZE], resbuf[BUFFSIZE], buff[BUFFSIZE];</code></p>
     <p><code>7   size_t len, n;</code></p>
     <p><code>8   door_arg_t arg;</code></p>
     <p><code>9   if (argc != 2)</code></p>
     <p><code>10   err_quit("usage: clientfd1 &lt;server-pathname&gt;");</code></p>
     <p><code>11  door = Open(argv[1], O_RDWR); /* открываем дверь */</code></p>
     <p><code>12  Fgets(argbuf, BUFFSIZE, stdin); /* считываем полное имя открываемого файла */</code></p>
     <p><code>13  len = strlen(argbuf);</code></p>
     <p><code>14  if (argbuf[len-1] == '\n')</code></p>
     <p><code>15   len--;</code></p>
     <p><code>16  /* подготавливаем аргумент и указатель на результат */</code></p>
     <p><code>17  arg.data_ptr = argbuf; /* аргумент-данные */</code></p>
     <p><code>18  arg.data_size = len + 1; /* размер данных */</code></p>
     <p><code>19  arg.desc_ptr = NULL;</code></p>
     <p><code>20  arg.desc_num = 0;</code></p>
     <p><code>21  arg.rbuf = resbuf; /* результаты-данные */</code></p>
     <p><code>22  arg.rsize = BUFFSIZE; /* размер возвращаемых данных */</code></p>
     <p><code>23  Door_call(door, &amp;arg); /* вызов процедуры сервера */</code></p>
     <p><code>24  if (arg.data_size != 0)</code></p>
     <p><code>25   err_quit("%.*s", arg.data_size, arg.data_ptr);</code></p>
     <p><code>26  else if (arg.desc_ptr == NULL)</code></p>
     <p><code>27   err_quit("desc_ptr is NULL");</code></p>
     <p><code>28  else if (arg.desc_num != 1)</code></p>
     <p><code>29   err_quit("desc_num = %d", arg.desc_num);</code></p>
     <p><code>30  else if (arg.desc_ptr-&gt;d_attributes != DOOR_DESCRIPTOR)</code></p>
     <p><code>31   err_quit("d_attributes = %d", arg.desc_ptr-&gt;d_attributes);</code></p>
     <p><code>32  fd = arg.desc_ptr-&gt;d_data.d_desc.d_descriptor;</code></p>
     <p><code>33  while((n = Read(fd, buff, BUFFSIZE)) &gt; 0)</code></p>
     <p><code>34   Write(STDOUT_FILENO, buff, n);</code></p>
     <p><code>35  exit(0);</code></p>
     <p><code>36 }</code></p>
     <subtitle>Открываем дверь, считываем полное имя файла</subtitle>
     <p>9-15 Имя файла, связанного с дверью, принимается в качестве аргумента командной строки. Имя файла, который должен быть открыт и выведен, считывается из стандартного потока ввода, а завершающий символ перевода строки удаляется.</p>
     <subtitle>Подготовка аргументов и указателя на буфер возврата</subtitle>
     <p>16-22 Подготавливается структура door_arg_t. К размеру имени файла мы добавляем единицу, чтобы сервер мог дополнить его завершающим нулем.</p>
     <subtitle>Вызов процедуры сервера и проверка результатов</subtitle>
     <p>23-31 Мы вызываем процедуру сервера и проверяем результат. Должен возвращаться только один дескриптор и никаких данных. Вскоре мы увидим, что сервер возвращает данные (сообщение об ошибке) только в том случае, если он не может открыть файл. В этом случае функция err_quit выводит сообщение об ошибке.</p>
     <subtitle>Считывание дескриптора и копирование файла</subtitle>
     <p>32-34 Дескриптор извлекается из структуры door_desc_t, и файл копируется в стандартный поток вывода.</p>
     <p>В листинге 15.16 приведен текст процедуры сервера. Функция main по сравнению с листингом 15.3 не изменилась.</p>
     <subtitle>Листинг 15.16. Процедура сервера, открывающая файл и возвращающая клиенту дескриптор</subtitle>
     <p><code>//doors/serverfd1.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  void</code></p>
     <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
     <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   int fd;</code></p>
     <p><code>7   char resbuf[BUFFSIZE];</code></p>
     <p><code>8   door_desc_t desc;</code></p>
     <p><code>9   dataptr[datasize-1] = 0; /* завершающий О */</code></p>
     <p><code>10  if ((fd = open(dataptr, O_RDONLY)) == –1) {</code></p>
     <p><code>11   /* ошибка, нужно сообщить клиенту */</code></p>
     <p><code>12   snprintf(resbuf, BUFFSIZE, "%s: can't open, %s",</code></p>
     <p><code>13   dataptr, strerror(errno));</code></p>
     <p><code>14   Door_return(resbuf, strlen(resbuf), NULL, 0);</code></p>
     <p><code>15  } else {</code></p>
     <p><code>16   /* ОК, возвращаем дескриптор */</code></p>
     <p><code>17   desc.d_data.d_desc.d_descriptor = fd;</code></p>
     <p><code>18   desc.d_attributes = DOOR_DESCRIPTOR;</code></p>
     <p><code>19   Door_return(NULL, 0, &amp;desc, 1);</code></p>
     <p><code>20  }</code></p>
     <p><code>21 }</code></p>
     <subtitle>Открытие файла для клиента</subtitle>
     <p>9-14 Мы завершаем полное имя файла клиента нулем и делаем попытку открыть этот файл вызовом open. Если возникает ошибка, сообщение о ней возвращается клиенту.</p>
     <subtitle>Успешное открытие файла</subtitle>
     <p>15-20 Если файл был успешно открыт, клиенту возвращается только его дескриптор.</p>
     <p>Запустим сервер и укажем ему имя двери /tmp/fd1, а затем запустим клиент:</p>
     <p><code>solaris % <strong>clientfd1 /tmp/fd1</strong></code></p>
     <p><code>/etc/shadow</code></p>
     <p><code>/etc/shadow: can't open. Permission denied</code></p>
     <p><code>solaris % <strong>clientfd1 /tmp/fd1</strong></code></p>
     <p><code>/no/such/file</code></p>
     <p><code>/no/such/file: can't open. No such file or directory</code></p>
     <p><code>solaris % <strong>clientfd1 /tmp/fd1</strong></code></p>
     <p><code>/etc/ntp.conf <emphasis>файл из двух строк</emphasis></code></p>
     <p><code>multicastclient 224.0.1.1</code></p>
     <p><code>driftfile /etc/ntp.drift</code></p>
     <p>В первых двух случаях мы указываем имя файла, приводящее к возврату сообщения об ошибке. В третий раз сервер передает клиенту дескриптор файла из двух строк, который благополучно выводится.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Существует проблема, связанная с передачей дескриптора через дверь. Чтобы она проявилась в нашем примере, достаточно добавить вызов printf к процедуре сервера сразу после успешного вызова open. Вы увидите, что значение дескриптора каждый раз увеличивается на единицу. Проблема в том, что сервер не закрывает дескрипторы после передачи их клиенту. Сделать это, вообще говоря, нелегко. Логично было бы выполнять закрытие дескриптора после возврата из door_return, после успешной отправки дескриптора клиенту, но возврата из door_return не происходит! Если бы мы использовали sendmsg для передачи дескриптора через доменный сокет Unix или ioctl для передачи дескриптора через канал в SVR4, мы могли бы закрыть его после возврата из sendmsg или ioctl. Однако с дверьми все по-другому, поскольку возврата из функции door_return не происходит. Единственный способ обойти проблему заключается в том, что процедура сервера должна запоминать все открытые дескрипторы и закрывать их некоторое время спустя, что несколько запутывает код.</p>
      <p>Эта проблема должна быть исправлена в Solaris 2.7 добавлением атрибута DOOR RELEASE. Отправитель устанавливает поле d_attributes равным DOOR DESCRIPTOR | DOOR_RELEASE, что говорит системе о необходимости закрывать дескриптор после передачи его клиенту.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>15.9. Функция door server_create</p>
     </title>
     <p>В листинге 15.6 мы показали, что библиотека дверей автоматически создает новые потоки для обслуживания запросов клиентов по мере их поступления. Они создаются библиотекой как неприсоединенные потоки (detached threads) с размером стека потока по умолчанию, с отключенной возможностью отмены потока (thread cancellation) и с маской сигналов и классом планирования (scheduling class), унаследованными от потока, вызвавшего door_create. Если мы хотим изменить какой-либо из этих параметров или хотим самостоятельно работать с пулом потоков сервера, можно воспользоваться функцией door_server_create и указать нашу собственную <emphasis>процедуру создания сервера:</emphasis></p>
     <p><code>#include &lt;door.h&gt;</code></p>
     <p><code>typedef void Door_create_proc(door_info_t *);</code></p>
     <p><code>Door_create_proc *door_server_create(Door_create_proc <emphasis>*proc</emphasis>);</code></p>
     <p><code>/* Возвращает указатель на предыдущую процедуру создания сервера */</code> </p>
     <p>Как и при объявлении door_create в разделе 15.3, мы используем оператор typedef для упрощения прототипа библиотечной функции. Наш новый тип данных определяет процедуру создания сервера как принимающую один аргумент (указатель на структуру типа door_info_t) и ничего не возвращающую (void). При вызове door_server_create аргументом является указатель на нашу процедуру создания сервера, а возвращается указатель на предыдущую процедуру создания сервера. </p>
     <p>Наша процедура создания сервера вызывается при возникновении необходимости создания нового потока для обслуживания запроса клиента. Информация о том, какой из процедур сервера требуется новый поток, передается в структуре door_info_t, адрес которой принимается процедурой создания сервера. Поле di_proc содержит адрес процедуры сервера, а поле di_data содержит указатель на аргументы, передаваемые процедуре сервера при вызове.</p>
     <p>Проще всего изучить происходящее на примере. Программа-клиент не претерпевает никаких изменений по сравнению с листингом 15.1. В программу-сервер добавляются две новые функции помимо процедуры сервера и функции main. На рис. 15.5 приведена схема сервера с четырьмя функциями и последовательностью их регистрации и вызова.</p>
     <empty-line/>
     <image l:href="#Any2FbImgLoader230"/>
     <p>Рис. 15.5. Четыре функции в процессе-сервере</p>
     <empty-line/>
     <p>В листинге 15.17 приведен текст функции main сервера.</p>
     <subtitle>Листинг 15.17. Функция main для примера с управлением пулом потоков</subtitle>
     <p><code>//doors/server6.c</code></p>
     <p><code>42 int</code></p>
     <p><code>43 main(int argc, char **argv)</code></p>
     <p><code>44 {</code></p>
     <p><code>45  if (argc != 2)</code></p>
     <p><code>46  err_quit("usage: server6 &lt;server-pathname&gt;");</code></p>
     <p><code>47  Door_server_create(my_create);</code></p>
     <p><code>48  /* создание дескриптора двери и связывание его с именем */</code></p>
     <p><code>49  Pthread_mutex_lock(&amp;fdlock);</code></p>
     <p><code>50  fd = Door_create(servproc, NULL, DOOR_PRIVATE);</code></p>
     <p><code>51  Pthread_mutex_unlock(&amp;fdlock);</code></p>
     <p><code>52  unlink(argv[1]);</code></p>
     <p><code>53  Close(Open(argv[1], O_CREAT | O_RDWR, FILE_MODE));</code></p>
     <p><code>54  Fattach(fd, argv[1]);</code></p>
     <p><code>55  /* servproc() обслуживает запросы клиентов */</code></p>
     <p><code>56  for(;;)</code></p>
     <p><code>57   pause();</code></p>
     <p><code>58 }</code></p>
     <p>По сравнению с листингом 15.2 было внесено четыре изменения:</p>
     <p>1. Убрано объявление дескриптора двери fd (теперь это глобальная переменная, описанная в листинге 15.18).</p>
     <p>2. Вызов door_create защищен взаимным исключением (также описанным в листинге 15.18).</p>
     <p>3. Вызов door_server_create делается перед созданием двери, при этом указывается процедура создания сервера (my_thread, которая, будет показана позже).</p>
     <p>4. В вызове door_create последний аргумент (атрибуты) имеет значение DOOR_PRIVATE вместо 0. Это говорит библиотеке о том, что данная дверь будет иметь собственный пул потоков, называемый частным пулом сервера.</p>
     <p>Задание процедуры создания сервера с помощью door_server_create и выделение частного пула сервера с помощью DOOR_PRIVATE осуществляются независимо друг от друга. Возможны четыре ситуации:</p>
     <p>1. По умолчанию частный пул сервера и процедура создания сервера отсутствуют. Система создает потоки по мере необходимости и они переходят в пул потоков процесса.</p>
     <p>2. Указан флаг DOOR_PRIVATE, но процедура создания сервера отсутствует. Система создает потоки по мере необходимости и они отходят в пул потоков процесса, если относятся к тем дверям, для которых флаг DOOR_PRIVATE не был указан, либо в пул данной двери, если она была создана с флагом DOOR_PRIVATE.</p>
     <p>3. Отсутствует частный пул сервера, но указана процедура создания сервера. Процедура создания вызывается при необходимости создания нового потока, который затем переходит в пул потоков процесса.</p>
     <p>4. Указан флаг DOOR_PRIVATE и процедура создания сервера. Процедура создания сервера вызывается каждый раз при необходимости создания потока. После создания поток должен вызвать door_bind для отнесения его к нужному частному пулу сервера, иначе он будет добавлен к пулу потоков процесса.</p>
     <p>В листинге 15.18 приведен текст двух новых функций: my_create (процедура создания сервера) и my_thread (функция, выполняемая каждым потоком, который создается my_create).</p>
     <subtitle>Листинг 15.18. Функции управления потоками</subtitle>
     <p><code>//doors/server6.c</code></p>
     <p><code>13 pthread_mutex_t fdlock = PTHREAD_MUTEX_INITIALIZER;</code></p>
     <p><code>14 static int fd = –1; /* дескриптор двери */</code></p>
     <empty-line/>
     <p><code>15 void *</code></p>
     <p><code>16 my_thread(void *arg)</code></p>
     <p><code>17 {</code></p>
     <p><code>18  int oldstate;</code></p>
     <p><code>19  door_info_t *iptr = arg;</code></p>
     <p><code>20  if ((Door_server_proc*)iptr-&gt;di_proc == servproc) {</code></p>
     <p><code>21   Pthread_mutex_lock(&amp;fdlock);</code></p>
     <p><code>22   Pthread_mutex_unlock(&amp;fdlock);</code></p>
     <p><code>23   Pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &amp;oldstate);</code></p>
     <p><code>24   Door_bind(fd);</code></p>
     <p><code>25   Door_return(NULL, 0, NULL, 0);</code></p>
     <p><code>26  } else</code></p>
     <p><code>27   err_quit("my_thread: unknown function: %p", arg);</code></p>
     <p><code>28  return(NULL); /* никогда не выполняется */</code></p>
     <p><code>29 }</code></p>
     <empty-line/>
     <p><code>30 void</code></p>
     <p><code>31 my_create(door info_t *iptr)</code></p>
     <p><code>32 {</code></p>
     <p><code>33  pthread_t tid;</code></p>
     <p><code>34  pthread_attr_t attr;</code></p>
     <p><code>35  Pthread_attr_init(&amp;attr);</code></p>
     <p><code>36  Pthread_attr_setscope(&amp;attr, PTHREAD_SCOPE_SYSTEM);</code></p>
     <p><code>37  Pthread_attr_setdetachstate(&amp;attr, PTHREAD_CREATE_DETACHED);</code></p>
     <p><code>38  Pthread_create(&amp;tid, &amp;attr, my_thread, (void *)iptr);</code></p>
     <p><code>39  Pthread_attr_destroy(&amp;attr);</code></p>
     <p><code>40  printf("my_thread: created server thread %ld\n", pr_thread_id(&amp;tid)):</code></p>
     <p><code>41 }</code></p>
     <subtitle>Процедура создания сервера</subtitle>
     <p>30-41 Каждый раз при вызове my_create создается новый поток. Перед вызовом pthread_create атрибуты потока инициализируются, область потока устанавливается равной PTHREAD_SCOPE_SYSTEM и поток определяется как неприсоединенный (detached). Созданный поток вызывает функцию my_thread. Аргументом этой функции является указатель на структуру типа door_info_t. Если у нас имеется сервер с несколькими дверьми и мы указываем процедуру создания сервера, эта процедура создания сервера будет вызываться при необходимости создания потока для любой из дверей. Единственный способ, которым эта процедура может определить тип сервера, соответствующий нужной двери, заключается в изучении указателя di_proc в структуре типа door_info_t.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Установка области выполнения PTHREAD_SCOPE_SYSTEM означает, что поток будет конкурировать в распределении ресурсов процессора с другими потоками системы. Альтернативой является указание PTHREAD_SCOPE_PROCESS; при этом поток будет конкурировать только с другими потоками данного процесса. Последнее не будет работать с дверьми, поскольку библиотека дверей требует, чтобы тот процесс ядра, который привел к вызову данного потока, выполнял и door_return. Поток с PTHREAD_SCOPE_PROCESS может сменить поток ядра во время выполнения процедуры сервера.</p>
      <p>Причина, по которой поток должен создаваться как неприсоединенный, заключается в том, что нужно предотвратить сохранение в системе информации о потоке после его завершения, потому что отсутствует поток, вызывающий pthread_join.</p>
     </cite>
     <subtitle>Функция, запускающая поток</subtitle>
     <p>15-20 При создании потока запускается функция my_thread, указанная в вызове pthread_create. Аргументом является указатель на структуру типа door_info_t, передаваемый my_create. В данном примере есть только одна процедура сервера — servproc, и мы просто проверяем, что аргумент указывает на эту процедуру.</p>
     <subtitle>Ожидание присваивания дескриптору правильного значения</subtitle>
     <p>21-22 Процедура создания сервера вызывается в первый раз при вызове door_create для создания первого потока сервера. Этот вызов осуществляется из библиотеки дверей до завершения работы door_create. Однако переменная fd не примет значения дескриптора двери до тех пор, пока не произойдет возврата из функции door_create (проблема курицы и яйца). Поскольку мы знаем, что my_thread выполняется отдельно от основного потока, решение состоит в том, чтобы использовать взаимное исключение fdlock следующим образом: основной поток блокирует взаимное исключение перед вызовом door_create и разблокирует после возврата из door_create (когда дескриптору fd уже присвоено некоторое значение). Функция my_thread делает попытку заблокировать взаимное исключение (ее выполнение приостанавливается до тех пор, пока основной поток не разблокирует это взаимное исключение), а затем разблокирует его. Мы могли бы добавить условную переменную и передавать по ней уведомление, но здесь это не нужно, поскольку мы заранее знаем, в каком порядке будут происходить вызовы.</p>
     <subtitle>Отключение отмены потока</subtitle>
     <p>23 При создании нового потока вызовом pthread_create его отмена по умолчанию разрешена. Если отмена потока разрешена и клиент прерывает вызов door_call в процессе его выполнения (что мы продемонстрируем в листинге 15.26), вызываются обработчики отмены потока, после чего он завершается. Если отмена потока отключена (как это делаем мы) и клиент прерывает работу в вызове door_call, процедура сервера спокойно завершает работу (поток не завершается), а результаты door_return просто сбрасываются. Поскольку серверный поток завершается, если происходит отмена потока, и поскольку процедура сервера может в этот момент выполнять какие-то действия (возможно, с заблокированными семафорами или блокировками), библиотека дверей на всякий случай отключает отмену всех создаваемых ею потоков. Если нам нужно, чтобы процедура сервера отменялась при досрочном завершении работы клиента, для этого потока следует включить возможность отмены и приготовиться обработать такую ситуацию.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Обратите внимание, что область выполнения PTHREAD_SCOPE_SYSTEM и неприсоединенность потока указываются как атрибуты при создании потока. А отмена потока может быть отключена только в процессе выполнения потока. Таким образом, хотя мы и отключаем отмену потока, он сам может ее включить и выключить тогда, когда потребуется.</p>
     </cite>
     <subtitle>Связывание потока с дверью</subtitle>
     <p>24 Вызов door_bind позволяет добавить поток к пулу, связанному с дверью, дескриптор которой передается door_bind в качестве аргумента. Поскольку для этого нам нужно знать дескриптор двери, в этой версии сервера он является глобальной переменной.</p>
     <subtitle>Делаем поток доступным клиенту</subtitle>
     <p>25 Мы делаем поток доступным клиенту вызовом door_return с двумя нулевыми указателями и нулевыми значениями длин буферов в качестве аргументов.</p>
     <p>Процедура сервера приведена в листинге 15.19. Она идентична программе из листинга 15.6.</p>
     <subtitle>Листинг 15.19. Процедура сервера</subtitle>
     <p><code>//doors/server6.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  void</code></p>
     <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
     <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   long arg, result;</code></p>
     <p><code>7   arg = *((long *) dataptr);</code></p>
     <p><code>8   printf("thread id %ld, arg = %ld\n", pr_thread_id(NULL), arg);</code></p>
     <p><code>9   sleep(5);</code></p>
     <p><code>10  result = arg * arg;</code></p>
     <p><code>11  Door_return((char *)&amp;result, sizeof(result), NULL, 0);</code></p>
     <p><code>12 }</code></p>
     <p>Чтобы продемонстрировать работу программы, запустим сервер:</p>
     <p><code>solaris % <strong>server6 /tmp/door6</strong></code></p>
     <p><code>my_thread: created server thread 4</code></p>
     <p>После запуска сервера и вызова door_create процедура создания сервера запускается в первый раз, хотя клиент мы еще не запустили. При этом создается первый поток, ожидающий запроса от первого клиента. Затем мы запускаем клиент три раза подряд:</p>
     <p><code>solaris % <strong>client6 /tmp/door6 11</strong></code></p>
     <p><code>result: 121</code></p>
     <p><code>solaris % <strong>client6 /tmp/door6 22</strong></code></p>
     <p><code>result: 484</code></p>
     <p><code>solaris % <strong>client6 /tmp/door6 33</strong></code></p>
     <p><code>result: 1089</code></p>
     <p>Посмотрим, что при этом выводит сервер. При поступлении первого запроса клиента создается новый поток (с идентификатором потока 5), а поток с номером 4 обслуживает все запросы клиентов. Библиотека дверей всегда держит один лишний поток наготове:</p>
     <p><code>my_thread: created server thread 5</code></p>
     <p><code>thread id 4, arg = 11</code></p>
     <p><code>thread id 4, arg = 22</code></p>
     <p><code>thread id 4, arg = 33</code></p>
     <p>Запустим теперь три экземпляра клиента одновременно в фоновом режиме:</p>
     <p><code>solaris % <strong>client6 /tmp/door6 44 &amp;client6 /tmp/door6 55 &amp;client6 /tmp/door6 66 &amp;</strong></code></p>
     <p><code>[2] 4919</code></p>
     <p><code>[3] 4920</code></p>
     <p><code>[4] 4921</code></p>
     <p><code>solaris % result: 1936</code></p>
     <p><code>result: 4356</code></p>
     <p><code>result: 3025</code></p>
     <p>Посмотрев на вывод сервера, мы увидим, что было создано два новых потока (с идентификаторами 6 и 7) и потоки 4, 5 и 6 обслужили три запроса от клиентов:</p>
     <p><code>thread id 4, arg = 44</code></p>
     <p><code>my_thread: created server thread 6</code></p>
     <p><code>thread id 5, arg = 66</code></p>
     <p><code>my_thread: created server thread 7</code></p>
     <p><code>thread id 6, arg = 55</code></p>
    </section>
    <section>
     <title>
      <p>15.10. Функции door_bind, door unbind и door_revoke</p>
     </title>
     <p>Рассмотрим еще три функции, дополняющие интерфейс дверей:</p>
     <p><code>#include &lt;door.h&gt;</code></p>
     <p><code>int door_bind(int <emphasis>fd</emphasis>);</code></p>
     <p><code>int door_unbind(void);</code></p>
     <p><code>int door_revoke(int <emphasis>fd</emphasis>);</code></p>
     <p><code>/* Всe три возвращают 0 в случае успешного завершения, –1 – в случае ошибки */</code></p>
     <p>Функция door_bind впервые появилась в листинге 15.18. Она связывает вызвавший ее поток с частным пулом сервера, относящимся к двери с дескриптором fd. Если вызвавший поток уже подключен к какой-либо другой двери, производится его неявное отключение.</p>
     <p>Функция door_unbind осуществляет явное отключение потока от текущего пула, к которому он подключен.</p>
     <p>Функция door_revoke отключает доступ к двери с дескриптором fd. Дескриптор двери может быть отменен только процессом, создавшим эту дверь. Все вызовы через эту дверь, находящиеся в процессе выполнения в момент вызова этой функции, будут благополучно завершены.</p>
    </section>
    <section>
     <title>
      <p>15.11. Досрочное завершение клиента или сервера</p>
     </title>
     <section>
      <p>В наших примерах до настоящего момента предполагалось, что в процессе работы клиента и сервера не возникает непредусмотренных ситуаций. Посмотрим, что произойдет, если у клиента или сервера возникнут ошибки. В случае если клиент и сервер являются частями одного процесса (локальный вызов процедуры на рис. 15.1), клиенту не нужно беспокоиться о возникновении ошибок на сервере, и наоборот. Однако если клиент и сервер находятся в различных процессах, нужно учесть возможность досрочного завершения одного из них и предусмотреть способ уведомления второго об этом событии. Об этом нужно заботиться вне зависимости от того, находятся ли клиент и сервер на одном узле или нет.</p>
     </section>
     <section>
      <title>
       <p>Досрочное завершение сервера</p>
      </title>
      <p>Если клиент блокируется в вызове door_call, ожидая получения результатов, ему нужно каким-то образом получить уведомление о завершении потока сервера по какой-либо причине. Посмотрим, что происходит в этом случае, прервав работу сервера вызовом pthread_exit. Это приведет к завершению потока сервера (а не всего процесса). В листинге 15.20 приведен текст процедуры сервера.</p>
      <subtitle>Листинг 15.20. Процедура сервера, завершающая работу сразу после запуска</subtitle>
      <p><code>//doors/serverintr1.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   long arg, result;</code></p>
      <p><code>7   pthread_exit(NULL); /* посмотрим, что произойдет с клиентом */</code></p>
      <p><code>8   arg = *((long*)dataptr);</code></p>
      <p><code>9   result = arg * arg;</code></p>
      <p><code>10  Door_return((char*)&amp;result, sizeof(result), NULL, 0);</code></p>
      <p><code>11 }</code></p>
      <p>Оставшаяся часть сервера не претерпевает изменений по сравнению с листингом 15.2, а программу-клиент мы берем из листинга 15.1.</p>
      <p>Запустив клиент, мы увидим, что вызов door_call возвращает ошибку EINTR, если процедура сервера завершается досрочно:</p>
      <p><code>solaris % <strong>clientintr1 /tmp/door1 11</strong></code></p>
      <p><code>door_call error: Interrupted system call</code></p>
     </section>
     <section>
      <title>
       <p>Непрерываемость системного вызова door_call</p>
      </title>
      <p>Документация на door_call предупреждает, что эта функция не предполагает возможности перезапуска (библиотечная функция door_call делает системный вызов с тем же именем). Мы можем убедиться в этом, изменив процедуру сервера таким образом, чтобы она делала паузу в 6 секунд перед возвращением, что показано в листинге 15.21.</p>
      <subtitle>Листинг 15.21. Процедура сервера делает паузу в 6 секунд</subtitle>
      <p><code>//doors/serverintr2.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>4  door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   long arg, result;</code></p>
      <p><code>7   sleep(6); /* клиент получает сигнал SIGCHLD */</code></p>
      <p><code>8   arg = *((long*)dataptr);</code></p>
      <p><code>9   result = arg * arg;</code></p>
      <p><code>10  Door_return((char*)&amp;result, sizeof(result), NULL, 0);</code></p>
      <p><code>11 }</code></p>
      <p>Изменим теперь клиент из листинга 15.2: установим обработчик сигнала SIGCHLD, добавив порождение процесса и завершение порожденного процесса через 2 секунды. Таким образом, через 2 секунды после вызова door_call дочерний процесс завершит работу, а родительский перехватит сигнал SIGCHLD и произойдет возврат из обработчика сигнала, прерывающий системный вызов door_call. Текст программы-клиента показан в листинге 15.22.</p>
      <subtitle>Листинг 15.22. Клиент, перехватывающий сигнал SIGCHLD</subtitle>
      <p><code>//doors/clientintr2.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  sig_chld(int signo)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   return; /* просто прерываем door_call() */</code></p>
      <p><code>6  }</code></p>
      <empty-line/>
      <p><code>7  int</code></p>
      <p><code>8  main(int argc, char **argv)</code></p>
      <p><code>9  {</code></p>
      <p><code>10  int fd;</code></p>
      <p><code>11  long ival, oval;</code></p>
      <p><code>12  door_arg_t arg;</code></p>
      <p><code>13  if (argc != 3)</code></p>
      <p><code>14   err_quit("usage: clientintr2 &lt;server-pathname&gt; &lt;integer-value&gt;");</code></p>
      <p><code>15  fd = Open(argv[1], O_RDWR); /* открываем дверь */</code></p>
      <p><code>16  /* подготовка аргументов и указателя на результат */</code></p>
      <p><code>17  ival = atol(argv[2]);</code></p>
      <p><code>18  arg.data_ptr = (char*)&amp;ival; /* аргументы */</code></p>
      <p><code>19  arg.data_size = sizeof(long); /* размер аргументов */</code></p>
      <p><code>20  arg.desc_ptr = NULL;</code></p>
      <p><code>21  arg.desc_num = 0;</code></p>
      <p><code>22  arg.rbuf = (char*)&amp;oval; /* данные */</code></p>
      <p><code>23  arg.rsize = sizeof(long); /* размер данных */</code></p>
      <p><code>24  Signal(SIGCHLD, sig_chld);</code></p>
      <p><code>25  if (Fork() == 0) {</code></p>
      <p><code>26   sleep(2); /* дочерний процесс */</code></p>
      <p><code>27   exit(0); /* отправка SIGCHLD */</code></p>
      <p><code>28  }</code></p>
      <p><code>29  /* вызов процедуры сервера и вывод результата */</code></p>
      <p><code>30  Door_call(fd, &amp;arg);</code></p>
      <p><code>31  printf(result: %ld\n", oval);</code></p>
      <p><code>32  exit(0);</code></p>
      <p><code>33 }</code></p>
      <p>Клиенту будет возвращена та же ошибка, что и при досрочном завершении сервера — EINTR:</p>
      <p><code>solaris % <strong>clientintr2 /tmp/door2 22</strong></code></p>
      <p><code>door_call error: interrupted system call</code></p>
      <p>Поэтому нужно блокировать все сигналы, которые могут прервать вызов door_call.</p>
     </section>
     <section>
      <title>
       <p>Идемпотентные и неидемпотентные процедуры</p>
      </title>
      <p>А что произойдет, если мы перехватим сигнал EINTR и вызовем процедуру сервера еще раз, поскольку мы знаем, что эта ошибка возникла из-за нашего собственного прерывания системного вызова перехваченным сигналом (SIGCHLD)? Это может привести к некоторым проблемам, как мы покажем ниже.</p>
      <p>Изменим сервер так, чтобы он выводил идентификатор вызванного потока, делал паузу в 6 секунд и выводил идентификатор потока по завершении его. В листинге 15.23 приведен текст новой процедуры сервера. </p>
      <subtitle>Листинг 15.23. Процедура сервера, выводящая свой идентификатор потока дважды</subtitle>
      <p><code>//doors/serverintr3.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  void</code></p>
      <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   long arg, result:</code></p>
      <p><code>7   printf("thread id %ld called\n", pr_thread_id(NULL));</code></p>
      <p><code>8   sleep(6); /* даем клиенту возможность перехватить SIGCHLD */</code></p>
      <p><code>9   arg = *((long*)dataptr);</code></p>
      <p><code>10  result = arg * arg;</code></p>
      <p><code>11  printf("thread id %ld returning\n", pr_thread_id(NULL));</code></p>
      <p><code>12  Door_return((char *) &amp;result, sizeof(result), NULL, 0);</code></p>
      <p><code>13 }</code></p>
      <p>В листинге 15.24 приведен текст программы-клиента.</p>
      <subtitle>Листинг 15.24. Клиент, вызывающий door_call еще раз, после перехвата EINTR</subtitle>
      <p><code>//doors/clientintr3.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  volatile sig_atomic_t caught_sigchld;</code></p>
      <empty-line/>
      <p><code>3  void</code></p>
      <p><code>4  sig_chld(int signo)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   caught_sigchld = 1;</code></p>
      <p><code>7   return; /* прерываем вызов door_call() */</code></p>
      <p><code>8  }</code></p>
      <empty-line/>
      <p><code>9  int</code></p>
      <p><code>10 main(int argc, char **argv)</code></p>
      <p><code>11 {</code></p>
      <p><code>12  int fd, rc;</code></p>
      <p><code>13  long ival, oval;</code></p>
      <p><code>14  door_arg_t arg;</code></p>
      <p><code>15  if (argc != 3)</code></p>
      <p><code>16   err_quit("usage: clientintr3 &lt;server-pathname&gt; &lt;integer-value&gt;");</code></p>
      <p><code>17  fd = Open(argv[1], O_RDWR); /* открытие двери */</code></p>
      <p><code>18  /* подготовка аргументов и указателя на результаты */</code></p>
      <p><code>19  ival = atol(argv[2]);</code></p>
      <p><code>20  arg.data_ptr = (char*)&amp;ival; /* аргументы */</code></p>
      <p><code>21  arg.data_size = sizeof(long); /* размер аргументов */</code></p>
      <p><code>22  arg.desc_ptr = NULL;</code></p>
      <p><code>23  arg.desc_num = 0;</code></p>
      <p><code>24  arg.rbuf = (char*)&amp;oval; /* возвращаемые данные */</code></p>
      <p><code>25  arg.rsize = sizeof(long); /* размер данных */</code></p>
      <p><code>26  Signal(SIGCHLD, sig_chld);</code></p>
      <p><code>27  if (Fork() == 0) {</code></p>
      <p><code>28   sleep(2); /* дочерний процесс */</code></p>
      <p><code>29   exit(0); /* отправка SIGCHLD */</code></p>
      <p><code>30  }</code></p>
      <p><code>31  /* родительский процесс : вызов процедуры сервера и вывод результата */</code></p>
      <p><code>32  for (;;) {</code></p>
      <p><code>33   printf("calling door_call\n");</code></p>
      <p><code>34   if ((rc = door_call(fd, &amp;arg)) == 0)</code></p>
      <p><code>35    break; /* успешное завершение */</code></p>
      <p><code>36   if (errno == EINTR &amp;&amp; caught_sigchld) {</code></p>
      <p><code>37    caught_sigchld = 0;</code></p>
      <p><code>38    continue; /* повторный вызов door_call */</code></p>
      <p><code>39   }</code></p>
      <p><code>40   err_sys("door_call error");</code></p>
      <p><code>41  }</code></p>
      <p><code>42  printf("result: %ld\n", oval);</code></p>
      <p><code>43  exit(0);</code></p>
      <p><code>44 }</code></p>
      <p>2-8 Объявляем глобальную переменную caught_sigchld, устанавливая ее в единицу при перехвате сигнала SIGCHLD.</p>
      <p>31-42 Вызываем door_call в цикле, пока он не завершится успешно.</p>
      <p>Глядя на выводимые клиентом результаты, мы можем подумать, что все в порядке:</p>
      <p><code>solaris % <strong>clientintr3 /tmp/door3 33</strong></code></p>
      <p><code>calling door_call</code></p>
      <p><code>calling door_call</code></p>
      <p><code>result: 1089</code></p>
      <p>Функция door_call вызывается в первый раз, обработчик сигнала срабатывает через 2 секунды после этого и переменной caught_sigchld присваивается значение 1. door_call при этом возвращает ошибку EINTR и мы вызываем door_call еще раз. Во второй раз процедура завершается успешно.</p>
      <p>Посмотрев на выводимый сервером текст, мы увидим, что процедура сервера была вызвана дважды:</p>
      <p><code>solaris % <strong>serverintr3 /tmp/door3</strong></code></p>
      <p><code>thread id 4 called</code></p>
      <p><code>thread id 4 returning</code></p>
      <p><code>thread id 5 called</code></p>
      <p><code>thread id 5 returning</code></p>
      <p>Когда клиент второй раз вызывает door_call, это приводит к запуску нового потока, вызывающего процедуру сервера еще раз. Если процедура сервера идемпотентна, проблем в такой ситуации не возникнет. Однако если она неидемпотентна, это может привести к ошибкам.</p>
      <p>Термин «идемпотентность» по отношению к процедуре подразумевает, что процедура может быть вызвана произвольное число раз без возникновения ошибок. Наша процедура сервера, вычисляющая квадрат целого числа, идемпотентна: мы получаем правильный результат вне зависимости от того, сколько раз мы ее вызовем. Другим примером является процедура, возвращающая дату и время. Хотя эта процедура и будет возвращать разную информацию при новых вызовах (поскольку дата и время меняются), это не вызовет проблем. Классическим примером неидемпотентной процедуры является процедура уменьшения банковского счета на некоторую величину. Конечный результат будет неверным, если ее вызвать дважды.</p>
     </section>
     <section>
      <title>
       <p>Досрочное завершение клиента</p>
      </title>
      <p>Посмотрим, каким образом процедура сервера получает уведомление о досрочном завершении клиента. Пpoгрaммa-клиeнт приведена в листинге 15.25.</p>
      <subtitle>Листинг 15.25. Клиент, досрочно завершающий работу после вызова door_call</subtitle>
      <p><code>//doors/clientintr4.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <empty-line/>
      <p><code>2  int</code></p>
      <p><code>3  main(int argc, char **argv)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   int fd;</code></p>
      <p><code>6   long ival, oval;</code></p>
      <p><code>7   door_arg_t arg;</code></p>
      <p><code>8   if (argc != 3)</code></p>
      <p><code>9    err_quit("usage: clientintr4 &lt;server-pathname&gt; &lt;integer-value&gt;");</code></p>
      <p><code>10  fd = Open(argv[1], O_RDWR); /* открываем дверь */</code></p>
      <p><code>11  /* подготовка аргументов и указателя на результаты */</code></p>
      <p><code>12  ival = atol(argv[2]);</code></p>
      <p><code>13  arg.data_ptr = (char*)&amp;ival; /* аргументы */</code></p>
      <p><code>14  arg.data_size = sizeof(long); /* размер аргументов */</code></p>
      <p><code>15  arg.desc_ptr = NULL;</code></p>
      <p><code>16  arg.desc_num = 0;</code></p>
      <p><code>17  arg.rbuf = (char*)&amp;oval; /* возвращаемые данные */</code></p>
      <p><code>18  arg.rsize = sizeof(long); /* размер возвращаемых данных */</code></p>
      <p><code>19  /* вызов процедуры сервера и вывод результата */</code></p>
      <p><code>20  alarm(3);</code></p>
      <p><code>21  Door_call(fd, &amp;arg);</code></p>
      <p><code>22  printf("result: %ld\n", oval);</code></p>
      <p><code>23  exit(0);</code></p>
      <p><code>24 }</code></p>
      <p>20 Единственное изменение заключается в добавлении вызова alarm(3) перед door_call. Эта функция приводит к отправке сигнала SIGALRM через три секунды после вызова, но, поскольку мы его не перехватываем, это приводит к завершению процесса. Поэтому клиент завершится до возврата из door_call, потому что в процедуру сервера вставлена шестисекундная пауза.</p>
      <p>В листинге 15.26 приведен текст процедуры сервера и обработчик отмены потока.</p>
      <subtitle>Листинг 15.26. Процедура сервера, обрабатывающая досрочное завершение клиента</subtitle>
      <p><code>//doors/serverintr4.с </code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  void</code></p>
      <p><code>3  servproc_cleanup(void *arg)</code></p>
      <p><code>4  {</code></p>
      <p><code>5   printf("servproc cancelled, thread id %ld\n", pr_thread_id(NULL));</code></p>
      <p><code>6  }</code></p>
      <empty-line/>
      <p><code>7  void</code></p>
      <p><code>8  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
      <p><code>9   door_desc_t *descptr, size_t ndesc)</code></p>
      <p><code>10 {</code></p>
      <p><code>11  int oldstate, junk;</code></p>
      <p><code>12  long arg, result;</code></p>
      <p><code>13  Pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &amp;oldstate);</code></p>
      <p><code>14  pthread_cleanup_push(servproc_cleanup, NULL);</code></p>
      <p><code>15  sleep(6);</code></p>
      <p><code>16  arg = *((long*)dataptr);</code></p>
      <p><code>17  result = arg * arg;</code></p>
      <p><code>18  pthread_cleanup_pop(0);</code></p>
      <p><code>19  Pthread_setcancelstate(oldstate, &amp;junk);</code></p>
      <p><code>20  Door_return((char*)&amp;result, sizeof(result), NULL, 0);</code></p>
      <p><code>21 }</code></p>
      <p>Вспомните, что мы говорили об отмене выполнения потока в разделе 8.5 и в связи с листингом 15.18. Когда система обнаруживает завершение клиента в процессе выполнения серверной процедуры, потоку, обрабатывающему запрос этого клиента, отправляется запрос на отмену:</p>
      <p>&#9632; если поток отключил возможность отмены, ничего не происходит и поток выполняется до завершения (вызов door_return), а результаты сбрасываются;</p>
      <p>&#9632; если возможность отмены включена, вызываются обработчики отмены потока, а затем он завершает работу.</p>
      <p>В тексте процедуры сервера мы сначала вызвали pthread_setcancelstate для включения возможности отмены потока, потому что по умолчанию при создании новых потоков библиотекой возможность их отмены отключается. Эта функция сохраняет текущее состояние потока в переменной oldstate, и мы восстанавливаем его в конце функции. Затем мы вызываем pthread_cleanup_push для регистрации нашего обработчика отмены servproc_cleanup. Эта функция только выводит идентификатор отмененного потока, но вообще она может выполнять все необходимое для корректного завершения процедуры сервера (разблокировать исключения и т. п.). После возвращения из обработчика поток завершается.</p>
      <p>В текст процедуры сервера мы добавляем 6-секундную паузу, чтобы клиент мог успешно завершить работу в вызове door_call.</p>
      <p>Запустив клиент дважды, мы увидим сообщение интерпретатора Alarm clock при завершении процесса сигналом SIGALRM:</p>
      <p><code>solaris % <strong>clientintr4 /tmp/door4 44</strong></code></p>
      <p><code>Alarm Clock</code></p>
      <p><code>solaris % <strong>clientintr4 /tmp/door4 44</strong></code></p>
      <p><code>Alarm Clock</code></p>
      <p>Посмотрим, что при этом выводит сервер. Каждый раз при досрочном завершении клиента поток процедуры сервера действительно отменяется и вызывается обработчик отмены потока: </p>
      <p><code>solaris % <strong>serverintr4 /tmp/door4</strong></code></p>
      <p><code>servproc canceled, thread id 4</code></p>
      <p><code>servproc canceled, thread id 5</code></p>
      <p>Цель, с которой мы вызываем программу-клиент дважды, — показать, что после завершения потока с идентификатором 4 библиотека создает новый поток (с идентификатором 5) для обработки второго запроса клиента.</p>
     </section>
    </section>
    <section>
     <title>
      <p>15.12. Резюме</p>
     </title>
     <p>Интерфейс дверей позволяет вызывать процедуры в других процессах на том же узле. В следующей главе мы обсудим возможность удаленного вызова процедур в процессах на других узлах.</p>
     <p>Основные функции этого интерфейса просты в работе и использовании. Сервер вызывает door_create для создания двери и связывания ее с процедурой сервера, а затем вызывает fattach для сопоставления этой двери и имени файла в файловой системе. Клиент вызывает open для этого имени файла и затем может вызвать door_call для вызова процедуры сервера. Возврат из процедуры сервера осуществляется вызовом door_return.</p>
     <p>Обычно разрешения для двери проверяются только один раз — при ее открытии вызовом open. Проверяются идентификаторы пользователя и группы клиента (и полного имени файла). Одной из полезных функций дверей (по сравнению с другими средствами IPC) является возможность получения информации о клиенте в процессе работы (его действующего и реального идентификаторов). Это может использоваться сервером для принятия решения о предоставлении услуг данному клиенту.</p>
     <p>Двери предоставляют возможность передачи дескрипторов от клиента серверу и обратно. Это достаточно мощное средство, поскольку дескрипторы в Unix дают возможность обращаться ко множеству объектов (файлам, сокетам или XTI, дверям).</p>
     <p>При вызове процедур в другом процессе следует учесть возможность досрочного завершения клиента или сервера. Клиент получает уведомление о досрочном завершении сервера с помощью сообщения об ошибке EINTR. Сервер получает уведомление о досрочном завершении клиента в процессе обработки процедуры посредством запроса на отмену выполнения потока данной процедуры. Сервер может обработать этот запрос или проигнорировать его.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. Сколько байтов информации передается при вызове door_call от клиента серверу?</p>
     <p>2. Есть ли необходимость вызывать fstat для проверки типа дескриптора в листинге 15.3? Уберите этот вызов и посмотрите, что произойдет.</p>
     <p>3. В документации Solaris 2.6 для вызова sleep() говорится, что «выполнение текущего процесса приостанавливается». Почему при этом библиотека дверей имеет возможность создать новые потоки в листинге 15.6?</p>
     <p>4. В разделе 15.3 мы отмечали, что для создаваемых вызовом door_create дверей автоматически устанавливается бит FD_CLOEXEC. Однако мы можем вызвать fcntl после возврата из door_create и сбросить этот бит. Что произойдет, если мы сделаем это, вызовем exec, а затем обратимся к процедуре сервера из клиента?</p>
     <p>5. В листингах 15.23 и 15.24 добавьте вывод текущего времени в вызовах printf сервера и клиента. Запустите клиент и сервер. Почему первый экземпляр процедуры сервера возвращается через две секунды после запуска?</p>
     <p>6. Удалите блокировку, защищающую дескриптор fd в листингах 15.17 и 15.18, и убедитесь, что программа больше не работает. Какая при этом возникает ошибка?</p>
     <p>7. Если мы хотим лишь испытать возможность отмены потока с процедурой сервера, нужно ли нам устанавливать процедуру создания сервера?</p>
     <p>8. Проверьте, что вызов door_revoke дает возможность завершиться работающим с данной процедурой потокам. Выясните, что происходит при вызове door_саll после аннулирования процедуры.</p>
     <p>9. В нашем решении предыдущего упражнения и в листинге 15.17 мы говорим, что дескриптор двери должен быть глобальным, если он нужен процедуре сервера или процедуре создания сервера. Это утверждение, вообще говоря, неверно. Перепишите решение предыдущего упражнения, сохранив fd в качестве автоматической переменной функции main.</p>
     <p>10. В программе листинга 15.18 мы вызывали pthread_attr_init и pthread_attr_ destroy каждый раз, когда создавался поток. Является ли такое решение оптимальным?</p>
    </section>
   </section>
   <section>
    <title>
     <p>ГЛАВА 16</p>
     <p>Пакет Sun RPC</p>
    </title>
    <section>
     <title>
      <p>16.1. Введение</p>
     </title>
     <section>
      <p>Когда мы разрабатываем приложение, мы встаем перед выбором:</p>
      <p>1. Написать одну большую монолитную программу, которая будет делать все.</p>
      <p>2. Разделить приложение на несколько процессов, взаимодействующих друг с другом.</p>
      <p>Если мы выбираем второй вариант, перед нами опять встает вопрос:</p>
      <p>2.1. предполагать ли, что все процессы выполняются на одном узле, что допускает использование средств IPC для взаимодействия между ними, либо</p>
      <p>2.2. допускать возможность запуска части процессов на других узлах, что требует какой-либо формы взаимодействия по сети.</p>
      <p>Взгляните на рис. 15.1. Верхняя ситуация соответствует варианту 1, средняя — варианту 2.1, а нижняя — варианту 2.2. Большая часть этой книги посвящена обсуждению случая 2.1, то есть взаимодействию процессов в пределах одного узла с помощью таких средств IPC, как передача сообщений, разделяемая память и, возможно, некоторых форм синхронизации. Взаимодействие между потоками одного процесса или разных процессов является частным случаем этого сценария.</p>
      <p>Когда мы выдвигаем требование поддержки возможности сетевого взаимодействия между составляющими приложения, для разработки чаще всего используется явное сетевое программирование. При этом в программе используются вызовы интерфейсов сокетов или XTI, о чем рассказывается в [24]. При использовании интерфейса сокетов клиенты вызывают функции socket, connect, read и write, а серверы вызывают socket, bind, listen, accept, read и write. Большая часть знакомых нам приложений (браузеры, серверы Web, клиенты и серверы Telnet) написаны именно так.</p>
      <p>Альтернативным способом разработки распределенных приложений является неявное сетевое программирование. Оно осуществляется посредством удаленного вызова процедур (remote procedure call — RPC). Приложение кодируется с использованием тех же вызовов, что и обычное несетевое, но клиент и сервер могут находиться на разных узлах. Сервером называется процесс, предоставляющий другому возможность запускать одну из составляющих его процедур, а клиентом — процесс, вызывающий процедуру сервера. То, что клиент и сервер находятся на разных узлах и для связи между ними используется сетевое взаимодействие, большей частью остается скрыто от программиста. Одним из критериев оценки качества пакета RPC является именно скрытость лежащего в основе интерфейса сети.</p>
     </section>
     <section>
      <title>
       <p>Пример</p>
      </title>
      <p>В качестве примера использования RPC перепишем листинги 15.1 и 15.2 для использования Sun RPC вместо дверей. Клиент вызывает процедуру сервера с аргументом типа long, а возвращаемое значение представляет собой квадрат аргумента. В листинге 16.1<a l:href="#n_1" type="note">[1]</a> приведен текст первого файла, square.х.</p>
      <subtitle>Листинг 16.1. Файл спецификации RPC</subtitle>
      <p><code>//sunrpc/square1/square.x</code></p>
      <empty-line/>
      <p><code>1 struct square_in { /* входные данные (аргумент) */</code></p>
      <p><code>2  long arg1;</code></p>
      <p><code>3 };</code></p>
      <empty-line/>
      <p><code>4 struct square_out { /* возвращаемые данные (результат) */</code></p>
      <p><code>5  long res1;</code></p>
      <p><code>6 };</code></p>
      <empty-line/>
      <p><code>7 program SQUARE_PROG {</code></p>
      <p><code>8  version SQUARE_VERS {</code></p>
      <p><code>9   square_out SQUAREPROC(square_in) = 1; /* номер процедуры = 1 */</code></p>
      <p><code>10  } = 1; /* номер версии */</code></p>
      <p><code>11 } = 0x31230000; /* номер программы */</code></p>
      <p>Файлы с расширением .х называются файлами спецификации RPC. Они определяют процедуры сервера, их аргументы и возвращаемые значения.</p>
      <subtitle>Определение аргумента и возвращаемого значения</subtitle>
      <p>1-6 Мы определяем две структуры — одну для аргументов (одно поле типа long) и одну для результатов (тоже одно поле типа long).</p>
      <subtitle>Определение программы, версии и процедуры</subtitle>
      <p>7-11 Мы определяем программу RPC с именем SQUARE_PROG, состоящую из одной версии (SQUARE_VERS), а эта версия представляет собой единственную процедуру сервера с именем SQUAREPROC. Аргументом этой процедуры является структура square_in, а возвращаемым значением — структура square_out. Мы также присваиваем этой процедуре номер 1, как и версии, а программе мы присваиваем 32-разрядный шестнадцатеричный номер. (О номерах программ более подробно говорится в табл. 16.1.)</p>
      <p>Компилировать спецификацию нужно программой rpcgen, входящей в пакет Sun RPC.</p>
      <p>Теперь напишем функцию main клиента, который будет осуществлять удаленный вызов процедуры. Текст программы приведен в листинге 16.2.</p>
      <subtitle>Листинг 16.2. Функция main клиента, делающего удаленный вызов процедуры</subtitle>
      <p><code>//sunrpc/square1/client.c</code></p>
      <p><code>1  #include "unpipc.h" /* наш заголовочный файл */</code></p>
      <p><code>2  #include "square.h" /* создается rpcgen */</code></p>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   CLIENT *cl;</code></p>
      <p><code>7   square_in in;</code></p>
      <p><code>8   square_out *outp;</code></p>
      <p><code>9   if (argc != 3)</code></p>
      <p><code>10   err_quit("usage: client &lt;hostname&gt; &lt;integer-value&gt;");</code></p>
      <p><code>11  cl = Clnt_create(argv[1], SQUARE_PROG, SQUARE_VERS, "tcp");</code></p>
      <p><code>12  in.arg1 = atol(argv[2]);</code></p>
      <p><code>13  if ((outp = squareproc_1(&amp;in, cl)) == NULL)</code></p>
      <p><code>14   err_quit("ls", clnt_sperror(cl, argv[1]));</code></p>
      <p><code>15  printf("result: %ld\n", outp-&gt;res1);</code></p>
      <p><code>16  exit(0);</code></p>
      <p><code>17 }</code></p>
      <subtitle>Подключение заголовочного файла, создаваемого rpcgen</subtitle>
      <p>2 Мы подключаем заголовочный файл square.h, создаваемый функцией rpcgen.</p>
      <subtitle>Объявление дескриптора клиента</subtitle>
      <p>6 Мы объявляем дескриптор клиента (client handle) с именем cl. Дескрипторы клиентов выглядят как обычные указатели на тип FILE (поэтому слово CLIENT пишется заглавными буквами).</p>
      <subtitle>Получение дескриптора клиента</subtitle>
      <p>11 Мы вызываем функцию clnt_create, создающую клиент RPC:</p>
      <p><code>#include &lt;rpc/rpc.h&gt;</code></p>
      <p><code>CLIENT *clnt_create(const char <emphasis>*host,</emphasis> unsigned long <emphasis>prognum,</emphasis> unsigned long <emphasis>versnum,</emphasis> const char <emphasis>*protocol</emphasis>);</code></p>
      <p><code>/* Возвращает ненулевой дескриптор клиента в случае успешного завершения. NULL – в случае ошибки */</code></p>
      <p>Как и с обычными указателями на тип FILE, нам безразлично, на что указывает дескриптор клиента. Скорее всего, это некоторая информационная структура, хранящаяся в ядре. Функция clnt_create создает такую структуру и возвращает нам указатель на нее, а мы передаем его библиотеке RPC времени выполнения каждый раз при удаленном вызове процедуры.</p>
      <p>Первым аргументом clnt_create должно быть имя или IP-адрес узла, на котором выполняется сервер. Вторым аргументом будет имя программы, третьим — номер версии. Оба эти значения берутся из спецификации (square.х, листинг 16.1). Последний аргумент позволяет указать протокол, обычно TCP или UDP.</p>
      <subtitle>Вызов удаленной процедуры и вывод результата</subtitle>
      <p>12-15 Мы вызываем процедуру, причем первый аргумент указывает на входную структуру (&amp;in), а второй содержит дескриптор клиента. В большинстве стандартных функций ввода-вывода дескриптор файла является последним аргументом. Точно так же и в вызовах RPC дескриптор клиента передается последним. Возвращаемое значение представляет собой указатель на структуру, в которой хранится результат работы сервера. Место под входную структуру выделяет программист, а под возвращаемую — пакет RPC.</p>
      <p>В файле спецификации square.x мы назвали процедуру SQUAREPROC, но из клиента мы вызываем squareproc_1. Существует соглашение о преобразовании имени из файла спецификации к нижнему регистру и добавлении номера версии через символ подчеркивания.</p>
      <p>Со стороны сервера от нас требуется только написать процедуру. Функция main автоматически создается программой rpcgen. Текст процедуры приведен в листинге 16.3.</p>
      <subtitle>Листинг 16.3. Процедура сервера, вызываемая с помощью Sun RPC</subtitle>
      <p><code>//sunrpc/square1/server.c</code></p>
      <p><code>1 #include "unpipc.h"</code></p>
      <p><code>2 #include "square.h"</code></p>
      <empty-line/>
      <p><code>3 square_out *</code></p>
      <p><code>4 squareproc_l_svc(square_in *inp, struct svc_req *rqstp)</code></p>
      <p><code>5 {</code></p>
      <p><code>6  static square_out out;</code></p>
      <p><code>7  out.res1 = inp-&gt;arg1 * inp-&gt;arg1;</code></p>
      <p><code>8  return(&amp;out);</code></p>
      <p><code>9 }</code></p>
      <subtitle>Аргументы процедуры</subtitle>
      <p>3-4 Прежде всего мы замечаем, что к имени процедуры добавился суффикс _svc. Это дает возможность использовать два прототипа функций ANSI С в файле square.x, один из которых определяет функцию, вызываемую клиентом в листинге 16.2 (она принимает дескриптор клиента), а второй — реальную функцию сервера (которая принимает другие аргументы).</p>
      <p>При вызове процедуры сервера первый аргумент является указателем на входную структуру, а второй — на структуру, передаваемую библиотекой RPC времени выполнения, которая содержит информацию о данном вызове (в этом примере игнорируется для простоты).</p>
      <subtitle>Выполнение и возврат</subtitle>
      <p>6-8 Программа считывает входной аргумент и возводит его в квадрат. Результат сохраняется в структуре, адрес которой возвращается процедурой сервера. Поскольку мы возвращаем адрес переменной, эта переменная не может быть автоматической. Мы объявляем ее как статическую (static).</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Внимательные читатели заметят, что это лишает нашу функцию возможности использования в защищенном поточном программировании. Мы обсудим это в разделе 16.2, где приведем пример защищенной функции. </p>
      </cite>
      <p>Откомпилируем клиент в системе Solaris, а сервер — в BSD/OS, запустим сервер, а затем клиент:</p>
      <p><code>solaris % <strong>client bsdi 11</strong></code></p>
      <p><code>result: 121</code></p>
      <p><code>solaris % <strong>client 209.75.135.35 22</strong></code></p>
      <p><code>result: 484</code></p>
      <p>В первом случае мы указываем имя узла сервера, а во втором — его IP-адрес. Этим мы демонстрируем возможность использования как имен, так и IP-адресов для задания узла в функции clnt_create.</p>
      <p>Теперь продемонстрируем некоторые ошибки, возникающие при работе clnt_create, если, например, не существует узел или на нем не запущена программа-сервер:</p>
      <p><code>solaris % <strong>client nosuchhost 11</strong></code></p>
      <p><code>nosuchhost: RPC: Unknown host <emphasis>возвращается библиотекой RPC времени выполнения</emphasis></code></p>
      <p><code>clnt_create error             <emphasis>возвращается нашей функцией-оберткой</emphasis></code></p>
      <p><code>solaris % <strong>client localhost 11</strong></code></p>
      <p><code>localhost: rpc: program not registered</code></p>
      <p><code>clnt_create error</code></p>
      <p>Мы написали клиентскую и серверную части программы и продемонстрировали их использование вообще без явного сетевого программирования. Клиент просто вызывает две функции, а сервер вообще состоит из одной функции. Все тонкости использования XTI в Solaris, сокетов в BSD/OS и сетевого ввода-вывода обрабатываются библиотекой RPC времени выполнения. В этом и состоит предназначение RPC — предоставлять возможность создания распределенных приложений без знания сетевого программирования.</p>
      <p>Другая немаловажная деталь данного примера заключается в том, что в системах Sparc под Solaris и Intel x86 под управлением BSD/OS используется разный порядок байтов. В Sparc используется порядок big endian («тупоконечный»<a l:href="#n_2" type="note">[2]</a>), а в Intel — little endian («остроконечный») (что мы показали в разделе 3.4 [24]). Отличия в порядке байтов также обрабатываются библиотекой RPC времени выполнения автоматически с использованием стандарта XDR (внешнее представление данных), который мы обсудим в разделе 16.8.</p>
      <p>Создание программы-клиента и программы-сервера в данном случае требует больше операций, чем для любой другой программы этой книги. Выполняемый файл клиента получается следующим образом:</p>
      <p><code>solaris % <strong>rpcgen-Сsquare.x</strong></code></p>
      <p><code>solaris % <strong>cc-сclient.с-оclient.о</strong></code></p>
      <p><code>solaris % <strong>cc-сsquare_clnt.c-оsquare_clnt.o</strong></code></p>
      <p><code>solaris % <strong>cc-сsquare_xdr.с-оsquare_xdr.o</strong></code></p>
      <p><code>solaris % <strong>cc-оclient client.оsquare_clnt.o square_xdr.o libunpipc.a –lnsl</strong></code></p>
      <p>Параметр –С говорит rpcgen о необходимости создания прототипов функций ANSI С в заголовочном файле square.h. Программа rpcgen также создает заглушку клиента (client stub) в файле с именем square_clnt.с и файл с именем square_xdr.с, который осуществляет преобразование данных в соответствии со стандартом XDR. Наша библиотека (содержащая функции, используемые в этой книге) называется libunpipc.a, а параметр –lnsl подключает системную библиотеку сетевых функций в Solaris (включая библиотеки RPC и XDR времени выполнения).</p>
      <p>Аналогичные команды используются для создания сервера, хотя rpcgen уже не нужно запускать снова. Файл square_svc.c содержит функцию main сервера, и файл square_xdr.о, обсуждавшийся выше, также требуется для работы сервера:</p>
      <p><code>solaris % <strong>cc –с server.с –о server.о</strong></code></p>
      <p><code>solaris % <strong>сc –с square_svc.c –о square_svc.o</strong></code></p>
      <p><code>solaris % <strong>cc –о server server.о square_svc.o libunpipc.a –lnsl</strong></code></p>
      <p>При этом создаются клиент и сервер, выполняемые в системе Solaris.</p>
      <p>Если клиент и сервер должны быть построены для разных систем (как в предыдущем примере, где клиент выполнялся в Solaris, а сервер — в BSD/OS), могут потребоваться дополнительные действия. Например, некоторые файлы должны быть либо общими (через NFS), либо находиться в обеих системах, а файлы, используемые клиентом и сервером (например, square_xdr.o), должны компилироваться в каждой системе в отдельности. </p>
      <image l:href="#Any2FbImgLoader233"/>
      <p>Рис. 16.1. Этапы создания приложения клиент-сервер с использованием RPC</p>
      <empty-line/>
      <p>На рис. 16.1 приведена схема создания приложения типа клиент-сервер. Три затемненных прямоугольника соответствуют файлам, которые мы должны написать. Штриховые линии показывают файлы, подключаемые через заголовочный файл square.h.</p>
      <p>На рис. 16.2 изображена схема происходящего при удаленном вызове процедуры. Действия выполняются в следующем порядке:</p>
      <p>1. Запускается сервер, который регистрируется в программе, управляющей портами на узле-сервере. Затем запускается клиент и вызывает clnt_create. Эта функция связывается с управляющей портами программой сервера и находит нужный порт. Функция clnt_create также устанавливает соединение с сервером по протоколу TCP (поскольку мы указали TCP в качестве используемого протокола в листинге 16.2). Мы не показываем эти шаги на рисунке и откладываем детальное обсуждение до раздела 16.3.</p>
      <p>2. Клиент вызывает локальную процедуру, называемую заглушкой клиента. В листинге 16.2 эта процедура называлась squareproc_1, а файл, содержащий ее, создавался rpcgen автоматически и получал название square_clnt.c. С точки зрения клиента именно эта функция является сервером, к которому он обращается. Целью создания заглушки является упаковка аргументов для удаленного вызова процедуры, помещение их в стандартный формат и создание одного или нескольких сетевых сообщений. Упаковка аргументов клиента в сетевое сообщение называется сортировкой (marshaling). Клиент и заглушка обычно вызывают библиотеки функций RPC (clnt_create в нашем примере). При использовании редактора связей в Solaris эти функции загружаются из библиотеки –lnsl, тогда как в BSD/OS они входят в стандартную библиотеку языка С.</p>
      <p>3. Сетевые сообщения отсылаются на удаленную систему заглушкой клиента. Обычно это требует локального системного вызова (например, write или sendto).</p>
      <p>4. Сетевые сообщения передаются на удаленную систему. Для этого обычно используются сетевые протоколы TCP и UDP.</p>
      <p>5. Заглушка сервера ожидает запросов от клиента на стороне сервера. Она рассортировывает аргументы из сетевых сообщений.</p>
      <p>6. Заглушка сервера осуществляет локальный вызов процедуры для запуска настоящей функции сервера (процедуры squareproc_l_svc в листинге 16.3), передавая ей аргументы, полученные в сетевых сообщениях от клиента.</p>
      <p>7. После завершения процедуры сервера управление возвращается заглушке сервера, которой передаются все необходимые значения.</p>
      <p>8. Заглушка сервера преобразовывает возвращаемые значения к нужному формату и рассортировывает их в сетевые сообщения для отправки обратно клиенту.</p>
      <p>9. Сообщения передаются по сети обратно клиенту. </p>
      <p>10. Заглушка клиента считывает сообщения из локального ядра (вызовом read или recvfrom).</p>
      <p>11. После возможного преобразования возвращаемых значений заглушка клиента передает их функции клиента. Этот этап воспринимается клиентом как завершение работы процедуры.</p>
      <image l:href="#Any2FbImgLoader234"/>
      <p>Рис. 16.2. Действия, происходящие при удаленном вызове процедуры</p>
     </section>
     <section>
      <title>
       <p>История</p>
      </title>
      <p>Наверное, одна из самых старых книг по RPC — это [26]. Как пишет [4], Уайт (White) затем перешел в Xerox и там создал несколько систем RPC. Одна из них была выпущена в качестве отдельного продукта в 1981 году под именем Courier. Классической книгой по RPC является [2]. В ней описаны средства RPC проекта Cedar, работавшего на однопользовательских рабочих станциях Dorado в фирме Xerox в начале 80-х. Xerox реализовал RPC на рабочих станциях еще до того, как большинство людей узнало о том, что рабочие станции существуют! Реализация Courier для Unix распространялась много лет с версиями BSD 4.x, но в настоящий момент эта система RPC представляет только исторический интерес.</p>
      <p>Sun выпустила первую версию пакета RPC в 1985. Она была разработана Бобом Лайоном (Bob Lyon), ушедшим в Sun из фирмы Xerox в 1983. Официально она называлась ONC/RPC: Open Network Computing Remote Procedure Call (удаленный вызов процедур в открытых вычислительных сетях), но обычно ее называют просто Sun RPC. Технически она аналогична Courier. Первые версии Sun RPC были написаны с использованием интерфейса сокетов и работали с протоколами TCP и UDP. Общедоступный исходный код вышел под названием RPCSRC. В начале 90-х он был переписан под интерфейс транспортного уровня TLI (предшественник XTI), который описан в четвертой части [24]. Теперь этот код работает со всеми протоколами, поддерживаемыми ядром. Общедоступный исходный код обеих версий можно найти по адресу ftp://playground.sun.com/pub/rpc, причем версия, использующая сокеты, называется rpcsrc, а версия, использующая TLI, называется tirpcsrc (название TI-RCP образовано от Transport Independent — транспортно-независимый удаленный вызов процедур).</p>
      <p>Стандарт RFC 1831 [18] содержит обзор средств Sun RPC и описывает формат сообщений RPC, передаваемых по сети. Стандарт RFC 1832 [19] содержит описание XDR — и поддерживаемых типов данных, и формата их передачи «по проводам». Стандарт RFC 1833 [20] описывает протоколы привязки: RPCBIND и его предшественника, программу отображения портов (port mapper).</p>
      <p>Одним из наиболее распространенных приложений, использующих Sun RPC, является сетевая файловая система Sun (NFS). Обычно она не создается стандартными средствами RPC, описанными в этой главе (rpcgen и библиотека времени выполнения). Вместо этого большинство подпрограмм библиотеки оптимизируются вручную и добавляются в ядро с целью ускорить их работу. Тем не менее большинство систем, поддерживающих NFS, также поддерживают и Sun RPC.</p>
      <p>В середине 80-х Apollo соперничала с Sun за рынок рабочих станций и создала свой собственный пакет RPC, призванный вытеснить Sun RPC. Этот новый пакет назывался NCA (Network Computing Architecture — архитектура сетевых вычислений). Протоколом RPC являлся протокол NCA/RPC, а аналогом XDR была схема NDR (Network Data Representation — сетевое представление данных). Интерфейсы между клиентами и серверами определялись с помощью языка NIDL (Network Interface Definition Language — язык определений сетевого интерфейса) аналогично нашему файлу .х из листинга 16.1. Библиотека времени выполнения называлась NCK (Network Computing Kernel).</p>
      <p>Фирма Apollo была куплена Hewlett-Packard в 1989, и NCA переросла в OSF's DCE (Distributed Computing Environment — среда распределенных вычислений), основной частью которой является RPC. Более подробно о DCE можно узнать по адресу http://www.camp.opengroup.org/tech/dce. Реализация пакета DCE RPC свободно доступна на ftp://gatekeeper.dec.com/pub/DEC/DCE. Этот каталог также содержит описание внутреннего устройства пакета DCE RPC на 171 странице. Существует много версий DCE для разных платформ.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Sun RPC распространен шире, чем DCE RPC, возможно, благодаря свободно доступной реализации и включению в основную поставку большинства систем Unix. DCE RPC обычно поставляется в качестве дополнения (за дополнительную сумму). Переписывание свободно доступного кода под другие платформы пока еще не пошло полным ходом, хотя уже готовится версия для Linux. В этой главе мы опишем только средства Sun RPC. Все три пакета RPC — Courier, Sun и DCE — похожи друг на друга, поскольку основные концепции RPC остались неизменны.</p>
       <p>Большинство поставщиков Unix предоставляют отдельную подробную документацию средств RPC. Например, документация Sun доступна по адресу http://docs.sun.com, и в первом томе Developer Collection можно найти 280-страничное руководство разработчика «ONC+ Developer's Guide». Документация Digital Unix по адресу http:// www.unix.digital.com/faqs/publications/pub_page/V40D_DOCS.HTM включает 116-страничный документ под заголовком «Programming with ONC RPC».</p>
       <p>Сам по себе RPC вызывает противоречивые мнения. Восемь статей на эту тему можно найти по адресу http://www.kohala.com/~rstevens/papers.others/rpc.comments.txt.</p>
      </cite>
      <p> В этой главе мы предполагаем наличие TI-RPC (независимая от протокола версия RPC) для большинства примеров и говорим только о протоколах TCP и UDP, хотя TI-RPC поддерживает все протоколы, какие только могут быть на данном узле. </p>
     </section>
    </section>
    <section>
     <title>
      <p>16.2. Многопоточность</p>
     </title>
     <p>Вспомните листинг 15.6, где мы продемонстрировали автоматическое управление потоками, осуществляемое библиотекой дверей. При этом сервер по умолчанию являлся параллельным. Покажем теперь, что средства Sun RPC по умолчанию делают сервер последовательным. Начнем с примера из предыдущего раздела и изменим только процедуру сервера. В листинге 16.4 приведен текст новой функции, выводящей идентификатор потока, делающей 5-секундную паузу, выводящей идентификатор еще раз и завершающей работу.</p>
     <subtitle>Листинг 16.4. Процедура сервера с 5-секундной паузой</subtitle>
     <p><code>//sunrpc/square2/server.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #include "square.h"</code></p>
     <empty-line/>
     <p><code>3  square_out *</code></p>
     <p><code>4  squareproc_1_svc(square_in *inp, struct svc_req *rqstp)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   static square_out out;</code></p>
     <p><code>7   printf("thread %ld started, arg = %ld\n",</code></p>
     <p><code>8   pr_thread_id(NULL), inp-&gt;arg1);</code></p>
     <p><code>9   sleep(5);</code></p>
     <p><code>10  out.res1 = inp-&gt;arg1 * inp-&gt;arg1;</code></p>
     <p><code>11  printf("thread %ld done\n", pr_thread_id(NULL));</code></p>
     <p><code>12  return(&amp;out);</code></p>
     <p><code>13 }</code></p>
     <p>Запустим сервер, а после этого запустим три экземпляра программы-клиента:</p>
     <p><code>solaris % <strong>client localhost 22 &amp; client localhost 33&amp; client localhost 44 &amp;</strong></code></p>
     <p><code>[3] 25179</code></p>
     <p><code>[4] 25180</code></p>
     <p><code>[5] 25181</code></p>
     <p><code>solaris % result: 484 <emphasis>примерно через 5 секунд после появления подсказки</emphasis></code></p>
     <p><code>result: 1936          <emphasis>еще через 5 секунд</emphasis></code></p>
     <p><code>result: 1089          <emphasis>еще через 5 секунд</emphasis></code></p>
     <p>Хотя этого нельзя сказать по выводимому тексту, перед появлением очередного результата проходит примерно 5 секунд. Если мы посмотрим на текст, выводимый сервером, то увидим, что клиенты обрабатываются последовательно: сначала полностью обрабатывается запрос первого клиента, затем второго и третьего:</p>
     <p><code>solaris % <strong>server</strong></code></p>
     <p><code>thread 1 started, arg = 22</code></p>
     <p><code>thread 1 done</code></p>
     <p><code>thread 1 started, arg = 44</code></p>
     <p><code>thread 1 done</code></p>
     <p><code>thread 1 started, arg = 33</code></p>
     <p><code>thread 1 done</code></p>
     <p>Один и тот же поток обслуживает все запросы клиентов. Сервер не является многопоточным по умолчанию.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Серверы дверей в главе 15 работали не в фоновом режиме, а запускались из интерпретатора. Это давало нам возможность добавлять отладочные вызовы printf в процедуры сервера. Однако серверы Sun RPC по умолчанию являются демонами и выполняют действия так, как это описано в разделе 12.4 [24]. Это требует вызова syslog из процедуры сервера для вывода диагностической информации. Однако мы указали флаг –DDEBUG при компиляции нашего сервера, что эквивалентно определению</p>
      <p><code>#define DEBUG</code></p>
      <p>в заглушке сервера (файле square_svc.c, создаваемом rpcgen). Это запрещает функции main становиться демоном и оставляет ее подключенной к терминалу, в котором она была запущена. Поэтому мы можем спокойно вызывать printf из процедуры сервера.</p>
     </cite>
     <p>Возможность создания многопоточного сервера появилась в Solaris 2.4 и реализуется добавлением параметра –М в строку вызова rpcgen. Это делает код, создаваемый rpcgen, защищенным. Другой параметр, –А, позволяет автоматически создавать потоки по мере необходимости для обслуживания запросов клиентов. Мы включаем оба параметра при вызове rpcgen.</p>
     <p>Однако для реализации многопоточности требуется внести изменения в текст клиента и сервера, чего мы могли ожидать, поскольку использовали тип static в листинге 16.3. Единственное изменение, которое нужно внести в файл square.х, — сменить номер версии с 1 на 2. В объявлениях аргументов процедуры и результатов ничего не изменится.</p>
     <p>В листинге 16.5 приведен текст новой программы-клиента.</p>
     <subtitle>Листинг 16.5. Функция main клиента многопоточного сервера</subtitle>
     <p><code>//sunrpc/square3/client.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #include "square.h"</code></p>
     <empty-line/>
     <p><code>3  int</code></p>
     <p><code>4  main(int argc, char **argv)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   CLIENT *cl;</code></p>
     <p><code>7   square_in in;</code></p>
     <p><code>8   square_out out;</code></p>
     <p><code>9   if (argc != 3)</code></p>
     <p><code>10   err_quit("usage: client &lt;hostname&gt; &lt;integer-value&gt;");</code></p>
     <p><code>11  cl = Clnt_create(argv[1], SQUARE_PROG, SQUARE_VERS, "tcp");</code></p>
     <p><code>12  in.arg1 = atol(argv[2]);</code></p>
     <p><code>13  if (squareproc_2(&amp;in, &amp;out, cl) != RPC_SUCCESS)</code></p>
     <p><code>14   err_quit("%s", clnt_sperror(cl, argv[1]));</code></p>
     <p><code>15  printf("result: %ld\n", out.res1);</code></p>
     <p><code>16  exit(0);</code></p>
     <p><code>17 }</code></p>
     <subtitle>Объявление переменной для помещения результата</subtitle>
     <p>8 Мы объявляем переменную типа square_out, а не указатель на нее. </p>
     <subtitle>Новый аргумент в вызове процедуры</subtitle>
     <p>12-14 Вторым аргументом вызова squareproc_2 становится указатель на переменную out, а последним аргументом является дескриптор клиента. Вместо возвращения указателя на результат (как в листинге 16.2) эта функция будет возвращать либо RPC_SUCCESS, либо некоторое другое значение в случае возникновения ошибок. Перечисление enumclnt_stat в заголовочном файле &lt;rpc/clnt_stat.h&gt; содержит все возможные коды ошибок.</p>
     <p>В листинге 16.6 приведен текст новой процедуры сервера. Как и программа из листинга 16.4, эта версия выводит идентификатор потока, ждет 5 секунд, а затем завершает работу.</p>
     <subtitle>Листинг 16.6. Процедура многопоточного сервера</subtitle>
     <p><code>//sunrpc/square3/server.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #include "square.h"</code></p>
     <empty-line/>
     <p><code>3  bool_t</code></p>
     <p><code>4  squareproc_2_svc(square_in *inp, square_out *outp, struct svc_req *rqstp)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   printf("thread %Id started, arg = %ld\n",</code></p>
     <p><code>7   pr_thread_id(NULL), inp-&gt;arg1);</code></p>
     <p><code>8   sleep(5);</code></p>
     <p><code>9   outp-&gt;res1 = inp-&gt;arg1 * inp-&gt;arg1;</code></p>
     <p><code>10  printf("thread %ld done\n", pr_thread_id(NULL));</code></p>
     <p><code>11  return(TRUE);</code></p>
     <p><code>12 }</code></p>
     <empty-line/>
     <p><code>13 int</code></p>
     <p><code>14 square_prog_2_freeresult(SVCXPRT *transp, xdrproc_t xdr_result,</code></p>
     <p><code>15 caddr_t result)</code></p>
     <p><code>16 {</code></p>
     <p><code>17  xdr_free(xdr_result, result);</code></p>
     <p><code>18  return(1);</code></p>
     <p><code>19 }</code></p>
     <subtitle>Новые аргументы и возвращаемое значение</subtitle>
     <p>3-12 Требуемые для реализации многопоточности изменения включают изменение аргументов функций и возвращаемого значения. Вместо возвращения указателя на структуру результатов (как в листинге 16.3) указатель на эту структуру принимается в качестве второго аргумента функции. Указатель на структуру svc_req смещается на третью позицию. Теперь при успешном завершении функции возвращается значение TRUE, а при возникновении ошибок — FALSE.</p>
     <subtitle>Новая функция, освобождающая память XDR</subtitle>
     <p>13-19 Еще одно изменение заключается в добавлении функции, освобождающей все автоматически выделенные переменные. Эта функция вызывается из заглушки сервера после завершения работы процедуры сервера и отправки результата клиенту. В нашем примере просто делается вызов подпрограммы xdr_free (о ней будет говориться более подробно в связи с листингом 16.19 и упражнением 16.10). </p>
     <p>Если процедура сервера выделяла память под сохраняемый результат (например, в виде связного списка), этот вызов освободит занятую память.</p>
     <p>Создадим программу-клиент и программу-сервер и запустим три экземпляра клиента одновременно:</p>
     <p><code>solaris % <strong>client localhost 55 &amp; client localhost 66 &amp; client localhost 77 &amp;</strong></code></p>
     <p><code>[3] 25427</code></p>
     <p><code>[4] 25428</code></p>
     <p><code>[5] 25429</code></p>
     <p><code>solaris % result: 4356</code></p>
     <p><code>result: 3025</code></p>
     <p><code>result: 5929</code></p>
     <p>На этот раз мы видим, что результаты выводятся одновременно, один за другим. Взглянув на выводимый сервером текст, отметим, что используются три серверных потока и все они выполняются одновременно:</p>
     <p><code>solaris % <strong>server</strong></code></p>
     <p><code>thread 1 started, arg = 55</code></p>
     <p><code>thread 4 started, arg = 77</code></p>
     <p><code>thread 6 started, arg = 66</code></p>
     <p><code>thread 6 done</code></p>
     <p><code>thread 1 done</code></p>
     <p><code>thread 4 done</code></p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Одним из печальных следствий изменений, требуемых для реализации многопоточности, является уменьшение количества систем, поддерживающих новый код. Например, в Digital Unix 4.0B и BSD/OS 3.1 используется старая система RPC, не поддерживающая многопоточность. Это означает, что если мы хотим компилировать и использовать нашу программу в системах обоих типов, нам нужно использовать условия #ifdef для обработки различий в вызовах клиента и сервера. Конечно, клиент в BSD/OS, не являющийся многопоточным, может вызвать процедуру многопоточного сервера в Solaris, но если мы хотим, чтобы клиент или сервер компилировался в обоих типах систем, исходный код нужно изменить, предусмотрев различия.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>16.3. Привязка сервера</p>
     </title>
     <section>
      <p>В описании листинга 16.5 мы достаточно бегло прошлись по действиям, выполняемым на нулевом этапе: регистрация сервера в локальной программе отображения портов и определение клиентом адреса порта не были разобраны детально. Отметим прежде всего, что на любом узле с сервером RPC должна выполняться программа port mapper (отображение портов). Этой программе присваивается адрес порта TCP 111 и UDP 111, и это единственные фиксированные значения портов Интернета для Sun RPC. Серверы RPC всегда связываются с временным портом, а затем регистрируют его в локальной службе отображения портов. После запуска клиент должен связаться с программой отображения портов, узнать номер временного порта сервера, а затем связаться с самим сервером через этот порт. Программа отображения портов предоставляет также службу имен, область действия которой ограничена системой.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Некоторые читатели могут возразить, что сетевая файловая система также имеет фиксированный номер порта 2049. Хотя во многих реализациях по умолчанию действительно используется именно этот порт, а в некоторых старых реализациях он вообще жестко «зашит» в клиентскую и серверную части NFS, большинство существующих реализаций позволяют использовать и другие порты. Большая часть клиентов NFS также связывается со службой отображения портов для получения номера порта.</p>
       <p>В Solaris 2.x Sun переименовала службу отображения портов в RPCBIND. Причина этого изменения заключается в том, что термин «порт» подразумевает порт Интернета, тогда как пакет TI-RPC может работать с любым сетевым протоколом, а не только с TCP и UDP. Мы будем использовать традиционное название «программа отображения портов» (port mapper). Далее в этой главе мы будем подразумевать, что на данном узле поддерживаются только протоколы TCP и UDP.</p>
      </cite>
      <p>Сервер и клиент работают следующим образом:</p>
      <p>1. При переходе системы в многопользовательский режим запускается пpoгрaммa отображения портов. Исполняемый файл этого демона обычно называется portmap или rpcbind.</p>
      <p>2. При запуске сервера его функция main, являющаяся частью заглушки сервера, создаваемой rpcgen, вызывает библиотечную функцию svc_create. Эта функция выясняет, какие сетевые протоколы поддерживаются узлом, и создает конечную точку (например, сокет) для каждого протокола, связывая временные порты с конечными точками протоколов TCP и UDP. Затем она связывается с локальной пpoгрaммoй отображения портов для регистрации временных номеров портов TCP и UDP вместе с номером программы и номером версии.</p>
      <p>Сама программа отображения портов также представляет собой программу RPC, и сервер регистрируется с помощью вызовов RPC (обращенных к известному порту 111). Описание процедур, поддерживаемых пpoгрaммoй отображения портов, дается в стандарте RFC 1833 [20]. Существуют три версии этой программы RPC: вторая версия работает только с портами TCP и UDP, а версии <strong>3</strong>и 4 представляют собой новые версии, работающие по протоколу RPCBIND.</p>
      <p>Можно получить список всех пpoгрaмм RPC, зарегистрированных в пpoгрaм-ме отображения портов, запустив пpoгрaммy rpcinfo. Мы можем запустить эту программу, чтобы убедиться, что порт с номером 111 используется самой программой отображения портов:</p>
      <p><code>solaris % <strong>rpcinfo –p</strong></code></p>
      <p><code>program vers proto port service</code></p>
      <p><code>100000 4 tcp 111 rpcbind</code></p>
      <p><code>100000 3 tcp 111 rpcbind</code></p>
      <p><code>100000 2 tcp 111 rpcbind</code></p>
      <p><code>100000 4 udp 111 rpcbind</code></p>
      <p><code>100000 3 udp 111 rpcbind</code></p>
      <p><code>100000 2 udp 111 rpcbind</code></p>
      <p>(Мы исключили множество несущественных в данный момент строк вывода.) Мы видим, что Solaris 2.6 поддерживает все три версии протокола, все на порте 111, причем как TCP, так и UDP. Соответствие номеров пpoгрaмм RPC их именам обычно устанавливается в файле /etc/rpc. Запустив ту же программу в BSD/OS 3.1, увидим, что в этой системе поддерживается только вторая версия программы отображения портов:</p>
      <p><code>bsdi % <strong>rpcinfo –p</strong></code></p>
      <p><code>program vers proto port</code></p>
      <p><code>100000 2 tcp 111 portmapper</code></p>
      <p><code>100000 2 udp 111 portmapper</code></p>
      <p>В Digital Unix 4.0В также поддерживается только вторая версия:</p>
      <p><code>alpha % <strong>rpcinfo –p</strong></code></p>
      <p><code>program vers proto port</code></p>
      <p><code>100000 2 tcp 111 portmapper</code></p>
      <p><code>100000 2 udp 111 portmapper</code></p>
      <p>Затем процесс сервера приостанавливает работу, ожидая поступления запросов от клиентов. Это может быть новое соединение TCP или приход дей-тaгрaммы UDP в порт UDP. Если мы запустим rpcinfo после запуска сервера из листинга 16.3, мы увидим следующий результат:</p>
      <p><code>solaris % <strong>rpcinfo –p</strong></code></p>
      <p><code>program vers proto port service</code></p>
      <p><code>8243773444 1 udp</code></p>
      <p><code>8243773444 1 tcp</code></p>
      <p>где 824377344 соответствует 0x31230000 (номер пpoгрaммы, присвоенный ей в листинге 16.1). В том же листинге мы присвоили программе номер версии 1. Обратите внимание, что сервер готов принимать запросы от клиентов по протоколам TCP и UDP и клиент может выбирать, какой из этих протоколов он будет использовать при создании дескриптора клиента (последний аргумент clnt_create в листинге 16.2).</p>
      <p>3. Клиент запускается и вызывает clnt_create. Аргументами (листинг 16.2) являются имя узла или IP-адрес сервера, номер пpoгрaммы, номер версии и строка, указывающая протокол связи. Запрос RPC направляется пpoгрaммe отображения портов узла сервера (для этого сообщения обычно используется протокол UDP), причем запрашивается информация об указанной версии указанной программы с указанным протоколом. В случае успеха номер порта сохраняется в дескрипторе клиента для обработки всех последующих вызовов RPC через этот дескриптор.</p>
      <p>В листинге 16.1 мы присвоили нашей программе номер 0x31230000. 32-разрядные номера пpoгрaмм подразделяются на группы, приведенные в табл. 16.1.</p>
      <empty-line/>
      <p>Таблица 16.1. Диапазоны номеров программ для Sun RPC </p>
      <table>
       <tr align="left">
        <th align="left" valign="top">Номер программы</th>
        <th align="left" valign="top">Описание</th>
       </tr>
       <tr align="left">
        <td align="left" valign="top">0x00000000–0x1fffffff</td>
        <td align="left" valign="top">Определена Sun</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">0x20000000–0x3fffffff</td>
        <td align="left" valign="top">Определена пользователем</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">0x40000000–0x5fffffff</td>
        <td align="left" valign="top">Временная (для приложений, написанных заказчиком)</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">0x60000000–0xffffffff</td>
        <td align="left" valign="top">Зарезервированы</td>
       </tr>
      </table>
      <p>Пpoгрaммa rpcinfо выводит список программ, зарегистрированных в системе. Другим источником информации о пpoгрaммax RPC могут являться файлы с расширением .х в каталоге /usr/inciude/rpcsvc.</p>
     </section>
     <section>
      <title>
       <p>Inetd и серверы RPC</p>
      </title>
      <p>По умолчанию серверы, созданные с помощью rpcgen, могут вызываться сервером верхнего уровня inetd. Этот сервер описывается в разделе 12.5 [24]. Изучение содержимого заглушки сервера, создаваемой rpcgen, показывает, что при запуске функции main сервера она проверяет, является ли стандартный поток ввода конечной точкой XTI, и если так, то предполагается, что сервер был запущен демоном inetd.</p>
      <p>После создания сервера RPC, который будет вызываться inetd, следует добавить информацию об этом сервере в файл /etc/inetd.conf. Туда помещаются следующие данные: имя программы RPC, поддерживаемые номера программ, протоколы и полное имя исполняемого файла сервера. В качестве примера мы приводим строку из конфигурационного файла Solaris:</p>
      <p><code>rstatd/2-4 tli rpc/datagram_v wait root /usr/lib/netsvc/rstat/rpc.rstatd rpc.rstatd</code></p>
      <p>Первое поле содержит имя пpoгрaммы (которому будет сопоставлен номер с помощью файла /etc/rpc); поддерживаются версии 2, 3 и 4. Следующее поле задает конечную точку XTI (или сокет), третье поле говорит о том, что поддерживаются все протоколы видимых дeйтaгрaмм. Если свериться с содержимым файла /etc/netconfig, мы узнаем, что таких протоколов два: UDP и /dev/clts. Глава 29 [24] описывает этот файл и адреса XTI. Четвертое поле (wait) указывает демону inetd на необходимость ожидания завершения этого сервера перед включением режима ожидания запроса клиента для конечной точки XTI. Все серверы RPC указывают атрибут wait в конфигурационном файле /etc/inetd.conf.</p>
      <p>Следующее поле, root, указывает идентификатор пользователя, с которым будет выполняться пpoгрaммa. Последние два поля задают полное имя исполняемого файла пpoгрaммы и имя пpoгрaммы вместе с необходимыми аргументами командной строки (у данной пpoгрaммы они отсутствуют).</p>
      <p>Демон inetd создаст конечные точки XTI и зарегистрирует их в программе отображения портов для соответствующих номеров пpoгрaмм и версий. Мы можем убедиться в этом с помощью rpcinfo:</p>
      <p><code>solaris % <strong>rpcinfo | grep statd</strong></code></p>
      <p><code>100001 2 udp    0.0.0.0.128.11 rstatd superuser</code></p>
      <p><code><code>100001 3 </code>udp    0.0.0.0.128.11 rstatd superuser</code></p>
      <p><code><code>100001 4 </code>udp    0.0.0.0.128.11 rstatd superuser</code></p>
      <p><code><code>100001 2 </code>ticlts \000\000\020.  rstatd superuser</code></p>
      <p><code><code>100001 3 </code>ticlts \000\000\020.  rstatd superuser</code></p>
      <p><code><code>100001 4 </code>ticlts \000\000\020.  rstatd superuser</code></p>
      <p>Четвертое поле содержит адреса XTI, причем 128&#215;256+11 = 32779, и данное значение является временным номером порта, присвоенным этой концевой точке UDP.</p>
      <p>Когда дейтаграмма UDP поступает в порт 32779, демон inetd обнаруживает готовность этой дейтаграммы к обработке и вызывает fork, а затем exec для запуска программы /usr/lib/netsvc/rstat/rpc.rstatd. Перед вызовами fork и exec концевая точка XTI будет скопирована в дескрипторы 0, 1 и 2, а все прочие дескрипторы inetd будут закрыты (рис. 12.7 [24]). Демон inetd также прекратит слушать эту конечную точку XTI, не реагируя на запросы пользователей до тех пор, пока сервер (дочерний процесс по отношению к inetd) не завершит работу. Это поведение определяется атрибутом wait.</p>
      <p>Предположим, что эта программа была создана с помощью rpcgen. Тогда она сможет распознать конечную точку XTI, подключенную к стандартному потоку ввода, и инициализировать ее как конечную точку сервера RPC. Это осуществляется вызовом функций RPC svc_tli_create и svc_reg, которые в данной книге не рассматриваются. Вторая функция (вопреки названию) не регистрирует сервер в программе отображения портов — это делается лишь однажды, при запуске сервера. Функция svc_run прочитает пришедшую дейтаграмму и вызовет соответствующую процедуру сервера для обработки запроса клиента.</p>
      <p>В обычной ситуации серверы, запускаемые демоном inetd, обрабатывают один запрос клиента и завершают работу, после чего inetd переходит в режим ожидания следующего запроса. Для оптимизации работы системы серверы RPC, созданные rpcgen, ждут поступления нового запроса от клиента в течение некоторого времени (по умолчанию 2 минуты). В этом случае дейтаграмма обрабатывается уже запущенным сервером. Это исключает накладные расходы на вызов fork и exec при поступлении нескольких клиентских запросов подряд. По истечении периода ожидания сервер завершает работу, а демону inetd отсылается сигнал SIGCHLD, после чего он переходит в режим ожидания дейтаграмм по XTI.</p>
     </section>
    </section>
    <section>
     <title>
      <p>16.4. Аутентификация</p>
     </title>
     <p>По умолчанию в запросе RPC не содержится информации о клиенте. Сервер отвечает на запрос клиента, не беспокоясь о том, что это за клиент. Это называется нулевой аутентификацией, или AUTH_NONE.</p>
     <p>Следующий уровень проверки подлинности называется аутентификацией Unix, или AUTH_SYS. Клиент должен сообщить библиотеке RPC времени выполнения информацию о себе (имя узла, действующий идентификатор пользователя, действующий идентификатор группы, дополнительные идентификаторы группы) для включения в каждый запрос. Изменим программу из листинга 16.2 таким образом, чтобы она включала возможность осуществления аутентификации Unix. В листинге 16.7 приведен новый текст программы-клиента.</p>
     <subtitle>Листинг 16.7. Клиент, осуществляющий аутентификацию unix</subtitle>
     <p><code>//sunrpc/square4/client.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #include "square.h"</code></p>
     <empty-line/>
     <p><code>3  int</code></p>
     <p><code>4  main(int argc, char **argv)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   CLIENT *cl;</code></p>
     <p><code>7   square_in in;</code></p>
     <p><code>8   square_out out;</code></p>
     <p><code>9   if (argc != 3)</code></p>
     <p><code>10   err_quit("usage: client &lt;hostname&gt; &lt;integer-value&gt;");</code></p>
     <p><code>11  cl = Clnt_create(argv[1], SQUARE_PROG, SQUARE_VERS, "tcp");</code></p>
     <p><code>12  auth_destroy(cl-&gt;cl_auth);</code></p>
     <p><code>13  cl-&gt;cl_auth = authsys_create_default();</code></p>
     <p><code>14  in.arg1 = atol(argv[2]);</code></p>
     <p><code>15  if (squareproc_2(&amp;in, &amp;out, cl) != RPC_SUCCESS)</code></p>
     <p><code>16   err_quit("%s", clnt_sperror(cl, argv[1]));</code></p>
     <p><code>17  printf("result: %ld\n", out.resl);</code></p>
     <p><code>18  exit(0);</code></p>
     <p><code>19 }</code></p>
     <p>12-13 Эти строки были добавлены в данной версии программы. Сначала мы вызываем auth_destroy для удаления предыдущей аутентификационной информации, связанной с данным дескриптором клиента (то есть дескриптор нулевой аутентификации, создаваемый по умолчанию). Затем вызов authsys_create_default создает соответствующую аутентификационную структуру Unix и мы сохраняем ее в поле cl_auth структуры CLIENT. Оставшаяся часть клиента не претерпела изменений по сравнению с листингом 16.5.</p>
     <p>В листинге 16.8 приведен текст процедуры сервера, измененный по сравнению с листингом 16.6. Мы не приводим текст процедуры square_prog_2_freeresult, которая не меняется.</p>
     <subtitle>Листинг 16.8. Процедура сервера, запрашивающая аутентификацию Unix</subtitle>
     <p><code>//sunrpc/square4/server.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #include "square.h"</code></p>
     <empty-line/>
     <p><code>3  bool_t</code></p>
     <p><code>4  squareproc_2_svc(square_in *inp, square_out *outp, struct svc_req *rqstp)</code></p>
     <p><code><emphasis>5</emphasis>  {</code></p>
     <p><code>6   printf("thread %Id started, arg = %ld, auth = %d\n",</code></p>
     <p><code>7   pr_thread_id(NULL), inp-&gt;arg1, rqstp-&gt;rq_cred.oa_flavor);</code></p>
     <p><code>8   if (rqstp-&gt;rq_cred.oa_flavor == AUTH_SYS) {</code></p>
     <p><code>9    struct authsys_parms *au;</code></p>
     <p><code>10   au = (struct authsys_parms *)rqstp-&gt;rq_clntcred;</code></p>
     <p><code>11   printf("AUTH_SYS: host %s, uid %ld, gid %ld\n",</code></p>
     <p><code>12    au-&gt;aup_machname, (long) au-&gt;aup_uid, (long) au-&gt;aup_gid);</code></p>
     <p><code>13  }</code></p>
     <p><code>14  sleep(5);</code></p>
     <p><code>15  outp-&gt;res1 = inp-&gt;arg1 * inp-&gt;arg1;</code></p>
     <p><code>16  printf("thread %ld done\n", pr_thread_id(NULL));</code></p>
     <p><code>17  return(TRUE);</code></p>
     <p><code>18 }</code></p>
     <p>6-8 Теперь мы используем указатель на структуру svc_req, которая всегда передается в качестве одного из аргументов процедуры сервера:</p>
     <p><code>struct svc_req {</code></p>
     <p><code> u_long rq_prog; /* номер программы */</code></p>
     <p><code> u_long rq_vers; /* номер версии */</code></p>
     <p><code> u_long rq_proc; /* номер процедуры */</code></p>
     <p><code> struct opaque_auth rq_cred:/* данные о клиенте */</code></p>
     <p><code> caddr_t rq_clntcred; /* готовые данные (только для чтения) */</code></p>
     <p><code> SVCXPRT *rq_xprt; /* транспортный дескриптор */</code></p>
     <p><code>};</code></p>
     <empty-line/>
     <p><code>struct opaque_auth {</code></p>
     <p><code> enum_t oa_flavor; /* flavor: константа AUTH_xxx */</code></p>
     <p><code> caddr_t oa_base; /* адрес дополнительной аутентификационной информации */</code></p>
     <p><code> u_int oa_length; /* не должно превосходить MAX_AUTH_BYTES */</code></p>
     <p><code>};</code></p>
     <p>Поле rq_cred содержит неформатированную информацию о клиенте, а его поле oa_flavor содержит целое число, определяющее тип аутентификации. Термин «неформатированная» означает, что библиотека не обработала информацию, на которую указывает oa_base. Но если тип идентификации относится к одному из поддерживаемых библиотекой, то в готовой информации о клиенте, на которую указывает rq_clntcred, содержится некоторая структура, соответствующая данному типу аутентификации. Программа выводит тип аутентификации и прове-9_12 ряет, соответствует ли он AUTH_SYS.</p>
     <p>Для аутентификации Unix указатель на готовую информацию (rq_clntcred) указывает на структуру authsys_parms, содержащую информацию о клиенте:</p>
     <p><code>struct authsys_parms {</code></p>
     <p><code> u_long aup_time; /* время создания информации */</code></p>
     <p><code> char *aup_machname; /* имя узла клиента */</code></p>
     <p><code> uid_t aup_uid; /* действующий идентификатор пользователя */</code></p>
     <p><code> gid_t aup_gid; /* действующий идентификатор группы */</code></p>
     <p><code> u_int aup_len; /* количество элементов в aup_gids[] */</code></p>
     <p><code> gid_t *aup_gidsl; /* дополнительные идентификаторы группы */</code></p>
     <p><code>};</code></p>
     <p>Мы получаем указатель на эту структуру и выводим имя узла клиента, его EUID и EGID.</p>
     <p>Запустив сервер и один экземпляр клиента, посмотрим на выводимый сервером текст:</p>
     <p><code>solaris % <strong>server</strong></code></p>
     <p><code>thread 1 started, arg = 44, auth = 1</code></p>
     <p><code>AUTH_SYS: host solaris.kohala.com, uid 765, gid 870</code></p>
     <p><code>thread 1 done</code></p>
     <p>Аутентификация Unix используется редко, поскольку ее легко обойти. Мы можем легко построить собственные пакеты RPC, содержащие аутентификационную информацию в формате Unix, присвоив идентификатору пользователя и группы произвольные значения, и отправить их на сервер. Сервер никак не может проверить, те ли мы, кем представляемся.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Вообще-то NFS по умолчанию использует именно аутентификацию Unix, но запросы обычно отсылаются ядром клиента NFS через зарезервированный порт (раздел 2.7 [24]). Некоторые серверы NFS настроены так, чтобы отвечать только на запросы, поступающие по зарезервированному порту. Если вы доверяете узлу клиента подключение к своим файловым системам, вы доверяете и его ядру в том, что оно правильно предоставляет информацию о своих пользователях. Если сервер не требует подключения по резервному порту, хакеры могут написать свою собственную программу, которая будет посылать запросы серверу NFS с произвольным идентификатором пользователя. Даже если сервер требует подключения по зарезервированному порту, а у вас есть своя система, в которой вы обладаете правами привилегированного пользователя, и вы можете подключиться к сети, вы сможете отправлять свои собственные запросы с произвольным содержимым на сервер NFS. </p>
     </cite>
     <p>Пакеты RPC — как запросы, так и ответы — содержат два поля, относящиеся к аутентификации: данные о пользователе и проверочную информацию (credentials, verifier). Примером такой структуры является документ с фотографией (паспорт, права и т. п.). Данные о пользователе соответствуют написанному в паспорте тексту (имя, адрес, дата рождения и т. п.), а проверочная информация — это фотография. Существуют разные формы проверочной информации: фотография в данном случае полезнее, чем, например, рост, вес и пол. Если документ не содержит проверочной информации (как, например, читательский билет в библиотеке), любой может воспользоваться им и сказать, что он его владелец.</p>
     <p>В случае нулевой аутентификации пакеты не содержат ни данных о пользователе, ни проверочной информации. В режиме аутентификации Unix данные о пользователе содержат имя узла, идентификаторы пользователя и группы, но поле проверочной информации пусто. Поддерживаются, однако, и другие формы аутентификации, для которых эти два поля содержат другую информацию.</p>
     <p>&#9632; AUTH_SHORT — альтернативная форма аутентификации Unix, отправляемая сервером в поле verifier в ответ на запрос клиента. Она содержит меньшее количество информации, чем в режиме аутентификации Unix, и клиент может отсылать ее серверу при последующих запросах. Используется для уменьшения количества передаваемой по сети информации.</p>
     <p>&#9632; AUTH_DES — аббревиатура DES означает Data Encryption Standard (стандарт шифрования данных). Эта форма аутентификации основана на использовании криптографии с секретным и открытым ключом. Эта схема также называется защищенным RPC (secure RPC), а если она используется в качестве основы для построения NFS, то такая NFS также называется защищенной.</p>
     <p>&#9632; AUTH_KERB — эта схема основана на стандарте Kerberos института MIT.</p>
     <p>В главе 19 книги [5] подробно рассказывается о двух последних формах аутентификации, включая их настройку и использование.</p>
    </section>
    <section>
     <title>
      <p>16.5. Тайм-аут и повторная передача</p>
     </title>
     <section>
      <p>Рассмотрим стратегию обработки тайм-аутов и повторной передачи, используемую в средствах Sun RPC. Существуют два значения тайм-аутов:</p>
      <p>1. Общий тайм-аут определяет время ожидания ответа сервера клиентом. Это значение используется протоколами TCP и UDP.</p>
      <p>2. Тайм-аут повтора используется только UDP и определяет время ожидания между повторами запросов клиента, если ответ от сервера не приходит.</p>
      <p>Для протокола TCP необходимость во введении тайм-аута повтора отсутствует, поскольку этот протокол является надежным. Если сервер Не получает запроса от клиента, время ожидания по протоколу TCP со стороны клиента закончится и клиент повторит передачу. Когда сервер получает запрос клиента, он уведомляет об этом последний. Если уведомление о получении будет утрачено по пути к клиенту, тот должен будет еще раз переслать запрос. Повторные запросы сбрасываются сервером, но уведомления об их получении отсылаются клиенту. В надежных протоколах правильность доставки (время ожидания, повторная передача, обработка лишних копий данных и лишних уведомлений) обеспечивается на транспортном уровне и не входит в задачи библиотеки RPC. Один запрос, отправленный клиентом на уровне RPC, будет получен сервером ровно в одном экземпляре на уровне RPC. В противном случае клиент RPC получит сообщение о невозможности связаться с сервером. При этом совершенно не важно, что происходит на сетевом и транспортном уровнях.</p>
      <p>После создания дескриптора клиента можно использовать функцию clnt_control для получения информации и изменения свойств клиента. Эта функция работает аналогично fcntl для дескрипторов файлов или getsockopt и setsockopt для сокетов:</p>
      <p><code>#include &lt;rpc/rpc.h&gt;</code></p>
      <p><code>bool_t clnt_control(CLIENT <emphasis>*cl,</emphasis> unsigned int <emphasis>request,</emphasis> char <emphasis>*ptr</emphasis>);</code></p>
      <p><code>/* Возвращает TRUE в случае успешного завершения, FALSE – в случае ошибки */</code></p>
      <p>Здесь <emphasis>cl</emphasis> представляет собой дескриптор клиента, а на что указывает <emphasis>ptr —</emphasis> зависит от значения <emphasis>request.</emphasis></p>
      <p>Изменим программу-клиент из листинга 16.2, добавив в нее вызов данной функции, и выведем значения тайм-аутов. В листинге 16.9 приведен текст новой программы-клиента.</p>
      <subtitle>Листинг 16.9. Клиент, получающий и печатающий значения времени ожидания RPC</subtitle>
      <p><code>//sunrpc/square5/client.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "square.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   CLIENT *cl;</code></p>
      <p><code>7   square_in in;</code></p>
      <p><code>8   square_out *outp;</code></p>
      <p><code>9   struct timeval tv;</code></p>
      <p><code>10  if (argc != 4)</code></p>
      <p><code>11   err_quit("usage: client &lt;hostname&gt; &lt;integer-value&gt; &lt;protocol&gt;");</code></p>
      <p><code>12  cl = Clnt_create(argv[1], SQUARE_PROG, SQUARE_VERS, argv[3]);</code></p>
      <p><code>13  Clnt_control(cl, CLGET_TIMEOUT, (char*)&amp;tv);</code></p>
      <p><code>14  printf("timeout = %ld sec, %ld usec\n", tv.tv_sec, tv.tv_usec);</code></p>
      <p><code>15  if (clnt_control(cl, CLGET_RETRY_TIMEOUT, (char *) &amp;tv) == TRUE)</code></p>
      <p><code>16   printf("retry timeout = %ld sec, %ld usec\n", tv.tv_sec, tv.tv_usec);</code></p>
      <p><code>17  in.arg1 = atol(argv[2]);</code></p>
      <p><code>18  if ((outp = squareproc_1(&amp;in, cl)) == NULL)</code></p>
      <p><code>19   err_quit("%s", clnt_sperror(cl, argv[1]));</code></p>
      <p><code>20  printf(result: %ld\n", outp-&gt;res1);</code></p>
      <p><code>21  exit(0);</code></p>
      <p><code>22 }</code></p>
      <subtitle>Используемый протокол является аргументом командной строки</subtitle>
      <p>10-12 Теперь протокол, являющийся последним аргументом clnt_create, указывается в качестве нового параметра командной строки.</p>
      <subtitle>Получение значения общего тайм-аута</subtitle>
      <p>13-14 Первым аргументом clnt_control является дескриптор клиента, вторым — тип запроса, а третьим — указатель на буфер. Наш первый запрос имеет значение CLGET_TIMEOUT; при этом возвращается значение общего тайм-аута в структуре timeval, адрес которой передается третьим аргументом. Этот запрос корректен для всех протоколов.</p>
      <subtitle>Попытка получения тайм-аута повтора</subtitle>
      <p>15-16 Следующий запрос имеет значение CLGET_RETRY_TIMEOUT. При этом должно возвращаться значение тайм-аута повтора, но этот запрос корректен только для протокола UDP. Следовательно, если функция возвращает значение FALSE, мы ничего не печатаем.</p>
      <p>Изменим также и программу-сервер, добавив в нее ожидание продолжительностью 1000 секунд вместо 5, чтобы гарантировать получение тайм-аута по запросу клиента. Запустим сервер на узле bsdi, а клиент запустим дважды, один раз указав в качестве протокола TCP, а другой — UDP. Результат будет не таким, как мы ожидали:</p>
      <p><code>solaris % <strong>date ; client bsdi 44 tcp ; date</strong></code></p>
      <p><code>Wed Apr 22 14:46:57 MST 1998</code></p>
      <p><code>timeout = 30 sec, 0 usec       <emphasis>тайм-аут 30 секунд</emphasis></code></p>
      <p><code>bsdi: RPC: Timed out</code></p>
      <p><code>Wed Apr 22 14:47:22 MST 1998   <emphasis>но прошло только 25 секунд</emphasis></code></p>
      <p><code>solaris % <strong>date ; client bsdi 55 udp ; date</strong></code></p>
      <p><code>Wed Apr 22 14:48:05 MST 1998</code></p>
      <p><code>timeout = –1 sec, –1 usec      <emphasis>ерунда какая-то</emphasis></code></p>
      <p><code>retry timeout = 15 sec, 0 usec <emphasis>это значение кажется правильным</emphasis></code></p>
      <p><code>bsdi: RPC: Timed out</code></p>
      <p><code>Wed Apr 22 14:48:31 MST 1998   <emphasis>около 25 секунд спустя</emphasis></code></p>
      <p>В случае с протоколом TCP значение тайм-аута, возвращенное clnt_control, было 30 секунд, но библиотека возвратила ошибку через 25 секунд. Для протокола UDP было получено значение общего тайм-аута –1.</p>
      <p>Чтобы понять, что тут происходит, изучим текст заглушки клиента — функции squareproc_1 в файле square_clnt.c, созданном rpcgen. Эта функция вызывает библиотечную функцию с именем clnt_call, причем последним аргументом является структура типа timeval с именем TIMEOUT, объявляемая в этом файле, и инициализируется она значением 25 секунд. Этот аргумент clnt_call отменяет значение общего тайм-аута в 30 секунд для TCP и –1 для UDP. Он используется всегда, если клиент не устанавливает общий тайм-аут явно вызовом clnt_control с запросом CLSET_TIMEOUT. Если мы хотим изменить значение общего тайм-аута, следует вызывать clnt_control, а не изменять содержимое заглушки клиента. </p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Единственный способ проверить значение тайм-аута повтора для протокола UDP заключается в просмотре пакетов с помощью tcpdump. При этом можно увидеть, что первая дейтаграмма отправляется сразу после запуска клиента, а следующая — примерно 15 секунд спустя.</p>
      </cite>
     </section>
     <section>
      <title>
       <p>Управление соединением по TCP</p>
      </title>
      <p>Если мы будем наблюдать с помощью tcpdump за работой клиента и сервера из предыдущего примера, связывающихся по протоколу TCP, мы увидим, что сначала происходит установка соединения (трехэтапное рукопожатие TCP), затем отправляется запрос клиента и сервер отсылает уведомление о приеме этого запроса. Через 25 секунд после этого клиент отсылает серверу FIN, что вызвано завершением работы клиента, после чего следуют оставшиеся три этапа завершения соединения по TCP. В разделе 2.5 [24] эти этапы описаны подробно.</p>
      <p>Мы хотим показать, что Sun RPC использует соединение по TCP следующим образом: новое соединение по TCP устанавливается при вызове clnt_create и оно используется для всех вызовов процедур, связанных с указанной программой и версией. Соединение по TCP завершается явно вызовом clnt_destroy или неявно по завершении процесса клиента:</p>
      <p><code>#include &lt;rpc/rpc.h&gt;</code></p>
      <p><code>void clnt_destroy(CLIENT <emphasis>*cl</emphasis>);</code></p>
      <p>Начнем с клиента из листинга 16.2 и изменим его, добавив второй вызов процедуры сервера, вызовы clnt_destroy и pause. В листинге 16.10 приведен текст новой программы-клиента.</p>
      <subtitle>Листинг 16.10. Клиент для изучения свойств соединения по TCP</subtitle>
      <p><code>//sunrpc/square9/client.c</code></p>
      <p><code>1  #include "unpipc.h" /* наш заголовочный файл*/</code></p>
      <p><code>2  #include "square.h" /* создается rpcgen */</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   CLIENT, *cl;</code></p>
      <p><code>7   square_in in;</code></p>
      <p><code>8   square_out *outp;</code></p>
      <p><code>9   if (argc != 3)</code></p>
      <p><code>10   err_quit("usage: client &lt;hostname&gt; &lt;integer-value&gt;");</code></p>
      <p><code>11  cl = Clnt_create(argv[1], SQUARE_PROG, SQUARE_VERS, "tcp");</code></p>
      <p><code>12  in.arg1 = atol(argv[2]);</code></p>
      <p><code>13  if ((outp = squareproc_1(&amp;in, cl)) == NULL)</code></p>
      <p><code>14   err_quit("%s", clnt_sperror(c1, argv[1]));</code></p>
      <p><code>15  printf("result: %ld\n", outp-&gt;res1);</code></p>
      <p><code>16  in.arg1 *= 2;</code></p>
      <p><code>17  if ((outp = squareproc_1(&amp;in, cl)) == NULL)</code></p>
      <p><code>18   err_quit("%s", clnt_sperror(cl, argv[1]));</code></p>
      <p><code>19  printf("result: %ld\n", outp-&gt;res1);</code></p>
      <p><code>20  clnt_destroy(cl);</code></p>
      <p><code>21  pause();</code></p>
      <p><code>22  exit(0);</code></p>
      <p><code>23 }</code></p>
      <p>После запуска получим ожидаемый результат:</p>
      <p><code>solaris % <strong>client kalae 5</strong></code></p>
      <p><code>result: 25</code></p>
      <p><code>result: 100</code></p>
      <p><code><emphasis>программа в состоянии ожидания, пока мы не завершим ее вручную</emphasis></code></p>
      <p>Однако проверить наши предыдущие утверждения можно лишь с помощью результатов работы программы tcpdump. Она показывает, что создается одно соединение по TCP (вызовом clnt_create) и оно используется для обоих запросов клиента. Соединение завершается вызовом clnt_destroy, хотя клиент при этом и не завершает свою работу.</p>
     </section>
     <section>
      <title>
       <p>Идентификатор транзакций</p>
      </title>
      <p>Другая часть стратегии тайм-аутов и повторных передач заключается в использовании идентификаторов транзакций (transaction ID или XID) для распознавания запросов клиента и ответов сервера. Когда клиент вызывает функцию RPC, библиотека присваивает этому вызову 32-разрядный целочисленный номер и это значение отсылается в запросе RPC. Сервер должен добавить к своему ответу этот номер. При повторной отсылке запроса идентификатор не меняется. Служит он двум целям:</p>
      <p>1. Клиент проверяет, что XID ответа совпадает с XID запроса. Если совпадения нет, ответ игнорируется. Если используется протокол TCP, у клиента практически нет шансов получить ответ с неправильным идентификатором, но при использовании протокола UDP поверх плохой сети вероятность получения неправильного XID достаточно высока.</p>
      <p>2. Серверу разрешается помещать отсылаемые ответы в кэш, и для проверки идентичности ответов используется, в частности, именно XID. Об этом мы вскоре расскажем.</p>
      <p>Пакет TI-RPC использует определенный алгоритм вычисления XID для нового запроса. Алгоритм этот описан ниже. Значок ^ означает побитовую операцию XOR (исключающее ИЛИ):</p>
      <p><code>struct timeval now;</code></p>
      <p><code>gettimeofday(&amp;now, NULL);</code></p>
      <p><code>xid = getpid() ^ now.tv_sec ^ now.tv_usec;</code></p>
     </section>
     <section>
      <title>
       <p>Кэш повторных ответов</p>
      </title>
      <p>Для включения поддержки кэша повторных ответов в библиотеке RPC сервер должен вызвать функцию svc_dg_enablecache. После включения кэша выключить его нельзя, можно только запустить процесс заново: </p>
      <p><code>#include &lt;rpc/rpc.h&gt;</code></p>
      <p><code>int svc_dg_enablecache(SVCXPRT <emphasis>*xprt,</emphasis> unsigned long <emphasis>size</emphasis>);</code></p>
      <p><code>/* Возвращает 1 в случае успешного завершения. 0 – в случае ошибки */</code></p>
      <p>Здесь <emphasis>xprt</emphasis> представляет собой транспортный дескриптор, являющийся полем структуры svc_req (раздел 16.4). Адрес этой структуры является аргументом процедуры сервера. Размер определяет количество записей в выделяемом кэше.</p>
      <p>Итак, эта функция включает поддержку кэширования всех отсылаемых ответов в очереди размером <emphasis>size</emphasis> записей. Каждый ответ однозначно определяется следующими параметрами:</p>
      <p>&#9632; номером программы;</p>
      <p>&#9632; номером версии;</p>
      <p>&#9632; номером процедуры;</p>
      <p>&#9632; XID;</p>
      <p>&#9632; адресом клиента (IP-адрес + порт UDP).</p>
      <p>При получении запроса клиента библиотека RPC ищет в кэше ответ на такой запрос. В случае его наличия ответ отсылается клиенту без повторного вызова процедуры сервера.</p>
      <p>Цель использования кэша повторных ответов состоит в том, чтобы не нужно было вызывать процедуру сервера несколько раз при получении нескольких копий запроса клиента. Это может быть нужно в случае, если процедура неидемпотентна. Повторный запрос может быть получен из-за того, что ответ был утерян или у клиента время ожидания меньше, чем время передачи ответа по сети. Обратите внимание, что этот кэш действует только для протоколов, работающих с дейтаграммами (таких, как UDP), поскольку при использовании TCP повторный запрос никогда не может быть получен приложением — он будет обработан TCP (см. упражнение 16.6).</p>
     </section>
    </section>
    <section>
     <title>
      <p>16.6. Семантика вызовов</p>
     </title>
     <p>В листинге 15.24 мы привели пример клиента интерфейса дверей, повторно отсылавшего запрос на сервер при прерывании вызова door_call перехватываемым сигналом. Затем мы показали, что при этом процедура сервера вызывается дважды, а не однократно. Потом мы разделили процедуры сервера на две группы: идемпотентные, которые могут быть вызваны произвольное количество раз без возникновения ошибок, и неидемпотентные, наподобие вычитания определенной суммы из банковского счета.</p>
     <p>Вызовы процедур могут быть разбиты на три группы:</p>
     <p>1. «Ровно один раз» означает, что процедура была выполнена только один раз. Такого трудно достичь ввиду ненулевой вероятности сбоев в работе сервера.</p>
     <p>2. «Не более одного раза» означает, что процедура вовсе не была выполнена или что она была выполнена один раз. Если вызвавшему процессу возвращается результат, мы знаем, что процедура была выполнена. Если процессу возвращается сообщение об ошибке, мы не знаем, была ли процедура выполнена хотя бы один раз или не была выполнена вовсе. </p>
     <p>3. «По крайней мере один раз» означает, что процедура была выполнена один раз, а возможно, и больше. Это не вызывает проблем для идемпотентных процедур — клиент продолжает передавать запросы до тех пор, пока не получит правильный ответ. Однако если клиент отправит несколько запросов, существует вероятность, что процедура будет выполнена больше одного раза.</p>
     <p>При возвращении из локальной процедуры мы можем быть уверены, что она была выполнена ровно один раз. Однако если процесс завершает работу после вызова процедуры, мы не знаем, успела она выполниться или нет. Для удаленных вызовов процедур возможно несколько ситуаций.</p>
     <p>&#9632; Если используется протокол TCP и получен ответ, мы можем быть уверены, что удаленная процедура была вызвана ровно один раз. Однако если ответ не был получен (сервер вышел из строя), мы уже не можем сказать, была процедура выполнена или нет. Обеспечение семантики «ровно один раз» при учете возможности досрочного завершения работы сервера и неполадок в сети требует системы обработки транзакций, что лежит за границами возможностей RPC.</p>
     <p>&#9632; Если используется UDP без серверного кэша и был получен ответ, мы можем быть уверены, что процедура была вызвана по крайней мере один раз, но возможно, и несколько.</p>
     <p>&#9632; Если используется UDP с серверным кэшем и был получен ответ, мы можем быть уверены, что процедура была вызвана ровно один раз. Однако если ответ не был получен, мы оказывается в ситуации «не более одного раза» аналогично сценарию с TCP.</p>
     <p>&#9632; Если вы стоите перед выбором:</p>
     <p> &#9633; TCP,</p>
     <p> &#9633; UDP с кэшем повторных ответов,</p>
     <p> &#9633; UDP без кэша повторных ответов —</p>
     <p>мы можем порекомендовать следующее: </p>
     <p> &#9633; всегда используйте TCP, если только для приложения не важны накладные расходы на обеспечение надежности;</p>
     <p> &#9633; используйте систему обработки транзакций для неидемпотентных процедур, корректное выполнение которых важно (работа с банковскими счетами, бронирование авиабилетов и т. п.);</p>
     <p> &#9633; для неидемпотентных процедур использование TCP предпочтительно по сравнению с UDP и кэшем, поскольку TCP был изначально ориентирован на надежность, а добавление кэша к приложению, использующему UDP, вряд ли даст то же самое, что и использование TCP (см., например, раздел 20.5 [24]);</p>
     <p> &#9633; для идемпотентных процедур можно использовать UDP без кэша;</p>
     <p> &#9633; для неидемпотентных процедур использование UDP без кэша опасно.</p>
     <p>В следующем разделе будут рассмотрены дополнительные преимущества использования TCP. </p>
    </section>
    <section>
     <title>
      <p>16.7. Досрочное завершение сервера или клиента</p>
     </title>
     <section>
      <p>Рассмотрим, что произойдет в случае досрочного завершения клиента или сервера при использовании транспортного протокола TCP. Поскольку протокол UDP не подразумевает установку соединения, при завершении процесса его собеседнику не отсылается никаких сообщений. При завершении работы одного из процессов второй дождется тайм-аута, после чего, возможно, повторно отошлет запрос и наконец прекратит попытки, выдав сообщение об ошибке, как показывалось в предыдущем разделе. При завершении работы процесса, установившего соединение по TCP, это соединение завершается отправкой пакета FIN [24, с. 36-37], и мы хотим узнать, что делает библиотека RPC при получении этого пакета.</p>
     </section>
     <section>
      <title>
       <p>Досрочное завершение сервера</p>
      </title>
      <p>Завершим работу сервера досрочно, в процессе обработки запроса клиента. Единственное изменение в программе-клиенте будет заключаться в удалении аргумента tcp из вызова clnt_call в листинге 16.2 и включении протокола в набор аргументов командной строки, как в листинге 16.9. В процедуру сервера мы добавим вызов abort. Это приведет к завершению работы процесса-сервера и отправке пакета FIN клиенту, что мы можем проверить с помощью tcpdump.</p>
      <p>Запустим в системе Solaris клиент для сервера, работающего под BSD/OS:</p>
      <p><code>solaris %<strong> client bsdi 22 tcp</strong></code></p>
      <p><code>bsdi: RPC: Unable to receive; An event requires attention</code></p>
      <p>В момент получения клиентом пакета FIN библиотека RPC находилась в состоянии ожидания ответа сервера. Она получила неожиданный ответ и вернула ошибку в вызове squareproc_1. Ошибка (RPC_CANTRECV) сохраняется библиотекой в дескрипторе клиента, и вызов clnt_sperror (из функции-обертки Clnt_create) при этом печатает сообщение Unable to receive. Оставшаяся часть сообщения об ошибке (An event requires attention) соответствует ошибке XTI, сохраненной библиотекой, которая также выводится clnt_sperror. Вызов удаленной процедуры может вернуть одну из примерно 30 различных ошибок RPC_xxx. Все они перечислены в заголовочном файле &lt;rpc/clnt_stat.h&gt;.</p>
      <p>Если мы поменяем клиент и сервер местами, мы увидим то же сообщение об ошибке, возвращаемое библиотекой RPC (RPC_CANTRECV), но при этом будет выведено дополнительное сообщение:</p>
      <p><code>bsdi % <strong>client solaris 11 tcp</strong></code></p>
      <p><code>solaris: RPC: Unable to receive; errno = Connection reset by peer</code></p>
      <p>Сервер в Solaris не был скомпилирован как многопоточный, и когда мы вызвали abort, была завершена работа всего процесса. Если мы запустим многопоточный сервер и завершим работу только одного потока — того, который обслуживает данный запрос клиента, — все изменится. Чтобы продемонстрировать это, заменим вызов abort на pthread_exit, как мы сделали в пpoгрaммe из листинга 15.20. Запустим клиент в BSD/OS, а многопоточный сервер — в Solaris:</p>
      <p><code>bsdi % <strong>client solaris 33 tcp</strong></code></p>
      <p><code>solaris: RPC: Timed out</code> </p>
      <p>После завершения работы потока сервера соединение с клиентом по TCP не разрывается. Оно остается открытым, поэтому клиенту не отсылается пакет FIN. Клиент выходит по тайм-ауту. Мы увидели бы то же сообщение об ошибке, если бы узел, на котором находится сервер, прекратил работу после получения запроса от клиента и отправки уведомления.</p>
     </section>
     <section>
      <title>
       <p>Досрочное завершение клиента</p>
      </title>
      <p>Если клиент, использующий TCP, завершает работу в процессе выполнения процедуры RPC, серверу отправляется пакет FIN. Мы хотим узнать, как библиотека сервера реагирует на этот пакет и уведомляет об этом процедуру сервера. (В разделе 15.11 мы говорили, что поток сервера дверей отменяется при досрочном завершении клиента.)</p>
      <p>Чтобы сымитировать такую ситуацию, клиент вызывает alarm(3) непосредственно перед вызовом процедуры сервера, а процедура сервера вызывает slеер (6). Так же мы поступили и в нашем примере с дверьми в листингах 15.25 и 15.26. Поскольку клиент не перехватывает сигнал SIGALRM, процесс завершается ядром примерно за 3 секунды до отправки ответа серверу. Запустим клиент в BSD/OS, а сервер в Solaris:</p>
      <p><code>bsdi % <strong>client solaris 44 tcp</strong></code></p>
      <p><code>Alarm call</code></p>
      <p>Случилось то, что мы и ожидали. А вот на сервере не происходит ничего необычного. Процедура сервера благополучно заканчивает 6-секундную паузу и возвращается. Если мы взглянем на передаваемую по сети информацию с помощью tcpdump, мы увидим следующее:</p>
      <p>&#9632; при завершении работы клиента (через 3 секунды после запуска) серверу отправляется пакет FIN, и сервер высылает уведомление о его приеме. В TCP для этого используется термин half-close (наполовину закрытое соединение, раздел 18.5 [22]);</p>
      <p>&#9632; через 6 секунд после запуска клиента сервер отсылает ответ, который переправляется клиенту протоколом TCP. По соединению TCP можно отправлять данные после получения FIN, поскольку соединения TCP являются двусторонними, о чем говорится в книге [24, с. 130-132]. Клиент отвечает пакетом RST, поскольку он уже завершил работу. Он будет получен сервером при следующем открытии этого соединения, но это ни к чему не приведет.</p>
      <p>Подведем итоги.</p>
      <p>&#9632; При использовании UDP клиенты и серверы RPC не имеют возможности узнать о досрочном завершении одного из них. Они могут выходить по тайм-ауту, если ответ не приходит, но тип ошибки при этом определить не удастся: причина может быть в досрочном завершении процесса, сбое узла, недоступности сети и т. д.</p>
      <p>&#9632; Клиент RPC, использующий TCP, может узнать о возникших на сервере проблемах, поскольку при досрочном завершении сервера его конец соединения автоматически закрывается. Это, однако, не помогает, если сервер является многопоточным, поскольку такой сервер не закрывает соединение в случае отмены потока с процедурой сервера. Мы также не получаем информации в случае сбоя узла, поскольку при этом соединение TCP не закрывается. Во всех этих случаях следует использовать выход по тайм-ауту.</p>
     </section>
    </section>
    <section>
     <title>
      <p>16.8. XDR: представление внешних данных</p>
     </title>
     <section>
      <p>В предыдущей главе мы использовали двери для вызова процедуры одного процесса из другого процесса. При этом оба процесса выполнялись на одном узле, поэтому необходимости в преобразовании данных не возникало. Однако RPC используется для вызова процедур на разных узлах, которые могут иметь различный формат хранения данных. Прежде всего могут отличаться размеры фундаментальных типов (в некоторых системах long имеет длину 32 бита, а в других — 64). Кроме того, может отличаться порядок битов (big-endian и little-endian, о чем говорится в книге [24, с. 66-69 и 137-140]. Мы уже столкнулись с этой проблемой, когда обсуждали листинг 16.3. Сервер у нас работал на компьютере с little-endian х86, а клиент — на big-endian Sparc, но мы могли без проблем обмениваться данными (в нашем примере — одно длинное целое).</p>
      <p>Sun RPC использует стандарт XDR (External Data Representation — представление внешних данных) для описания и кодирования данных (RFC 1832 [19]). XDR является одновременно языком описания данных и набором правил для их кодирования. В XDR используется скрытая типизация (implicit typing), то есть отправитель и получатель должны заранее знать тип и порядок данных. Например, два 32-разрядных целых, одно число с плавающей точкой и одинарной точностью и строка символов.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Приведем сравнение из мира OSI. Для описания данных обычно используется нотация ASN.1 (Abstract Syntax Notation one), а для кодирования — BER (Basic Encoding Rules). Эта схема также использует явную типизацию, то есть перед каждым значением указывается его тип. В нашем примере поток байтов содержал бы: спецификатор типа целого, целое, спецификатор типа целого, целое, спецификатор типа single, число с плавающей точкой и одинарной точностью, спецификатор типа строки символов, строку символов.</p>
      </cite>
      <p>Представление всех типов согласно XDR требует количества байтов, кратного четырем. Эти байты всегда передаются в порядке big-endian. Целые числа со знаком передаются в дополнительном коде, а числа с плавающей точкой передаются в формате IEEE. Поля переменной длины могут содержать до 3 байтов дополнения в конце, так чтобы подогнать начало следующего элемента до адреса, кратного четырем. Например, 5-символьная строка АSСII будет передана как 12 байтов:</p>
      <p>&#9632; 4-байтовое целое, содержащее значение 5;</p>
      <p>&#9632; 5-байтовая строка;</p>
      <p>&#9632; 3 байта со значением 0 (дополнение).</p>
      <p>При описании XDR и поддерживаемых типов данных следует уточнить три момента.</p>
      <p>1. Как объявляются переменные различных типов в файле спецификации RPC (файл с расширением .х)? В наших примерах пока что использовалось только длинное целое.</p>
      <p>2. В какой тип языка С преобразуется данный тип программой rpcgen при составлении заголовочного файла?</p>
      <p>3. Каков реальный формат передаваемых данных?</p>
      <p>Таблица 16.2 содержит ответы на первых два вопроса. Для составления этой таблицы мы создали файл спецификации RPC со всеми поддерживаемыми стандартом XDR типами. Этот файл был обработан rpcgen, после чего мы изучили получившийся заголовочный файл.</p>
      <empty-line/>
      <p>Таблица 16.2. Типы данных, поддерживаемые xdr и rpcgen </p>
      <table>
       <tr align="left">
        <th align="left" valign="top">№</th>
        <th align="left" valign="top">Файл спецификации RPC (.x)</th>
        <th align="left" valign="top">Заголовочный файл языка С (.h)</th>
       </tr>
       <tr align="left">
        <td align="left" valign="top">1</td>
        <td align="left" valign="top">const name = value</td>
        <td align="left" valign="top">#define name value</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">2</td>
        <td align="left" valign="top">typedef declaration;</td>
        <td align="left" valign="top">typedef declaration;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">3</td>
        <td align="left" valign="top">char var; short var; int var; long var; hyper var;</td>
        <td align="left" valign="top">char var; short var; int var; long var; longlong_t var;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">4</td>
        <td align="left" valign="top">unsigned char var; unsigned short var; unsigned int var; unsigned long var; unsigned hyper var;</td>
        <td align="left" valign="top">u_char var; u_short var; u_int var; u_long var; u_longlong_t var;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">5</td>
        <td align="left" valign="top">float var; double var; quadruple var;</td>
        <td align="left" valign="top">float var; double var; quadruple var;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">6</td>
        <td align="left" valign="top">bool var;</td>
        <td align="left" valign="top">bool_t var;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">7</td>
        <td align="left" valign="top">enum var {name = const, …}</td>
        <td align="left" valign="top">enum var {name = const, …}; typedef enum var var;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">8</td>
        <td align="left" valign="top">opaque var[n];</td>
        <td align="left" valign="top">char var[n];</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">9</td>
        <td align="left" valign="top">opaque var&lt;m&gt;;</td>
        <td align="left" valign="top">struct { u_int var_len; char *var_val; } val;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">10</td>
        <td align="left" valign="top">string var&lt;m&gt;</td>
        <td align="left" valign="top">char *var;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">11</td>
        <td align="left" valign="top">datatype var[n];</td>
        <td align="left" valign="top">datatype var[n];</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">12</td>
        <td align="left" valign="top">datatype var&lt;m&gt;</td>
        <td align="left" valign="top">struct { uint var_len; datatype *var_val; } var;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">13</td>
        <td align="left" valign="top">struct var {members … };</td>
        <td align="left" valign="top">struct var {members … }; typedef struct var var;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">14</td>
        <td align="left" valign="top">union var switch (int disc) { case discvalueA: armdeclA; case discvalueB: amrdeclB; … default: defaultdecl; };</td>
        <td align="left" valign="top">struct var { int disc; union { armdeclA; armdeclB; …  defaultdecl; } var_u; }; typedef struct var var;</td>
       </tr>
       <tr align="left">
        <td align="left" valign="top">15</td>
        <td align="left" valign="top">datatype *name;</td>
        <td align="left" valign="top">datatype *name;</td>
       </tr>
      </table>
      <p>Опишем содержимое таблицы более подробно.</p>
      <p>1. Декларация const преобразуется в #define.</p>
      <p>2.  Декларация typedef преобразуется в typedef.</p>
      <p>3. Пять целых типов со знаком. Передаются XDR как 32-разрядные значения (первые четыре типа), а последний — как 64-разрядное.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>64-разрядное целое поддерживается многими компиляторами С как формат long long int или просто long long. Многие, но не все компиляторы и операционные системы поддерживают такой формат. Поскольку в созданном заголовочном файле объявляются переменные типа longlong_t, в другом заголовочном файле должно содержаться следующее определение:</p>
       <p><code>typedef long long longlong_t;</code></p>
       <p>Длинное целое в XDR занимает 32 бита, но длинное целое языка С в 64-разрядных системах Unix может занимать и 64 бита (например, в модели LP64, описанной в [24, с. 27]). Имена формата XDR устарели лет на десять и не слишком соответствуют современным стандартам. Лучше, если бы они назывались как-нибудь вроде int8_t, int16_t и т. д.</p>
      </cite>
      <p>4. Пять целых типов без знака. Первые 4 передаются как 32-разрядные значения, а последнее — как 64-разрядное.</p>
      <p>5. Три типа данных с плавающей точкой. Первый передается как 32-разрядное значение, второй — как 64-разрядное, а третий — как 128-разрядное.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Четверная точность для чисел с плавающей точкой (quadruple precision) поддерживается в С для типов long double. He все компиляторы и операционные системы его воспринимают. Ваш компилятор может пропустить long double, но работать с этой переменной как с double. Поскольку в созданном заголовочном файле объявляются переменные типа quadruple, нужно создать другой заголовочный файл с объявлением</p>
       <p><code>typedef long double quadruple;</code></p>
       <p>В Solaris 2.6, например, нам пришлось бы включить строку</p>
       <p><code>%#include &lt;floatingpoint.h&gt;</code></p>
       <p>в начало файла спецификации RPC, потому что этот заголовочный файл содержит требуемое определение. Знак процента перед #include говорит программе rpcgen о необходимости поместить остаток строки непосредственно в создаваемый заголовочный файл.</p>
      </cite>
      <p>6. Тип boolean эквивалентен целому со знаком. Заголовки RPC также определяют константу TRUE равной 1, a FALSE равной 0.</p>
      <p>7. Перечисление (enumeration) эквивалентно целому со знаком и совпадает с типом данных enum в С. rpcgen также создает определение типа для данной переменной.</p>
      <p>8. Скрытые данные фиксированной длины передаются библиотекой как 8-разрядные значения без интерпретации.</p>
      <p>9. Скрытые данные переменной длины также представляют собой последовательность неинтерпретируемых данных, но количество реально передаваемых данных помещается в целочисленную переменную и посылается перед самими данными. При отправке данных такого типа (например, при заполнении списка аргументов перед вызовом RPC) следует указать длину, прежде чем делать вызов. При приеме данного типа данных следует выяснить значение длины, чтобы определить, сколько данных будет принято. </p>
      <p>10. Строка представляет собой последовательность ASCII-символов. В памяти строка хранится как обычная строка символов языка С, завершаемая нулем, но при передаче перед ней отправляется целое без знака, в которое помещается количество символов данной строки (без завершающего нуля). При отправке данных такого типа размер строки определяется библиотекой с помощью вызова strlen. При приеме данные такого типа помещаются в строку символов С, завершаемую нулем.</p>
      <p>11. Массив фиксированной длины любого типа передается как последовательность n элементов данного типа.</p>
      <p>12. Массив переменной длины любого типа передается как целое без знака, указывающее количество элементов, и последовательность элементов данного типа. Максимальное количество элементов в объявлении может быть опущено. Но если это количество указать при компиляции программы, библиотека будет проверять, не превосходит ли реальная длина указанного значения m.</p>
      <p>13. Структура передается как последовательность полей. rpcgen также создает определение типа для данного имени переменной (typedef).</p>
      <p>14. Размеченное объединение состоит из целочисленного дискриминанта и набора типов данных (ветвей), зависящих от значения дискриминанта. В табл. 16.2 мы показываем, что дискриминант должен быть типа int, но он может быть и unsigned int, и enum, и bool (все эти типы передаются как 32-разрядные целые). При передаче размеченного объединения передается 32-разрядное значение дискриминанта, за которым следует значение той ветви, которая ему соответствует. В ветви default часто объявляется тип void, что означает отсутствие передаваемой вслед за дискриминантом информации. Ниже мы продемонстрируем это на примере.</p>
      <p>15. Дополнительные данные представляют собой специальный тип объединения, описанный в примере из листинга 16.24. Объявление XDR выглядит как объявление указателя в языке С, и именно указатель объявляется в созданном заголовочном файле.</p>
      <p>На рис. 16.3 сведена информация о кодировании различных типов данных в XDR.</p>
      <image l:href="#Any2FbImgLoader239"/>
      <p>Рис. 16.3. Кодирование типов данных в XDR</p>
     </section>
     <section>
      <title>
       <p>Пример: использование XDR без RPC</p>
      </title>
      <p>Приведем пример использования XDR без RPC. Мы воспользуемся стандартом XDR для кодирования структуры данных в машинно-независимое представление, в котором они могут быть обработаны другими системами. Этот метод может использоваться для написания файлов или для отправки данных по сети в машинно-независимом формате. В листинге 16.11 приведен текст файла спецификации data .х, который на самом деле является файлом спецификации XDR, поскольку мы не объявляем никаких процедур RPC.</p>
      <cite>
       <p><strong>ПРИМЕЧАНИЕ</strong></p>
       <p>Суффикс имени файла (.х) происходит от термина «файл спецификации XDR». Спецификация RPC утверждает, что язык RPC (RPCL) идентичен XDR в части, относящейся к описанию данных. В RPCL была добавлена только возможность описания процедур.</p>
      </cite>
      <subtitle>Листинг 16.11. Файл спецификации XDR</subtitle>
      <p><code>//sunrpc/xdr1/data.x</code></p>
      <p><code>1  enum result_t {</code></p>
      <p><code>2   RESULT_INT = 1, RESULT_DOUBLE = 2</code></p>
      <p><code>3  };</code></p>
      <empty-line/>
      <p><code>4  union union_arg switch (result_t result) {</code></p>
      <p><code>5  case RESULT_INT:</code></p>
      <p><code>6   int intval;</code></p>
      <p><code>7  case RESULT_DOUBLE:</code></p>
      <p><code>8   double doubleval;</code></p>
      <p><code>9  default:</code></p>
      <p><code>10  void;</code></p>
      <p><code>11 };</code></p>
      <empty-line/>
      <p><code>12 struct data {</code></p>
      <p><code>13  short short_arg;</code></p>
      <p><code>14  long long_arg;</code></p>
      <p><code>15  string vstring_arg&lt;128&gt;; /* строка переменной длины */</code></p>
      <p><code>16  opaque fopaque_arg[3]; /* скрытые данные фиксированной длины */</code></p>
      <p><code>17  opaque vopaque_arg&lt;&gt;; /* скрытые данные переменной длины */</code></p>
      <p><code>18  short fshort_arg[4]; /* массив фиксированной длины */</code></p>
      <p><code>19  long vlong_arg&lt;&gt;; /* массив переменной длины */</code></p>
      <p><code>20  union_arg uarg;</code></p>
      <p><code>21 };</code></p>
      <subtitle>Объявление перечисления и размеченного объединения</subtitle>
      <p>1-11 Мы объявляем перечислимый тип с двумя значениями и размеченное объединение, использующее это перечисление в качестве дискриминанта. Если дискриминант имеет значение RESULT_INT, после значения дискриминанта передается целое число. Если дискриминант имеет значение RESULT_DOUBLE, за ним передается число с плавающей точкой двойной точности. В противном случае после дискриминанта не передается ничего. </p>
      <subtitle>Объявление структуры</subtitle>
      <p>12-21 Мы объявляем структуру, состоящую из различных типов, поддерживаемых XDR.</p>
      <p>Поскольку мы не объявляем процедур RPC, программа rpcgen не создаст заглушку клиента и заглушку сервера. Однако она создаст заголовочный файл data.h и файл data_xdr.с, содержащий функции XDR, обеспечивающие кодирование и декодирование данных, объявленных в файле data.х.</p>
      <p>В листинге 16.12 приведен получающийся в результате работы rpcgen заголовочный файл data.h. Содержимое этого файла выглядит так, как мы и предполагали (табл. 16.2).</p>
      <subtitle>Листинг 16.12. Заголовочный файл data.h, созданный rpcgen из файла data.x</subtitle>
      <p><code>//sunrpc/xdr1/data.h</code></p>
      <p><code>1  /*</code></p>
      <p><code>2   * Please do not edit this file. It was generated using rpcgen.</code></p>
      <p><code>3   */</code></p>
      <p><code>4  #ifndef _DATA_H_RPCGEN</code></p>
      <p><code>5  #define _DATA_H_RPCGEN</code></p>
      <empty-line/>
      <p><code>6  #include &lt;rpc/rpc.h&gt;</code></p>
      <empty-line/>
      <p><code>7  enum result_t {</code></p>
      <p><code>8   RESULT_INT = 1,</code></p>
      <p><code>9   RESULT_DOUBLE = 2</code></p>
      <p><code>10 };</code></p>
      <p><code>11 typedef enum result_t result_t;</code></p>
      <empty-line/>
      <p><code>12 struct union_arg {</code></p>
      <p><code>13  result_t result;</code></p>
      <p><code>14  union {</code></p>
      <p><code>15   int intVal;</code></p>
      <p><code>16   double doubleval;</code></p>
      <p><code>17  } union_arg_u;</code></p>
      <p><code>18 };</code></p>
      <p><code>19 typedef struct union_arg union_arg;</code></p>
      <empty-line/>
      <p><code>20 struct data {</code></p>
      <p><code>21  short short_arg;</code></p>
      <p><code>22  long long_arg;</code></p>
      <p><code>23  char *vstring_arg;</code></p>
      <p><code>24  char fopaque_arg[3];</code></p>
      <p><code>25  struct {</code></p>
      <p><code>26   u_int vopaque_arg_len;</code></p>
      <p><code>27   char *vopaque_arg_val;</code></p>
      <p><code>28  } vopaque_arg;</code></p>
      <p><code>29  short fshort_arg[4];</code></p>
      <p><code>30  struct {</code></p>
      <p><code>31   u_int vlong_arg_len;</code></p>
      <p><code>32   long *vlong_arg_val;</code></p>
      <p><code>33  } vlong_arg;</code></p>
      <p><code>34  union_arg uarg;</code></p>
      <p><code>35 };</code></p>
      <p><code>36 typedef struct data data:</code></p>
      <empty-line/>
      <p><code>37 /* 4the xdr functions */</code></p>
      <p><code>38 extern bool_t xdr_result_t(XDR *, result_t*);</code></p>
      <p><code>39 extern bool_t xdr_union_arg(XDR *, union_arg*);</code></p>
      <p><code>40 extern bool_t xdr_data(XDR *, data*);</code></p>
      <empty-line/>
      <p><code>41 #endif /* !_DATA_H_RPCGEN */</code></p>
      <p>В файле data_xdr.с объявляется функция xdr_data, вызываемая для кодирования и декодирования структуры data, которую мы определили. Суффикс имени функции _data соответствует имени нашей структуры из листинга 16.11. Первая программа, которую мы напишем, будет называться write.с. Она будет присваивать значения полям структуры data, вызывать xdr_data для кодирования всех полей в формат XDR и записывать результат в стандартный поток вывода.</p>
      <p>Эта программа приведена в листинге 16.13.</p>
      <subtitle>Листинг 16.13. Инициализация структуры и кодирование ее в XDR</subtitle>
      <p><code>//sunrpc/xdr1/write.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "data.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   XDR xhandle;</code></p>
      <p><code>7   data out; /* структура, с которой мы работаем */</code></p>
      <p><code>8   char *buff; /* результат кодирования в XOR */</code></p>
      <p><code>9   char vop[2];</code></p>
      <p><code>10  long vlong[3];</code></p>
      <p><code>11  u_int size;</code></p>
      <p><code>12  out.short_arg = 1;</code></p>
      <p><code>13  out.long_arg = 2;</code></p>
      <p><code>14  out.vstring_arg = "hello, world"; /* присваиваем значение указателю */</code></p>
      <p><code>15  out.fopaque_arg[0] = 99; /* скрытые данные фиксированной длины */</code></p>
      <p><code>16  out.fopaque_arg[1] = 88;</code></p>
      <p><code>17  out.fopaque_arg[2] = 77;</code></p>
      <p><code>18  vop[0] = 33; /* скрытые данные переменной длины */</code></p>
      <p><code>19  vop[1] = 44;</code></p>
      <p><code>20  out.vopaque_arg.vopaque_arg_len = 2;</code></p>
      <p><code>21  out.vopaque_arg.vopaque_arg_val = vop;</code></p>
      <p><code>22  out.fshort_arg[0] = 9999; /* массив фиксированной длины */</code></p>
      <p><code>23  out.fshort_arg[1] = 8888;</code></p>
      <p><code>24  out.fshort_arg[2] = 7777;</code></p>
      <p><code>25  out.fshort_arg[3] = 6666;</code></p>
      <p><code>26  vlong[0] = 123456; /* массив переменной длины */</code></p>
      <p><code>27  vlong[l] = 234567;</code></p>
      <p><code>28  vlong[2] = 345678;</code></p>
      <p><code>29  out.vlong_arg.vlong_arg_len = 3;</code></p>
      <p><code>30  out.vlong_arg.vlong_arg_val = vlong;</code></p>
      <p><code>31  out.uarg.result = RESULT_INT; /* размеченное объединение */</code></p>
      <p><code>32  out.uarg.union_arg_u.intval = 123;</code></p>
      <p><code>33  buff = Malloc(BUFFSIZE); /* кратен 4-м байтам */</code></p>
      <p><code>34  xdrmem_create(&amp;xhandle, buff, BUFFSIZE, XDR_ENCODE);</code></p>
      <p><code>35  if (xdr_data(&amp;xhandle, &amp;out) != TRUE)</code></p>
      <p><code>36   err_quit("xdr_data error");</code></p>
      <p><code>37  size = xdr_getpos(&amp;xhandle);</code></p>
      <p><code>38  Write(STDOUT_FILENO, buff, size);</code></p>
      <p><code>39  exit(0);</code></p>
      <p><code>40 }</code></p>
      <subtitle>Инициализация элементов структуры ненулевыми значениями</subtitle>
      <p>12-32 Сначала мы присваиваем полям структуры ненулевые значения. В случае полей переменной длины мы должны установить длину этих полей. Мы присваиваем дискриминанту размеченного объединения значение RESULT_INT и помещаем в его соответствующее поле значение 123.</p>
      <subtitle>Выделение буфера</subtitle>
      <p>33 Мы вызываем malloc для выделения буфера, в который подпрограммы XDR будут помещать результаты своей работы. Адрес и размер буфера должны быть кратны четырем. Выделение массива char не гарантирует этого.</p>
      <subtitle>Создание потока XDR в памяти</subtitle>
      <p>34 Функция библиотеки времени выполнения xdrmem_create инициализирует буфер, на который указывает buff, предназначенный для использования функциями XDR как поток в памяти. Мы выделяем переменную типа XDR с именем xhandle и передаем адрес этой переменной в качестве первого аргумента. Библиотека XDR времени выполнения хранит в этой переменной всю необходимую информацию (указатель на буфер, текущее положение в буфере и т. п.). Последний аргумент имеет значение XDR_ENCODE, что указывает XDR на необходимость преобразования данных из формата узла в формат XDR.</p>
      <subtitle>Кодирование структуры</subtitle>
      <p>35-36 Мы вызываем функцию xdr_data, созданную rpcgen в файле data_xdr.c, и она кодирует структуру out в формат XDR. Возвращаемое значение TRUE говорит об успешном завершении работы функции.</p>
      <subtitle>Получение размера кодированных данных и запись их в поток вывода</subtitle>
      <p>37-38 Функция xdr_getpos возвращает текущее положение библиотеки XDR в выходном буфере (то есть сдвиг байта, в который будут помещены очередные данные). Его мы трактуем как размер готовых к записи данных. </p>
      <p>В листинге 16.14 приведен текст программы read, которая считывает данные из файла, записанного предыдущей программой, и выводит значения всех полей структуры data.</p>
      <subtitle>Листинг 16.14. Считывание структуры data из формата XDR</subtitle>
      <p><code>//sunrpc/xdr1/read.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "data.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   XDR xhandle;</code></p>
      <p><code>7   int i;</code></p>
      <p><code>8   char *buff;</code></p>
      <p><code>9   data in;</code></p>
      <p><code>10  ssize_t n;</code></p>
      <p><code>11  buff = Malloc(BUFFSIZE); /* адрес должен быть кратен 4-м байтам */</code></p>
      <p><code>12  n = Read(STDIN_FILENO, buff, BUFFSIZE);</code></p>
      <p><code>13  printf("read %ld bytes\n", (long) n);</code></p>
      <p><code>14  xdrmem_create(&amp;xhandle, buff, n, XDR_DECODE);</code></p>
      <p><code>15  memset(&amp;in, 0, sizeof(in));</code></p>
      <p><code>16  if (xdr_data(&amp;xhandle, &amp;in) != TRUE)</code></p>
      <p><code>17   err_quit("xdr_data error");</code></p>
      <p><code>18  printf("short_arg = %d, long_arg = %ld, vstring_arg = '%s'\n",</code></p>
      <p><code>19   in.short_arg, in.long_arg, in.vstring_arg);</code></p>
      <p><code>20  printf("fopaque[] = %d, %d, %d\n",</code></p>
      <p><code>21   in.fopaque_arg[0], in.fopaque_arg[1], in.fopaque_arg[2]);</code></p>
      <p><code>22  printf("vopaque&lt;&gt; =");</code></p>
      <p><code>23  for (i = 0; i &lt; in.vopaque_arg.vopaque_arg_len; i++)</code></p>
      <p><code>24   printf(" %d", in.vopaque_arg.vopaque_arg_val[i]);</code></p>
      <p><code>25  printf("\n");</code></p>
      <p><code>26  printf("fshort_arg[] = %d, %d, %d, %d\n", in.fshort_arg[0],</code></p>
      <p><code>27   in.fshort_arg[1], in.fshort_arg[2], in.fshort_arg[3]);</code></p>
      <p><code>28  printf("vlong&lt;&gt; =");</code></p>
      <p><code>29  for (i = 0; i &lt; in.vlong_arg.vlong_arg_len; i++)</code></p>
      <p><code>30   printf(" %ld", in.vlong_arg.vlong_arg_val[i]);</code></p>
      <p><code>31  printf("\n");</code></p>
      <p><code>32  switch (in.uarg.result) {</code></p>
      <p><code>33  case RESULT_INT:</code></p>
      <p><code>34   printf("uarg (int) = %d\n", in.uarg.union_arg_u.intval);</code></p>
      <p><code>35   break;</code></p>
      <p><code>36  case RESULT_DOUBLE:</code></p>
      <p><code>37   printf("uarg (double) = %g\n", in.uarg.union_arg_u.doubleval);</code></p>
      <p><code>38   break;</code></p>
      <p><code>39  default:</code></p>
      <p><code>40   printf("uarg (void)\n");</code></p>
      <p><code>41   break;</code></p>
      <p><code>42  }</code></p>
      <p><code>43  xdr_free(xdr_data, (char*)&amp;in);</code></p>
      <p><code>44  exit(0);</code></p>
      <p><code>45 }</code></p>
      <subtitle>Выделение правильно расположенного буфера</subtitle>
      <p>11-13 Вызывается функция malloc для выделения буфера. В этот буфер считывается файл, созданный предыдущей программой.</p>
      <subtitle>Создание потока XDR, инициализация буфера, декодирование</subtitle>
      <p>14-17 Инициализируем поток XDR, указав флаг XDR_DECODE, означающий, что преобразование производится из формата XDR в формат узла. Мы инициализируем структуру i n нулями и вызываем xdr_data для декодирования содержимого буфера buff в эту структуру. Мы обязаны инициализировать принимающую структуру нулями, поскольку некоторые из подпрограмм XDR (например, xdr_string) требуют выполнения этого условия. xdr_data — это та же функция, которую мы вызывали в листинге 16.13. Изменился только последний аргумент xdrmem_create: в предыдущей программе мы указывали XDR_ENCODE, а в этой — XDR_DECODE. Это значение сохраняется в дескрипторе XDR (xhandle) функцией xdrmem_create и затем используется библиотекой XDR для выбора между кодированием и декодированием данных.</p>
      <subtitle>Вывод значений полей структуры</subtitle>
      <p>18-42 Мы выводим значения всех полей структуры data.</p>
      <subtitle>Освобождение выделенной под XDR памяти</subtitle>
      <p>43 Для освобождения памяти мы вызываем функцию xdr_free (см. упражнение 16.10).</p>
      <p>Запустим программу write на компьютере Sparc, перенаправив стандартный вывод в файл с именем data:</p>
      <p><code>solaris % <strong>write &gt; data</strong></code></p>
      <p><code>solaris % <strong>ls -l data</strong></code></p>
      <p><code>-rw-rw-r-- 1 rstevens other1 76 Apr 23 12:32 data</code></p>
      <p>Мы видим, что размер файла равен 72 байтам что соответствует рис. 16.4, на котором изображена схема хранения данных.</p>
      <p>Прочитав этот файл в BSD/OS или Digital Unix, мы получим те результаты, на которые и рассчитывали:</p>
      <p><code>bsdi % <strong>read &lt; data</strong></code></p>
      <p><code>read 76 bytes</code></p>
      <p><code>short_arg = 1, long_arg = 2, vstring_arg = 'hello, world'</code></p>
      <p><code>fopaque[] =99, 88, 77</code></p>
      <p><code>vopaque&lt;&gt; = 33 44</code></p>
      <p><code>fshort_arg[] = 9999, 8888, 7777, 6666</code></p>
      <p><code>vlong&lt;&gt; = 123456 234567 345678</code></p>
      <p><code>uarg (int) = 123</code></p>
      <p><code>alpha % read &lt; data</code></p>
      <p><code>read 76 bytes</code></p>
      <p><code>short_arg = 1, long_arg = 2, vstring_arg = 'hello, world'</code></p>
      <p><code>fopaque[] = 99, 88, 77</code></p>
      <p><code>vopaque&lt;&gt; = 33 44</code></p>
      <p><code>fshort_arg[] = 9999, 8888, 7777, 6666</code></p>
      <p><code>vlong&lt;&gt; = 123456 234567 345678</code></p>
      <p><code>uarg (int) = 123</code></p>
      <image l:href="#Any2FbImgLoader241"/>
      <p>Рис. 16.4. Формат потока XDR, записанный в листинге 16.13</p>
     </section>
     <section>
      <title>
       <p>Пример: вычисление размера буфера</p>
      </title>
      <p>В предыдущем примере мы выделяли буфер размера BUFFSIZE (определенного в файле unpiрс.h в листинге В.1), и этого было достаточно. К сожалению, не существует простого способа вычислить объем памяти, нужный XDR для кодирования конкретных данных. Вычислить размер структуры вызовом sizeof недостаточно, потому что каждое поле кодируется XDR по отдельности. Нам придется перебирать элементы структуры, прибавляя к конечному результату объем памяти, нужный XDR для кодирования очередного элемента. В листинге 16.15 приведен пример простой структуры с тремя полями.</p>
      <subtitle>Листинг 16.15. Спецификация XDR для простой структуры</subtitle>
      <p><code>//sunrpc/xdrl/examplе.х</code></p>
      <p><code>1 const MAXC = 4;</code></p>
      <p><code>2 struct example {</code></p>
      <p><code>3  short a;</code></p>
      <p><code>4  double b;</code></p>
      <p><code>5  short c[MAXC];</code></p>
      <p><code>6 };</code></p>
      <p>Программа, текст которой приведен в листинге 16.16, вычисляет размер буфера, требуемого XDR для кодирования этой структуры. Он получается равным 28 байт.</p>
      <subtitle>Листинг 16.16. Программа, вычисляющая размер буфера XDR</subtitle>
      <p><code>//sunrpc/xdr1/example.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "example.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int size;</code></p>
      <p><code>7   example foo;</code></p>
      <p><code>8   size = RNDUP(sizeof(foo.a)) + RNDUP(sizeof(foo.b)) +</code></p>
      <p><code>9    RNDUP(sizeof(foo.c[0])) * MAXC;</code></p>
      <p><code>10  printf("size = %d\n", size);</code></p>
      <p><code>11  exit(0);</code></p>
      <p><code>12 }</code></p>
      <p>8-9 Макрос RNDUP определен в файле &lt;rpc/xdr.h&gt;. Он округляет аргумент к ближайшему кратному BYTES_PER_XDR_UNIT (4). Для массива фиксированного размера вычисляется размер каждого элемента, который затем умножается на количество элементов.</p>
      <p>Проблема возникает в случае использования типов данных переменной длины. Если мы объявим stringd&lt;10&gt;, максимальный размер будет RNDUP(sizeof( int)) (для длины) плюс RNDUP(sizeof(char)*10) (для символов строки). Но мы не можем вычислить размер буфера, если максимальный размер не указан в объявлении переменной (например, float e&lt;&gt;). Лучше всего в этом случае выделять буфер с запасом, а потом проверять, не возвращают ли подпрограммы XDR ошибку (упражнение 16.5).</p>
     </section>
     <section>
      <title>
       <p>Пример: необязательные данные</p>
      </title>
      <p>Существуют три способа задания необязательных данных в файле XDR, примеры для всех приведены в листинге 16.17.</p>
      <subtitle>Листинг 16.17. Файл спецификации XDR, иллюстрирующий способы задания необязательных данных</subtitle>
      <p><code>//sunrpc/xdr1/opt1.x</code></p>
      <p><code>1  union optlong switch (bool flag) {</code></p>
      <p><code>2  case TRUE:</code></p>
      <p><code>3   long val;</code></p>
      <p><code>4  case FALSE:</code></p>
      <p><code>5   void;</code></p>
      <p><code>6  };</code></p>
      <empty-line/>
      <p><code>7  struct args {</code></p>
      <p><code>8   optlong arg1; /* объединение с булевским дискриминантом */</code></p>
      <p><code>9   long arg2&lt;1&gt;; /* массив переменной длины с одним элементом */</code></p>
      <p><code>10  long *arg3; /* указатель */</code></p>
      <p><code>11 };</code></p>
      <subtitle>Объявление объединения с булевским дискриминантом</subtitle>
      <p>1-8 Мы определяем объединение с ветвями FALSE и TRUE и структуру этого типа. Если флаг дискриминанта TRUE, за ним следует значение типа long; в противном случае за ним ничего не следует. После кодирования библиотекой XDR это объединение будет закодировано как:</p>
      <p>&#9632; 4 байта флага со значением 1 (TRUE) и 4 байта целочисленного значения либо</p>
      <p>&#9632; 4 байта флага со значением 0 (FALSE).</p>
      <subtitle>Объявление массива переменной длины</subtitle>
      <p>9 Если мы указываем массив переменной длины с одним возможным элементом, он будет передан как:</p>
      <p>&#9632; 4 байта со значением 1 и 4 байта значения либо</p>
      <p>&#9632; 4 байта со значением 0.</p>
      <subtitle>Объявление указателя XDR</subtitle>
      <p>10 Новый способ определения необязательных данных заключается в объявлении указателя. Он будет закодирован как:</p>
      <p>&#9632; 4 байта со значением 1 и 4 байта значения либо</p>
      <p>&#9632; 4 байта со значением 0</p>
      <p>в зависимости от значения соответствующего указателя при кодировании данных. Если указатель ненулевой, используется первый вариант кодирования. Если указатель нулевой, получится второй вариант. Это удобный способ кодирования необязательных данных в случае, если в нашем коде имеется указатель на эти данные.</p>
      <p>Важная деталь реализации, благодаря которой оба варианта дают одинаковый результат при кодировании, заключается в том, что значение TRUE равно 1, что совпадает с длиной массива переменной длины, когда в нем есть один элемент.</p>
      <p>В листинге 16.18 приведен текст заголовочного файла, созданного программой rpcgen для данного файла спецификации.</p>
      <subtitle>Листинг 16.18. Заголовочный файл, получившийся в результате обработки листинга 16.17</subtitle>
      <p><code>//sunrpc/xdr1/opt1.h</code></p>
      <p><code>7  struct optlong {</code></p>
      <p><code>8   bool_t flag;</code></p>
      <p><code>9   union {</code></p>
      <p><code>10  long val;</code></p>
      <p><code>11  } optlong_u;</code></p>
      <p><code>12 };</code></p>
      <p><code>13 typedef struct optlong optlong;</code></p>
      <empty-line/>
      <p><code>14 struct args {</code></p>
      <p><code>15  optlong arg1;</code></p>
      <p><code>16  struct {</code></p>
      <p><code>17   u_int arg2_len;</code></p>
      <p><code>18   long *arg2_val;</code></p>
      <p><code>19  } arg2;</code></p>
      <p><code>20  long *arg3;</code></p>
      <p><code>21 };</code></p>
      <p><code>22 typedef struct args args;</code></p>
      <p>14-21 Хотя все три аргумента кодируются одинаково, способы присваивания и получения их значений в языке С различны.</p>
      <p>В листинге 16.19 приведен текст простой пpoгрaммы, устанавливающей значения всех трех аргументов так, что ни одно из полей long не кодируется.</p>
      <subtitle>Листинг 16.19. Ни одно из значений не будет закодировано</subtitle>
      <p><code>//sunrpc/xdr1/opt1z.с</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "opt1.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int i;</code></p>
      <p><code>7   XDR xhandle;</code></p>
      <p><code>8   char *buff;</code></p>
      <p><code>9   long *lptr;</code></p>
      <p><code>10  args out;</code></p>
      <p><code>11  size_t size;</code></p>
      <p><code>12  out.arg1.flag = FALSE;</code></p>
      <p><code>13  out.arg2.arg2_len = 0;</code></p>
      <p><code>14  out.arg3 = NULL;</code></p>
      <p><code>15  buff = Malloc(BUFFSIZE); /* Адрес должен быть кратен четырем */</code></p>
      <p><code>16  xdrmem_create(&amp;xhandle, buff, BUFFSIZE, XOR_ENCODE);</code></p>
      <p><code>17  if (xdr_args(&amp;xhandle, &amp;out) != TRUE)</code></p>
      <p><code>18   err_quit("xdr_args error");</code></p>
      <p><code>19  size = xdr_getpos(&amp;xhandle);</code></p>
      <p><code>20  lptr = (long*)buff;</code></p>
      <p><code>21  for (i = 0; i &lt; size; i += 4)</code></p>
      <p><code>22   printf("%ld\n", (long) ntohl(*lptr++));</code></p>
      <p><code>23  exit(0);</code></p>
      <p><code>24 }</code></p>
      <subtitle>Присваивание значений</subtitle>
      <p>12-14 Дискриминанту объединения присваивается значение FALSE, длина массива переменной длины устанавливается в 0, а указатель делается нулевым (NULL).</p>
      <subtitle>Выделение буфера и кодирование</subtitle>
      <p>15-19 Мы выделяем буфер и кодируем структуру out в поток XDR. </p>
      <subtitle>Вывод содержимого буфера XDR</subtitle>
      <p>20-22 Мы выводим содержимое буфера XDR по 4 байта, используя функцию ntohl (host-to-network long integer) для преобразования из порядка XDR big-endian в байтовый порядок узла. В результате получается именно то, что должно было быть помещено в буфер библиотекой XDR времени выполнения:</p>
      <p><code>solaris % <strong>opt1z</strong></code></p>
      <p><code>0</code></p>
      <p><code>0</code></p>
      <p><code>0</code></p>
      <p>Как мы и предполагали, каждому аргументу отводится 4 байта со значением О, указывающим на то, что за ним не следует никаких данных.</p>
      <p>В листинге 16.20 приведена измененная версия программы, которая присваивает значения всем трем аргументам, кодирует их в поток XDR и выводит его содержимое.</p>
      <subtitle>Листинг 16.20. Присваивание значений аргументам из листинга 16.17</subtitle>
      <p><code>//sunrpc/xdr1/opt1.c</code></p>
      <p><code>1  #include "unpipc.h"</code></p>
      <p><code>2  #include "opt1.h"</code></p>
      <empty-line/>
      <p><code>3  int</code></p>
      <p><code>4  main(int argc, char **argv)</code></p>
      <p><code>5  {</code></p>
      <p><code>6   int i;</code></p>
      <p><code>7   XOR xhandle;</code></p>
      <p><code>8   char *buff;</code></p>
      <p><code>9   long lval2, lval3, *lptr;</code></p>
      <p><code>10  args out;</code></p>
      <p><code>11  size_t size;</code></p>
      <p><code>12  out.arg1.flag = TRUE;</code></p>
      <p><code>13  out.arg1.optlong_u.val = 5;</code></p>
      <p><code>14  lval2 = 9876;</code></p>
      <p><code>15  out.arg2.arg2_len = 1;</code></p>
      <p><code>16  out.arg2.arg2_val = &amp;lval2;</code></p>
      <p><code>17  lval3 = 123;</code></p>
      <p><code>18  out.arg3 = &amp;lval3;</code></p>
      <p><code>19  buff = Malloc(BUFFSIZE); /* адрес должен быть кратен 4 */</code></p>
      <p><code>20  xdrmem_create(&amp;xhandle, buff, BUFFSIZE, XDR_ENCODE);</code></p>
      <p><code>21  if (xdr_args(&amp;xhandle, &amp;out) != TRUE)</code></p>
      <p><code>22   err_quit("xdr_args error");</code></p>
      <p><code>23  size = xdr_getpos(&amp;xhandle);</code></p>
      <p><code>24  lptr = (long *) buff;</code></p>
      <p><code>25  for (i = 0; i &lt; size; i += 4)</code></p>
      <p><code>26   printf("%ld\n", (long) ntohl(*lptr++));</code></p>
      <p><code>27  exit(0);</code></p>
      <p><code>28 }</code></p>
      <subtitle>Присваивание значений</subtitle>
      <p>12-18 Для присваивания значения объединению мы устанавливаем дискриминант в TRUE, а затем присваиваем значение полю long. Длину массива мы также сначала устанавливаем в 1. Указатель мы устанавливаем на соответствующее значение в памяти.</p>
      <p>При запуске этой программы мы получим ожидаемые шесть 4-байтовых значений:</p>
      <p><code>solaris % <strong>opt1</strong></code></p>
      <p><code>1 <emphasis>значение дискриминанта TRUE</emphasis></code></p>
      <p><code>5</code></p>
      <p><code>1 <emphasis>длина массива переменной длины</emphasis></code></p>
      <p><code>9876</code></p>
      <p><code>1 <emphasis>флаг для ненулевого указателя</emphasis></code></p>
      <p><code>123</code></p>
     </section>
     <section>
      <title>
       <p>Пример: обработка связного списка</p>
      </title>
      <p>Если осуществима передача необязательных данных, мы можем расширить возможности указателей в XDR и использовать их для кодирования и декодирования связных списков, содержащих произвольное количество элементов. В нашем примере используется связный список пар имя-значение. Соответствующий файл спецификации XDR приведен в листинге 16.21.</p>
      <subtitle>Листинг 16.21. Спецификация XDR для связного списка пар имя-значение</subtitle>
      <p><code>//sunrpc/xdr1/opt2.x</code></p>
      <p><code>1 struct mylist {</code></p>
      <p><code>2  string name&lt;&gt;;</code></p>
      <p><code>3  long value;</code></p>
      <p><code>4  mylist *next;</code></p>
      <p><code>5 };</code></p>
      <empty-line/>
      <p><code>6 struct args {</code></p>
      <p><code>7  mylist *list;</code></p>
      <p><code>8 };</code></p>
      <p>1-5 Структура mylist содержит одну пару имя-значение и указатель на следующую структуру такого типа. Указатель в последней структуре списка будет нулевым.</p>
      <p>В листинге 16.22 приведен текст заголовочного файла, созданного программой rpcgen из файла opt2.х.</p>
      <subtitle>Листинг 16.22. Заголовочный файл, созданный программой rpcgen</subtitle>
      <p><code>//sunrpc/xdr1/opt2.h</code></p>
      <p><code>7  struct mylist {</code></p>
      <p><code>8   char *name;</code></p>
      <p><code>9   long value;</code></p>
      <p><code>10  struct mylist *next;</code></p>
      <p><code>11 };</code></p>
      <p><code>12 typedef struct mylist mylist;</code></p>
      <empty-line/>
      <p><code>13 struct args {</code></p>
      <p><code>14  mylist *list;</code></p>
      <p><code>15 };</code></p>
      <p><code>16 typedef struct args args;</code></p>
      <p>В листинге 16.23 приведен текст программы, инициализирующей связный список с тремя парами имя-значение и кодирующей его с помощью библиотеки XDR.</p>
      <subtitle>Листинг 16.23. Инициализация, кодирование связного списка и вывод результата</subtitle>
      <p><code>1  //sunrpc/xdr1/opt2.c</code></p>
      <p><code>2  #include "unpipc.h"</code></p>
      <p><code>3  #include "opt2.h"</code></p>
      <empty-line/>
      <p><code>4  int</code></p>
      <p><code>5  main(int argc, char **argv)</code></p>
      <p><code>6  {</code></p>
      <p><code>7   int i;</code></p>
      <p><code>8   XDR xhandle;</code></p>
      <p><code>9   long *lptr;</code></p>
      <p><code>10  args out; /* структура, которую мы заполняем */</code></p>
      <p><code>11  char *buff; /* результат кодирования */</code></p>
      <p><code>12  mylist nameval[4]; /* до четырех элементов в списке */</code></p>
      <p><code>13  size_t size;</code></p>
      <p><code>14  out.list = &amp;nameval[2]; /* [2] –&gt; [1] –&gt; [0] */</code></p>
      <p><code>15  nameval[2].name = "name1";</code></p>
      <p><code>16  nameval[2].value = 0x1111;</code></p>
      <p><code>17  nameval[2].next = &amp;nameval[1];</code></p>
      <p><code>18  nameval[1].name = "namee2";</code></p>
      <p><code>19  nameval[1].value = 0x2222;</code></p>
      <p><code>20  nameval[1].next = &amp;nameval[0];</code></p>
      <p><code>21  nameval[0].name = "nameee3";</code></p>
      <p><code>22  nameval[0].value = 0x3333;</code></p>
      <p><code>23  nameval[0].next = NULL;</code></p>
      <p><code>24  buff = Malloc(BUFFSIZE); /* адрес должен быть кратен 4 */</code></p>
      <p><code>25  xdrmem_create(&amp;xhandle, buff, BUFFSIZE, XDR_ENCODE);</code></p>
      <p><code>26  if (xdr_args(&amp;xhandle, tout) != TRUE)</code></p>
      <p><code>27   err_quit("xdr_args error");</code></p>
      <p><code>28  size = xdr_getpos(&amp;xhandle);</code></p>
      <p><code>29  lptr = (long*)buff;</code></p>
      <p><code>30  for (i = 0; i &lt; size; i += 4)</code></p>
      <p><code>31   printf("%8lx\n", (long)ntohl(*lptr++));</code></p>
      <p><code>32  exit(0);</code></p>
      <p><code>33 }</code></p>
      <subtitle>Инициализация связного списка</subtitle>
      <p>11-22 Мы выделяем память под четыре элемента, но инициализируем только три из них. Первая запись nameval[2], потом nameval[1] и nameval[0]. Указатель на начало списка (out.list) устанавливается на &amp;nameval[2]. Мы инициализируем список в таком порядке, чтобы показать, что библиотека XDR обрабатывает указатели и порядок в списке оказывается именно таким, каким он был в нашей программе, и не зависит от того, какие массивы для этого используются. Мы также инициализируем значения элементов списка шестнадцатеричными величинами, поскольку будем выводить их в этом формате.</p>
      <p>Вывод программы показывает, что перед каждым элементом списка идет значение 1 в 4 байтах (что мы можем считать длиной массива переменной длины с одним элементом или булевским значением TRUE). Четвертая запись состоит из 4 байт, в которых записан 0. Она обозначает конец списка:</p>
      <p><code>solaris % <strong>opt2</strong></code></p>
      <p><code>1        <emphasis>дальше идет один элемент</emphasis></code></p>
      <p><code>5        <emphasis>длина строки</emphasis></code></p>
      <p><code>6e616d65 <emphasis>имя(name)</emphasis></code></p>
      <p><code>31000000 <emphasis>1 и три байта дополнения</emphasis></code></p>
      <p><code>1111     <emphasis>значение</emphasis></code></p>
      <p><code>1        <emphasis>один элемент</emphasis></code></p>
      <p><code>6        <emphasis>длина строки</emphasis></code></p>
      <p><code>6e616d65 <emphasis>имя</emphasis></code></p>
      <p><code>65320000 <emphasis>е 2 и 2 байта дополнения</emphasis></code></p>
      <p><code>2222     <emphasis>значение</emphasis></code></p>
      <p><code>1        <emphasis>один элемент</emphasis></code></p>
      <p><code>7        <emphasis>длина строки</emphasis></code></p>
      <p><code>6e616d65 <emphasis>имя</emphasis></code></p>
      <p><code>65653300 <emphasis>е е 3 и 1 байт дополнения</emphasis></code></p>
      <p><code>3333     <emphasis>значение</emphasis></code></p>
      <p><code>0        <emphasis>конец списка</emphasis></code></p>
      <p>При декодировании списка библиотека XDR будет динамически выделять память под его элементы и указатели и связывать все это вместе, что позволит легко переходить от одного элемента списка к другому в программе на С.</p>
     </section>
    </section>
    <section>
     <title>
      <p>16.9. Форматы пакетов RPC</p>
     </title>
     <p>На рис. 16.5 приведен формат запроса RPC в пакете TCP.</p>
     <p>Поскольку TCP передает поток байтов и не предусматривает границ сообщений, приложение должно предусматривать способ разграничения сообщений. Sun RPC определяет запись как запрос или ответ, и каждая запись состоит из одного или более фрагментов. Каждый фрагмент начинается с 4-байтового значения: старший бит является флагом последнего фрагмента, а следующие 31 бит представляют собой счетчик (длина фрагмента). Если бит последнего фрагмента имеет значение 0, данный фрагмент не является последним в записи.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Это 4-байтовое значение передается в порядке big-endian, так же как и 4-байтовые целые в XDR, но оно не относится к стандарту XDR, поскольку он не предусматривает передачи битовых полей.</p>
     </cite>
     <p>Если вместо TCP используется UDP, первое поле в заголовке UDP будет идентификатором транзакции (XID), как показано на рис. 16.7.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>При использовании TCP на размер запроса и ответа RPC ограничения не накладываются, поскольку может использоваться любое количество фрагментов, а длина каждого из них задается 31-разрядным целым. Но при использовании протокола UDP запрос (и ответ) должен помещаться в дейтаграмму целиком, а максимальное количество данных в ней — 65507 байт (для IPv4). Во многих реализациях, предшествовавших TI-RPC, размер ограничивался значением около 8192 байт, поэтому если требуется передавать более 8000 байт, следует пользоваться протоколом TCP.</p>
     </cite>
     <image l:href="#Any2FbImgLoader243"/>
     <p>Рис. 16.5. Запрос RPC в пакете TCP</p>
     <empty-line/>
     <p>Приведем спецификацию XDR для запроса RPC, взятую из RFC 1831. Имена на рис. 16.5 взяты из этой спецификации:</p>
     <p><code>enum autn_flavor {</code></p>
     <p><code> AUTH_NONE = 0,</code></p>
     <p><code> AUTH_SYS = 1,</code></p>
     <p><code> AUTH_SHORT = 2</code></p>
     <p><code> /* and more to be defined */</code></p>
     <p><code>};</code></p>
     <p><code>struct opaque_auth {</code></p>
     <p><code> auth_flavor flavor;</code></p>
     <p><code> opaque body&lt;400&gt;;</code></p>
     <p><code>};</code></p>
     <p><code>enum msg_type {</code></p>
     <p><code> CALL = 0,</code></p>
     <p><code> REPLY = 1</code></p>
     <p><code>};</code></p>
     <p><code>struct call_body {</code></p>
     <p><code> unsigned int rpcvers; /* версия RPC: должна быть 2 */</code></p>
     <p><code> unsigned int prog; /* номер программы */</code></p>
     <p><code> unsigned int vers; /* номер версии */</code></p>
     <p><code> unsigned int proc; /* номер процедуры */</code></p>
     <p><code> opaque_auth cred; /* данные вызывающего */</code></p>
     <p><code> opaque_auth verf; /* проверочная информация вызывающего */</code></p>
     <p><code>/* параметры, относящиеся к процедуре */</code></p>
     <p><code>};</code></p>
     <p><code>struct rpc_msg {</code></p>
     <p><code> unsigned int xid;</code></p>
     <p><code> union switch (msg_type mtype) {</code></p>
     <p><code> case CALL:</code></p>
     <p><code>  call_body cbody;</code></p>
     <p><code> case REPLY:</code></p>
     <p><code>  reply_body rbody;</code></p>
     <p><code> } body;</code></p>
     <p><code>};</code></p>
     <p>Содержимое скрытых данных переменной длины, содержащих сведения о пользователе и проверочную информацию, зависит от типа аутентификации. Для нулевой аутентификации, используемой по умолчанию, длина этих данных должна быть установлена в 0. Для аутентификации Unix эти данные содержат следующую структуру:</p>
     <p><code>struct authsys_parms {</code></p>
     <p><code> unsigned int stamp;</code></p>
     <p><code> string machinename&lt;255&gt;;</code></p>
     <p><code> unsigned int uid;</code></p>
     <p><code> unsigned int gid;</code></p>
     <p><code> unsigned int gids&lt;16&gt;;</code></p>
     <p><code>};</code></p>
     <p>Если тип аутентификации AUTH_SYS, тип проверки должен быть AUTH_NONE. Формат ответа RPC сложнее, чем формат запроса, поскольку в нем могут передаваться сообщения об ошибках. На рис. 16.6 показаны возможные варианты. На рис. 16.7 показан формат ответа RPC в случае успешного выполнения процедуры. Ответ передается по протоколу UDP. </p>
     <p>Ниже приводится текст спецификации XDR ответа RPC, взятый из RFC 1831.</p>
     <p><code>enum reply_stat {</code></p>
     <p><code> MSG_ACCEPTED = 0,</code></p>
     <p><code> MSG_DENIED = 1</code></p>
     <p><code>};</code></p>
     <p><code>enum accept_stat {</code></p>
     <p><code> SUCCESS = 0, /* успешное завершение вызова RPC */</code></p>
     <p><code> PROG_UNAVAIL = 1, /* требуемый номер программы недоступен */</code></p>
     <p><code> PROG_MISMATCH = 2, /* требуемый номер версии недоступен */</code></p>
     <p><code> PROC_UNAVAIL = 3, /* номер процедуры недоступен */</code></p>
     <p><code> GARBAGE_ARGS = 4, /* не могу декодировать аргументы */</code></p>
     <p><code> SYSTEM_ERR = 5 /* ошибка выделения памяти и т. п. */</code></p>
     <p><code>};</code></p>
     <p><code>struct accepted_reply {</code></p>
     <p><code> opaque_auth verf;</code></p>
     <p><code> union switch (accept_stat stat) {</code></p>
     <p><code> case SUCCESS:</code></p>
     <p><code>  opaque results[0]; /* результаты, возвращаемые процедурой */</code></p>
     <p><code> case PROG_MISMATCH:</code></p>
     <p><code>  struct {</code></p>
     <p><code>   unsigned int low; /* наименьший поддерживаемый номер программы */</code></p>
     <p><code>   unsigned int high; /* наибольший поддерживаемый номер программы */</code></p>
     <p><code>  } mismatch_info;</code></p>
     <p><code> default: /* PROG_UNAVAIL, PROC_UNAVAIL, GARBAGE_ARGS, SYSTEM_ERR */</code></p>
     <p><code>  void;</code></p>
     <p><code> } reply_data;</code></p>
     <p><code>};</code></p>
     <p><code>union reply_body switch (reply_stat stat) {</code></p>
     <p><code>case MSG_ACCEPTED:</code></p>
     <p><code> accepted_reply areply;</code></p>
     <p><code>case MSG_DENIED:</code></p>
     <p><code> rejected_reply rreply;</code></p>
     <p><code>} reply;</code></p>
     <image l:href="#Any2FbImgLoader244"/>
     <p>Рис. 16.6. Возможные варианты ответов RPC</p>
     <empty-line/>
     <p>Вызов может быть отклонен сервером, если номер версии RPC не тот или возникает ошибка аутентификации:</p>
     <p><code>enum reject_stat {</code></p>
     <p><code> RPC_MISMATCH = 0, /* номер версии RPC отличен от 2 */</code></p>
     <p><code> AUTH_ERROR =1 /* ошибка аутентификации */</code></p>
     <p><code>};</code></p>
     <p><code>enum auth_stat {</code></p>
     <p><code> AUTH_OK = 0, /* успешное завершение */</code></p>
     <p><code> /* ошибки на сервере */</code></p>
     <p><code> AUTH_BADCRED = 1, /* ошибка в личных данных пользователя (нарушена контрольная сумма) */</code></p>
     <p><code> AUTH_REJECTEDCRED <emphasis>=</emphasis> 2, /* клиент должен начать сеанс заново */</code></p>
     <p><code> AUTH_BADVERF = 3, /* ошибка в проверочных данных (нарушена контрольная сумма) */</code></p>
     <p><code> AUTH_REJECTEDVERF = 4, /* проверочные данные устарели или были повторы */</code></p>
     <p><code> AUTH_TOOWEAK = 5, /* запрос отклонен системой безопасности */</code></p>
     <p><code> /* ошибки клиента */</code></p>
     <p><code> AUTH_INVALIDRESP = 6, /* фальшивые проверочные данные в ответе */</code></p>
     <p><code> AUTH_FAILED = 7 /* причина неизвестна */</code></p>
     <p><code>};</code></p>
     <p><code>union rejected_reply switch (reject_stat stat) {</code></p>
     <p><code>case RPC_MISMATCH:</code></p>
     <p><code> struct {</code></p>
     <p><code>  unsigned int low; /* наименьший номер версии RPC */</code></p>
     <p><code>  unsigned int high; /* наибольший номер версии RPC */</code></p>
     <p><code> } mismatch_info;</code></p>
     <p><code>case AUTH_ERROR:</code></p>
     <p><code> auth_stat stat;</code></p>
     <p><code>};</code></p>
     <image l:href="#Any2FbImgLoader245"/>
     <p>Рис. 16.7. Ответ на успешно обработанный вызов в дейтаграмме UDP</p>
    </section>
    <section>
     <title>
      <p>16.10. Резюме</p>
     </title>
     <p>Средства Sun RPC дают возможность создавать распределенные приложения, в которых клиентская часть может выполняться на одном узле, а серверная — на другом. Сначала следует определить процедуры сервера, которые могут быть вызваны клиентом, и написать файл спецификации RPC, описывающий аргументы и возвращаемые значения этих процедур. Затем пишется функция main клиента, вызывающая процедуры сервера, а потом сами эти процедуры. Программа клиента выглядит так, как будто она просто вызывает процедуры сервера, но на самом деле их скрытое взаимодействие по сети обеспечивается библиотекой RPC.</p>
     <p>Программа rpcgen является краеугольным камнем приложения, использующего RPC. Она считывает файл спецификации и создает заглушку клиента и заглушку сервера, а также функции, вызывающие требуемые подпрограммы XDR, которые осуществляют все необходимые преобразования данных. Библиотека XDR также является важной частью процесса. XDR определяет стандарт обмена данными различного формата между разными системами, у которых может быть по-разному определен, например, размер целого, порядок байтов и т. п. Как мы показали, XDR можно использовать и отдельно от RPC для обмена данными в машинно-независимом стандартном формате. Для передачи данных можно использовать любой механизм (сокеты, XTI, дискеты, компакт-диски или что угодно).</p>
     <p>В Sun RPC используется свой стандарт именования программ. Каждой программе присваивается 32-разрядный номер программы, 32-разрядный номер версии и 32-разрядный номер процедуры. Каждый узел с сервером RPC должен выполнять программу отображения портов в фоновом режиме (RPCBIND). Серверы RPC привязывают временные порты TCP и UDP к своим процедурам, а затем регистрируют эти порты в программе отображения портов, указывая номера программ и версий. При запуске клиент RPC связывается с программой отображения портов узла, где запущен сервер RPC, и выясняет номер нужного ему порта, а затем связывается с самим сервером по протоколам TCP или UDP.</p>
     <p>По умолчанию клиенты RPC не предоставляют аутентификационной информации и серверы RPC обрабатывают все приходящие запросы. Это аналогично написанию собственного приложения клиент-сервер с использованием сокетов или XTI. В Sun RPC предоставляются три дополнительные формы аутентификации: аутентификация Unix (предоставляется имя узла клиента, идентификатор пользователя и группы), аутентификация DES (основанная на криптографии с секретным и открытым ключом) и аутентификация Kerberos.</p>
     <p>Понимание стратегии тайм-аутов и повторных передач пакета RPC важно при использовании RPC (как и любой формы сетевого программирования). При использовании надежного транспортного протокола, такого, как TCP, клиенту RPC нужно использовать только общий тайм-аут, поскольку потеря пакетов или прием лишних копий целиком обрабатываются на транспортном уровне. Когда используется ненадежный транспортный протокол, такой как UDP, пакет RPC использует тайм-аут повтора в дополнение к общему тайм-ауту. Идентификатор транзакций используется клиентом RPC для проверки ответа на соответствие отправленному запросу. </p>
     <p>Любой вызов процедуры может быть отнесен к группе «ровно один», «не более чем один» или «не менее чем один». Для локальных вызовов этот вопрос можно не принимать во внимание, но при использовании RPC эту разницу следует понимать. Следует также понимать различия между идемпотентными и неидемпотентными процедурами.</p>
     <p>Sun RPC — это большой пакет, и мы лишь вкратце обсудили особенности его использования. Тем не менее сведений, приведенных в этой главе, должно быть достаточно для написания приложений целиком. Использование rpcgen скрывает многие детали и упрощает кодирование. Документация Sun описывает различные уровни кодирования RPC — упрощенный интерфейс, верхний уровень, средний уровень, уровень экспертов и низкий уровень, но эти категории достаточно бессмысленны. Количество функций в библиотеке RPC — 164, они могут быть разделены следующим образом:</p>
     <p>&#9632; 11 auth_ (аутентификация);</p>
     <p>&#9632; 26 clnt_ (клиентские);</p>
     <p>&#9632; 5 pmap_ (доступ к программе отображения портов);</p>
     <p>&#9632; 24 rpc_ (общего назначения);</p>
     <p>&#9632; 44 svc_ (серверные);</p>
     <p>&#9632; 54 xdr_ (преобразования XDR).</p>
     <p>Для сравнения отметим, что интерфейсы сокетов и XTI содержат по 25 функций, а интерфейсы дверей, очередей сообщений Posix и System V, семафоров и разделяемой памяти содержат по 10 функций. 15 функций используются для работы с потоками в стандарте Posix, 10 — для работы с условными переменными. 11 функций используются для работы с блокировками чтения-записи Posix и одна при работе с блокировкой записей fcntl.</p>
    </section>
    <section>
     <title>
      <p>Упражнения</p>
     </title>
     <p>1. При запуске сервер регистрируется в программе отображения портов. Что происходит при завершении сервера, например, клавишей завершения программы с терминала? Что произойдет, если на этот сервер впоследствии придет запрос от клиента?</p>
     <p>2. Клиент взаимодействует с сервером RPC по протоколу UDP, и кэш не включен. Клиент посылает запрос на сервер, но серверу требуется 20 секунд до отправки ответа. Клиент посылает запрос повторно через 15 секунд, что приводит к повторному запуску процедуры сервера. Что произойдет со вторым ответом сервера?</p>
     <p>3. Тип XDR string всегда кодируется в значение длины и последовательность символов. Что произойдет, если мы напишем char с[10] вместо string s&lt;10&gt;?</p>
     <p>4. Измените максимальный размер string в листинге 16.11 со 128 на 10 и запустите программу write. Что произойдет? Уберите ограничение длины и сравните файл data_xdr.с с тем, который был создан, когда длина была ограничена. Что изменилось?</p>
     <p>5. Измените третий аргумент в вызове xdrmem_create (размер буфера) в листинге 16.13 на 50 и посмотрите, что произойдет.</p>
     <p>6. В разделе 16.5 мы описали включение кэша повторных ответов при использовании протокола UDP. Мы можем сказать, что протокол TCP имеет свой собственный кэш такого рода. О чем мы говорим и как велик этот кэш у протокола TCP? (Подсказка: как протокол TCP определяет, что принята копия полученных ранее данных?)</p>
     <p>7. Есть пять полей, уникально идентифицирующих каждую запись в кэше сервера. В каком порядке следует их сравнивать, чтобы минимизировать количество сравнений?</p>
     <p>8. При просмотре передаваемых пакетов с помощью tcpdump в примере из раздела 16.5, где использовался TCP, мы узнаем, что размер запроса 48 байт, а размер ответа 32 байт (без заголовков TCP и IPv4). Получите этот размер из рисунка 16.3. Каков был бы размер при использовании UDP вместо TCP?</p>
     <p>9. Может ли клиент RPC в системе, не поддерживающей потоки, вызвать процедуру сервера, скомпилированную с поддержкой потоков? Что можно сказать о различии в передаваемых аргументах, о котором говорилось в разделе 16.2? </p>
     <p>10. В программе read из листинга 16.19 мы выделяли место под буфер, в который считывался файл, и этот буфер содержал указатель vstring_arg. Но где хранится строка, на которую указывает vstring_arg? Измените программу так, чтобы проверить ваше предположение.</p>
     <p>11. Sun RPC определяет нулевую процедуру как процедуру с номером 0 (по этой причине мы всегда начинали нумерацию процедур с 1, как в листинге 16.1). Более того, любая заглушка сервера, созданная rpcgen, автоматически определяет эту процедуру (в чем вы можете легко убедиться, посмотрев текст любой заглушки, созданной для одного из наших примеров). Нулевая процедура не принимает никаких аргументов и ничего не возвращает. Часто она используется для проверки работы сервера и измерения скорости передачи пакетов на сервер и обратно. Но если мы посмотрим на заглушку клиента, мы увидим, что в ней не содержится заглушки для этой процедуры. Посмотрите в документации описание функции clnt_call и используйте ее для вызова нулевой процедуры для любого сервера этой главы.</p>
     <p>12. Почему в табл А.1 нет записи для сообщения размером 65536 для Sun RPC поверх UDP? Почему нет записей для сообщений длиной 16384 и 32768 в табл. А.2 для Sun RPC поверх UDP?</p>
     <p>13. Проверьте, что удаление вызова xdr_free из листинга 16.19 приведет к утечке памяти. Добавьте оператор</p>
     <p><code>for(;;) {</code></p>
     <p>непосредственно перед вызовом xdrmem_create и завершающую скобку непосредственно перед вызовом xdr_free. Запустите программу и следите за ее размером в памяти с помощью ps. Удалите закрывающую скобку и поставьте ее после вызова xdr_free. Запустите программу снова и последите за ее размером еще раз. </p>
    </section>
   </section>
  </section>
  <section>
   <title>
    <p>Эпилог</p>
   </title>
   <empty-line/>
   <p>В этой книге подробно описаны четыре средства межпроцессного взаимодействия (IPC):</p>
   <p>1. Передача сообщений (именованные и неименованные каналы, очереди сообщений Posix и System V).</p>
   <p>2. Синхронизация (взаимные исключения и условные переменные, блокировки чтения-записи, блокировки файлов и записей, семафоры Posix и System V).</p>
   <p>3. Разделяемая память (неименованная, именованная стандартов Posix и System V).</p>
   <p>4. Вызовы процедур (двери в системе Solaris, пакет Sun RPC).</p>
   <p>Передача сообщений и вызов процедур часто используются сами по себе, без дополнительных средств синхронизации. Разделяемая память, напротив, для нормального функционирования обычно требует введения дополнительной синхронизации. Средства синхронизации иногда используются сами по себе, то есть в отдельности от прочих средств IPC.</p>
   <p>После прочтения 16 глав возникает естественный вопрос: какую форму IPC следует использовать для решения какой-либо конкретной задачи? К сожалению, универсального метода не существует. Огромное количество средств IPC в Unix возникло благодаря тому, что нет какого-либо единственного средства, которым можно было бы решить все задачи (или хотя бы большинство). Все, что вам остается, — это познакомиться с особенностями всех форм IPC и учитывать их при разработке вашего приложения.</p>
   <p>Прежде всего перечислим главные по важности моменты, которые следует учесть при выборе средств организации IPC для приложения.</p>
   <p>1. Сетевое или несетевое. Мы предполагаем, что это решение уже принято и IPC используется между процессами или потоками, выполняющимися на одном узле. Если есть вероятность того, что приложение будет распределено между несколькими узлами, следует рассмотреть возможность использования сокетов вместо IPC, чтобы впоследствии легко было переделать приложение в сетевое.</p>
   <p>2. Переносимость (вспомните табл. 1.3). Практически все системы под управлением Unix поддерживают именованные и неименованные каналы и блокировку записей стандарта Posix. К 1998 году большинство систем поддерживало средства IPC System V (очереди сообщений, семафоры и разделяемую память), тогда как лишь немногие поддерживали те же средства стандарта Posix. Должны появиться новые реализации Posix IPC, но, к сожалению, эти средства не являются обязательными в стандарте Unix 98. Многие системы поддерживают потоки Posix (включая взаимные исключения и условные переменные) или станут поддерживать их в ближайшем будущем. Некоторые системы, поддерживающие потоки Posix, не воспринимают атрибут использования между процессами для взаимных исключений и условных переменных. Блокировки чтения-записи, требуемые стандартом Unix 98, должны вскоре войти в стандарт Posix, и множество систем уже поддерживают какой-либо из видов таких блокировок. Отображение в память распространено достаточно широко, и большинство Unix-систем поддерживают неименованное отображение (с использованием либо /dev/zero, либо MAP_ANON). Средства Sun RPC должны быть доступны практически на всех системах Unix, тогда как двери пока реализованы только в Solaris.</p>
   <p>3. Производительность. Если для вашего приложения критична скорость работы средств IPC, воспользуйтесь программами из приложения А. Лучше всего изменить эти программы для имитации среды, в которой будет работать ваше приложение, и таким образом измерить скорость работы средств IPC в этой среде.</p>
   <p>4. Планирование в реальном времени. Если вам нужно воспользоваться этой функцией и система ее поддерживает, рассмотрите возможность использования функций Posix для передачи сообщений и синхронизации (очереди сообщений, семафоры, взаимные исключения и условные переменные). Например, когда увеличиваются значения семафора, в вызове к которому заблокировано несколько потоков, разблокируемый поток выбирается в соответствии с политиками планирования и параметрами заблокированных потоков. Для семафоров System V это не гарантируется.</p>
   <p>Чтобы помочь вам понять некоторые особенности и ограничения средств IPC, мы вкратце перечислим основные различия между ними:</p>
   <p>&#9632; Именованные и неименованные каналы представляют собой потоки байтов без грaниц между сообщениями. Очереди сообщений Posix и System V предусматривают наличие границ сообщений. Сравните это с протоколами Интернета: TCP — это поток байтов, a UDP — последовательность сообщений с явно определенными границами.</p>
   <p>&#9632; Очереди сообщений Posix могут отправлять процессу сигнал или запускать новый поток в случае, если в пустую очередь помещается сообщение. Для очередей System V такая возможность не предусматривается. Ни один из типов очередей сообщений не может быть использован непосредственно с вызовами select и poll (глава 6 [24]), хотя некие решения этой проблемы были приведены при обсуждении листинга 5.12 и в разделе 6.9.</p>
   <p>&#9632; Данные в именованных и неименованных каналах передаются в порядке очереди (FIFO). Очереди сообщений Posix и System V предусматривают возможность присваивания сообщениям различного приоритета. При чтении из очереди Posix всегда возвращается сообщение с наивысшим приоритетом. Для очередей System V можно указать любой конкретный тип сообщения.</p>
   <p>&#9632; При помещении сообщения в очередь Posix или System V или в именованный или неименованный канал ровно один экземпляр доставляется ровно одному считывающему потоку. Возможность передачи нескольким адресатам отсутствует (в отличие от сокетов и XTI при использовании протокола UDP — главы 18 и 19 [24]).</p>
   <p>&#9632; Взаимные исключения, условные переменные и блокировки чтения-записи имен не имеют. Они могут легко использоваться потоками одного процесса. Совместное использование их различными процессами возможно только в случае, если эти объекты располагаются в общей для этих процессов области памяти. Семафоры Posix бывают двух типов: именованные и размещаемые в памяти. Именованные семафоры могут использоваться только различными процессами (они идентифицируются именами Posix IPC), а размещаемые в памяти должны для этого находиться в разделяемой памяти. Семафоры System V также являются именованными (с помощью типа key_t), они также могут без проблем использоваться несколькими процессами совместно.</p>
   <p>&#9632; Блокировки записей fcntl автоматически снимаются ядром при завершении процесса, если он сам об этом не позаботится. Для семафоров System V эта возможность является дополнительной. Для взаимных исключений, условных переменных, блокировок чтения-записи и семафоров Posix эта возможность не предусматривается.</p>
   <p>&#9632; Каждая блокировка fcntl действует на некоторый диапазон байтов (называемый записью) в файле, указываемом с помощью дескриптора. Блокировки чтения-записи не связываются ни с какими записями.</p>
   <p>&#9632; Разделяемая память Posix и System V обладает живучестью ядра. Она существует до тех пор, пока не будет удалена явно, даже если в какой-то момент не используется ни одним процессом.</p>
   <p>&#9632; Размер объекта разделяемой памяти Posix может быть увеличен в процессе работы. Размер сегмента разделяемой памяти System V фиксируется при его создании.</p>
   <p>&#9632; Oгрaничeния ядра на три типа System V IPC часто требуют настройки вручную, поскольку устанавливаемые для них по умолчанию значения часто не соответствуют требованиям реальных приложений (раздел 3.8). Oгрaничeния на средства Posix IPC обычно не требуют настройки.</p>
   <p>&#9632; Информация об объектах System V IPC (текущий размер, идентификатор владельца, время последнего изменения и т. п.) возвращается вызовом одной из функций XXXctl с командой IPC_STAT и пpoгрaммoй ipcs. Для получения информации об объектах Posix стандартных способов не предусматривается. Если реализация использует файлы в качестве основы для этих объектов, можно получить эту информацию с помощью функции stat или программы ls, если нам известен способ преобразования имени Posix IPC в полное имя файла. Если же в данной реализации файлы не используются, способа получить такую информацию может и не существовать.</p>
   <p>&#9632; Из всех средств синхронизации — взаимных исключений, условных переменных, блокировок чтения-записи, блокировок записи, семафоров — только две функции можно вызывать из обработчика сигналов (табл. 5.1): sem_post и fcntl.</p>
   <p>&#9632; Из всех средств передачи сообщений — каналов, очередей сообщений Posix и System V — только две функции могут быть вызваны из обработчика сигналов: read и write (используются с именованными и неименованными каналами).</p>
   <p>&#9632; Из всех средств передачи сообщений только двери предоставляют серверу точную информацию о клиенте (раздел 15.5). В разделе 5.4 мы упомянули два других способа передачи сообщений, которые также предоставляют информацию о клиенте: доменные сокеты в BSD/OS (раздел 14.8 [24]) и каналы в SVR4, если по ним передается дескриптор файла (раздел 15.3.1 [21]).</p>
  </section>
  <section>
   <title>
    <p>ПРИЛОЖЕНИЕ А</p>
    <p>Измерение производительности</p>
   </title>
   <section>
    <title>
     <p>А.1. Введение</p>
    </title>
    <p>В основной части книги мы перечислили шесть средств передачи сообщений:</p>
    <p>&#9632; неименованные каналы (pipes);</p>
    <p>&#9632; именованные каналы (FIFO);</p>
    <p>&#9632; очереди сообщений Posix;</p>
    <p>&#9632; очереди сообщений System V;</p>
    <p>&#9632; двери;</p>
    <p>&#9632; SunRPC.</p>
    <p>Кроме того, мы указали пять типов средств синхронизации:</p>
    <p>&#9632; взаимные исключения и условные переменные;</p>
    <p>&#9632; блокировки чтения-записи;</p>
    <p>&#9632; блокировка записей fcntl;</p>
    <p>&#9632; семафоры Posix;</p>
    <p>&#9632; семафоры System V.</p>
    <p>В этом приложении мы разработаем набор простых программ для измерения производительности этих видов IPC, чтобы иметь возможность аргументировать свой выбор одного из этих средств для конкретной задачи.</p>
    <p>При сравнении средств передачи сообщений нас интересуют два параметра:</p>
    <p>1. Полоса пропускания (bandwidth) — скорость передачи данных по каналу IPC. Для измерения этого параметра мы передаем огромное количество данных (миллионы байтов) от одного процесса другому. Этот параметр измеряется для различных объемов данных на операцию (например, write и read для каналов), и мы ожидаем, что полоса пропускания будет увеличиваться вместе с увеличением количества передаваемых за одну операцию данных.</p>
    <p>2. Задержка (latency) определяется как время, которое требуется небольшому сообщению, чтобы проделать путь по каналу IPC от одного процесса к другому и обратно. Мы измеряем время задержки для сообщения размером 1 байт.</p>
    <p>В реальности величина полосы пропускания говорит нам о том, сколько времени будет потрачено на передачу блока данных по каналу IPC, но IPC также используется и для передачи небольших управляющих сообщений. Задержка определяет время, необходимое для передачи этих сообщений. Важными оказываются обе величины.</p>
    <p>Чтобы измерить скорость работы средств синхронизации, мы изменим программу, увеличивающую значение счетчика в разделяемой памяти. Поскольку увеличение <strong>— </strong>элементарная операция, время будет тратиться в основном на работу средств синхронизации.</p>
    <cite>
     <p><strong>ПРИМЕЧАНИЕ</strong></p>
     <p>Программы этого приложения, используемые для измерения производительности средств IPC, основаны на пакете lmbench [15]. Этот пакет содержит набор тестов, измеряющих множество параметров системы (скорость переключения контекста и т. п.), а не только производительность средств IPC. Исходный код пакета доступен по адресу http://www.bitmover.com/lmbench.</p>
     <p>Величины, приведенные в этом приложении, дают нам возможность сравнить методы, описанные в книге. Заодно мы хотели показать, как просто измерить эти величины. Прежде чем останавливать свой выбор на одном из средств IPC, нелишне было бы получить эти значения в вашей собственной системе. К сожалению, насколько легко измерить величины, настолько же трудно объяснить аномальное их поведение в отсутствие доступа к исходному коду ядра и библиотек.</p>
    </cite>
   </section>
   <section>
    <title>
     <p>А.2. Результаты</p>
    </title>
    <section>
     <p>Сведем вместе результаты, полученные в этом приложении. Данный раздел может использоваться как справочник при чтении книги.</p>
     <p>Для проведения измерений использовались две системы: SparcStation 4/110 под управлением Solaris 2.6 и Digital Alpha (DEC 3000 model 300, Pelican) под управлением Digital Unix 4.0В. В файл /etc/system системы Solaris 2.6 были добавлены следующие строки:</p>
     <p><code>set msgsys:msginfo_msgmax = 16384</code></p>
     <p><code>set msgsys:msginfo_msgmnb = 32768</code></p>
     <p><code>set msgsys:msginfo_msgseg = 4096</code></p>
     <p>Это дает возможность отправлять сообщения размером 16384 байт в очередь сообщений System V (табл. А.2). Те же изменения осуществляются в Digital Unix 4.0B введением следующих строк с помощью программы sysconfig:</p>
     <p><code>ipc:</code></p>
     <p><code> msg-max = 16384</code></p>
     <p><code> msg-mnb = 32768</code></p>
    </section>
    <section>
     <title>
      <p>Результаты измерения полосы пропускания сообщений</p>
     </title>
     <p>В табл. А.2 приведены результаты измерений на компьютере Sparc под управлением Solaris 2.6, а на рис. А.1 — график этих результатов.</p>
     <p>Как мы и предполагали, полоса пропускания увеличивается с размером сообщения. Поскольку во многих реализациях очередей сообщений System V ограничение на размер сообщения, установленное в ядре, достаточно мало (раздел 3.8), максимальный размер сообщения в нашей программе имеет значение 16384 байт. </p>
     <p>Уменьшение полосы для сообщений размером около 4096 байт в Solaris 2.6, возможно, связано с настройкой внутренних ограничений ядра. Для сравнения с [24] мы приводим результаты аналогичных измерений для сокета TCP и доменного сокета Unix. Эти две величины были получены с помощью программ пакета lmbench для сообщений размером 65536 байт. При измерении быстродействия сокета TCP оба процесса выполнялись на одном узле.</p>
    </section>
    <section>
     <title>
      <p>Результаты измерения задержки</p>
     </title>
     <p>В табл. А.1 приведены значения задержки в Solaris 2.6 и Digital Unix 4.0B.</p>
     <empty-line/>
     <p>Таблица А.1. Задержка при передаче сообщения размером 1 байт (в микросекундах) </p>
     <table>
      <tr align="left">
       <th align="left" valign="top"/>
       <th align="left" valign="top">Канал</th>
       <th align="left" valign="top">Очередь сообщений Posix</th>
       <th align="left" valign="top">Очередь сообщений System V</th>
       <th align="left" valign="top">Двери</th>
       <th align="left" valign="top">Sun RPC TCP</th>
       <th align="left" valign="top">Sun RPC UDP</th>
       <th align="left" valign="top">Сокет TCP</th>
       <th align="left" valign="top">Сокет UDP</th>
       <th align="left" valign="top">Доменный сокет</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">Solaris 2.6</td>
       <td align="left" valign="top">324</td>
       <td align="left" valign="top">584</td>
       <td align="left" valign="top">260</td>
       <td align="left" valign="top">121</td>
       <td align="left" valign="top">1891</td>
       <td align="left" valign="top">1677</td>
       <td align="left" valign="top">798</td>
       <td align="left" valign="top">755</td>
       <td align="left" valign="top">465</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">DUnix 4.0B</td>
       <td align="left" valign="top">574</td>
       <td align="left" valign="top">995</td>
       <td align="left" valign="top">625</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">1648</td>
       <td align="left" valign="top">1373</td>
       <td align="left" valign="top">848</td>
       <td align="left" valign="top">639</td>
       <td align="left" valign="top">289 </td>
      </tr>
     </table>
     <empty-line/>
     <image l:href="#Any2FbImgLoader246"/>
     <p>Рис. А.1. Полоса пропускания средств передачи сообщений в Solaris 2.6.</p>
     <empty-line/>
     <p>В разделе A.4 мы приведем листинги программ, использованных для получения первых четырех величин, а оставшиеся три получены с помощью пакета lmbench. При измерении скорости работы TCP и UDP оба процесса находились на одном узле. </p>
     <empty-line/>
     <p>Таблица А.2. Полоса пропускания для разных типов сообщений в Solaris 2.6 (Мбайт/с)</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Размер сообщения</th>
       <th align="left" valign="top">Канал</th>
       <th align="left" valign="top">Очередь сообщений Posix</th>
       <th align="left" valign="top">Очередь сообщений System V</th>
       <th align="left" valign="top">Двери</th>
       <th align="left" valign="top">Sun RPC TCP</th>
       <th align="left" valign="top">Sun RPC UDP</th>
       <th align="left" valign="top">Сокет TCP</th>
       <th align="left" valign="top">Доменный сокет</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">1024</td>
       <td align="left" valign="top">6,3</td>
       <td align="left" valign="top">3,7</td>
       <td align="left" valign="top">4,9</td>
       <td align="left" valign="top">6,3</td>
       <td align="left" valign="top">0,5</td>
       <td align="left" valign="top">0,5</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">2048</td>
       <td align="left" valign="top">8,7</td>
       <td align="left" valign="top">5,3</td>
       <td align="left" valign="top">6,3</td>
       <td align="left" valign="top">10,0</td>
       <td align="left" valign="top">0,9</td>
       <td align="left" valign="top">1,0</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4096</td>
       <td align="left" valign="top">9,8</td>
       <td align="left" valign="top">8,4</td>
       <td align="left" valign="top">6,6</td>
       <td align="left" valign="top">12,6</td>
       <td align="left" valign="top">1,6</td>
       <td align="left" valign="top">2,8</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">8192</td>
       <td align="left" valign="top">12,7</td>
       <td align="left" valign="top">10,2</td>
       <td align="left" valign="top">5,8</td>
       <td align="left" valign="top">14,4</td>
       <td align="left" valign="top">2,4</td>
       <td align="left" valign="top">2,8</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">16384</td>
       <td align="left" valign="top">13,1</td>
       <td align="left" valign="top">11,6</td>
       <td align="left" valign="top">6,1</td>
       <td align="left" valign="top">16,8</td>
       <td align="left" valign="top">3,2</td>
       <td align="left" valign="top">3,4</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">32768</td>
       <td align="left" valign="top">13,2</td>
       <td align="left" valign="top">13,4</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">11,4</td>
       <td align="left" valign="top">3,5</td>
       <td align="left" valign="top">4,3</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">65536</td>
       <td align="left" valign="top">13,7</td>
       <td align="left" valign="top">14,4</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">12,2</td>
       <td align="left" valign="top">3,7</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">13,2</td>
       <td align="left" valign="top">11,3</td>
      </tr>
     </table>
     <empty-line/>
     <image l:href="#Any2FbImgLoader247"/>
     <p>Рис. А.2. Полоса пропускания для различных средств передачи сообщений (Digital Unix 4.0B)</p>
     <empty-line/>
     <p>Таблица А.З. Полоса пропускания для различных типов сообщения в Digital Unix 4.0B (Мбайт/с)</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Размер сообщения</th>
       <th align="left" valign="top">Канал</th>
       <th align="left" valign="top">Очередь сообщений Posix</th>
       <th align="left" valign="top">Очередь сообщений System V</th>
       <th align="left" valign="top">Sun RPC TCP</th>
       <th align="left" valign="top">Sun RPC UDP</th>
       <th align="left" valign="top">Сокет TCP</th>
       <th align="left" valign="top">Доменный сокет</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">1024</td>
       <td align="left" valign="top">9,9</td>
       <td align="left" valign="top">1,8</td>
       <td align="left" valign="top">12,7</td>
       <td align="left" valign="top">0,6</td>
       <td align="left" valign="top">0,6</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">2048</td>
       <td align="left" valign="top">15,2</td>
       <td align="left" valign="top">3,5</td>
       <td align="left" valign="top">15,0</td>
       <td align="left" valign="top">0,8</td>
       <td align="left" valign="top">1,0</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4096</td>
       <td align="left" valign="top">17,1</td>
       <td align="left" valign="top">5,9</td>
       <td align="left" valign="top">21,1</td>
       <td align="left" valign="top">1,3</td>
       <td align="left" valign="top">1,8</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">8192</td>
       <td align="left" valign="top">16,5</td>
       <td align="left" valign="top">8,6</td>
       <td align="left" valign="top">17,1</td>
       <td align="left" valign="top">1,8</td>
       <td align="left" valign="top">2,5</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">16384</td>
       <td align="left" valign="top">17,3</td>
       <td align="left" valign="top">11,7</td>
       <td align="left" valign="top">17,3</td>
       <td align="left" valign="top">2,3</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">32768</td>
       <td align="left" valign="top">15,9</td>
       <td align="left" valign="top">14,0</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">2,6</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">65536</td>
       <td align="left" valign="top">14,2</td>
       <td align="left" valign="top">9,4</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">2,8</td>
       <td align="left" valign="top"/>
       <td align="left" valign="top">4,6</td>
       <td align="left" valign="top">18,0</td>
      </tr>
     </table>
    </section>
    <section>
     <title>
      <p>Результаты синхронизации потоков</p>
     </title>
     <p>В табл. А.4 приведены значения времени, нужного одному или нескольким потокам для увеличения счетчика в разделяемой памяти с использованием различных средств синхронизации в Solaris 2.6, а на рис. А.3 показан график этих значений. Каждый поток увеличивает значение счетчика 1000000 раз, а количество потоков меняется от 1 до 5. В табл. А.5 приведены эти же значения для Digital Unix 4.0В, а на рис. А.4 — график этих значений. </p>
     <image l:href="#Any2FbImgLoader248"/>
     <p>Рис. А.З. Время увеличения счетчика в разделяемой памяти (Solaris 2.6)</p>
     <empty-line/>
     <p>Мы увеличиваем количество потоков, чтобы проверить правильность кода. Кроме того, при добавлении потоков время работы программы может начать расти нелинейно. Блокировка fcntl может использоваться только одним потоком, поскольку эта форма синхронизации предназначена только для использования между несколькими процессами, а не потоками одного процесса. </p>
     <p>В Digital Unix 4.0B значения для семафоров Posix оказываются непомерно большими, если работает более одного потока, что указывает на наличие какой-то аномалии. На графике мы эти значения не приводим.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Одна из возможных причин этой аномалии заключается в том, что в этой программе синхронизация проверяется неправильно. В данном случае потоки не делают ничего полезного, и все время уходит на синхронизацию. Поскольку потоки создаются с внутрипроцессной конкуренцией, при потере управления потоком блокировка сохраняется, поэтому поток, получающий управление, выполняться дальше не может. </p>
     </cite>
     <image l:href="#Any2FbImgLoader249"/>
     <p>Рис.А.4. Время увеличения счетчика в разделяемой памяти (Digital Unix 4.0B)</p>
     <empty-line/>
     <p>Таблица А.4. Время увеличения счетчика в разделяемой памяти для Solaris 2.6 (в секундах)</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Кол-во потоков</th>
       <th align="left" valign="top">Взаимное исключение Posix</th>
       <th align="left" valign="top">Блокировка чтения-записи</th>
       <th align="left" valign="top">Семафор Posix в памяти</th>
       <th align="left" valign="top">Именованный семафор Posix</th>
       <th align="left" valign="top">Семафор System V</th>
       <th align="left" valign="top">Семафор System V с UNDO</th>
       <th align="left" valign="top">Блокировка записей fcntl</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">1</td>
       <td align="left" valign="top">0,7</td>
       <td align="left" valign="top">2,0</td>
       <td align="left" valign="top">4,5</td>
       <td align="left" valign="top">15,4</td>
       <td align="left" valign="top">16,3</td>
       <td align="left" valign="top">21,1</td>
       <td align="left" valign="top">89,4</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">2</td>
       <td align="left" valign="top">1,5</td>
       <td align="left" valign="top">5,4</td>
       <td align="left" valign="top">9,0</td>
       <td align="left" valign="top">31,1</td>
       <td align="left" valign="top">31,5</td>
       <td align="left" valign="top">37,5</td>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">3</td>
       <td align="left" valign="top">2,2</td>
       <td align="left" valign="top">7,5</td>
       <td align="left" valign="top">14,4</td>
       <td align="left" valign="top">46,5</td>
       <td align="left" valign="top">48,3</td>
       <td align="left" valign="top">57,7</td>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4</td>
       <td align="left" valign="top">2,9</td>
       <td align="left" valign="top">13,7</td>
       <td align="left" valign="top">18,2</td>
       <td align="left" valign="top">62,5</td>
       <td align="left" valign="top">65,8</td>
       <td align="left" valign="top">75,8</td>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">5</td>
       <td align="left" valign="top">3,7</td>
       <td align="left" valign="top">19,7</td>
       <td align="left" valign="top">22,8</td>
       <td align="left" valign="top">76,8</td>
       <td align="left" valign="top">81,8</td>
       <td align="left" valign="top">90,0</td>
       <td align="left" valign="top"/>
      </tr>
     </table>
     <empty-line/>
     <p>Таблица А.5. Время увеличения счетчика в разделяемой памяти в Digital Unix 4.0B (в секундах) </p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Кол-во потоков</th>
       <th align="left" valign="top">Взаимное исключение Posix</th>
       <th align="left" valign="top">Блокировка чтения-записи</th>
       <th align="left" valign="top">Семафор Posix в памяти</th>
       <th align="left" valign="top">Именованный семафор Posix</th>
       <th align="left" valign="top">Семафор System V</th>
       <th align="left" valign="top">Семафор System V с UNDO</th>
       <th align="left" valign="top">Блокировка записей fcntl</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">1</td>
       <td align="left" valign="top">2,9</td>
       <td align="left" valign="top">12,9</td>
       <td align="left" valign="top">13,2</td>
       <td align="left" valign="top">14,2</td>
       <td align="left" valign="top">26,6</td>
       <td align="left" valign="top">46,6</td>
       <td align="left" valign="top">96,4</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">2</td>
       <td align="left" valign="top">11,4</td>
       <td align="left" valign="top">40,8</td>
       <td align="left" valign="top">742,5</td>
       <td align="left" valign="top">771,6</td>
       <td align="left" valign="top">54,9</td>
       <td align="left" valign="top">93,9</td>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">3</td>
       <td align="left" valign="top">28,4</td>
       <td align="left" valign="top">73,2</td>
       <td align="left" valign="top">1080,5</td>
       <td align="left" valign="top">1074,5</td>
       <td align="left" valign="top">84,5</td>
       <td align="left" valign="top">141,9</td>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4</td>
       <td align="left" valign="top">49,3</td>
       <td align="left" valign="top">95,0</td>
       <td align="left" valign="top">1534,1</td>
       <td align="left" valign="top">1502,2</td>
       <td align="left" valign="top">109,9</td>
       <td align="left" valign="top">188,4</td>
       <td align="left" valign="top"/>
      </tr>
      <tr align="left">
       <td align="left" valign="top">5</td>
       <td align="left" valign="top">67,3</td>
       <td align="left" valign="top">126,3</td>
       <td align="left" valign="top">1923,3</td>
       <td align="left" valign="top">1764,1</td>
       <td align="left" valign="top">137,3</td>
       <td align="left" valign="top">233,6</td>
       <td align="left" valign="top"/>
      </tr>
     </table>
    </section>
    <section>
     <title>
      <p>Результаты синхронизации процессов</p>
     </title>
     <p> В табл. А.4 и А.5 и на соответствующих рисунках были приведены результаты синхронизации потоков одного процесса. Интересно посмотреть, как взаимодействуют разные процессы. В табл. А.6 и на рис. А.5 приведены результаты измерения времени увеличения счетчика несколькими процессами в Solaris 2.6, а в табл. А.7 и на рис. А.6 — в Digital Unix 4.0B. Результаты похожи на полученные для потоков, однако в Solaris 2.6 теперь получаются одинаковые результаты для первых двух типов семафоров. Мы приводим на графике только первое значение для fcntl, поскольку последующие слишком велики. Как отмечалось в разделе 7.2, Digital Unix 4.0B не поддерживает атрибут PTHREAD_PROCESS_SHARED, поэтому мы не можем измерить скорость работы взаимных исключений в этой системе. Для семафоров Posix в Digital Unix 4.0B опять наблюдаются аномалии. </p>
     <image l:href="#Any2FbImgLoader250"/>
     <p>Рис. А.5. Время увеличения счетчика в разделяемой памяти (Solaris 2.6)</p>
     <image l:href="#_.jpg"/>
     <p>Рис. А.6. Время увеличения счетчика в разделяемой памяти </p>
     <empty-line/>
     <p>Таблица А.6. Время увеличения счетчика в разделяемой памяти для Solaris 2.6 (в секундах) </p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Кол-во процессов</th>
       <th align="left" valign="top">Взаимное исключение Posix</th>
       <th align="left" valign="top">Блокировка чтения-записи</th>
       <th align="left" valign="top">Семафор Posix в памяти</th>
       <th align="left" valign="top">Именованный семафор Posix</th>
       <th align="left" valign="top">Семафор System V</th>
       <th align="left" valign="top">Семафор System V с UNDO</th>
       <th align="left" valign="top">Блокировка записей fcntl</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">1</td>
       <td align="left" valign="top">0,8</td>
       <td align="left" valign="top">1,6</td>
       <td align="left" valign="top">13,6</td>
       <td align="left" valign="top">14,3</td>
       <td align="left" valign="top">17,3</td>
       <td align="left" valign="top">22,1</td>
       <td align="left" valign="top">90,7</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">2</td>
       <td align="left" valign="top">1,6</td>
       <td align="left" valign="top">3,9</td>
       <td align="left" valign="top">29,2</td>
       <td align="left" valign="top">29,2</td>
       <td align="left" valign="top">34,9</td>
       <td align="left" valign="top">41,6</td>
       <td align="left" valign="top">244,5</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">3</td>
       <td align="left" valign="top">2,3</td>
       <td align="left" valign="top">6,4</td>
       <td align="left" valign="top">41,6</td>
       <td align="left" valign="top">42,9</td>
       <td align="left" valign="top">54,0</td>
       <td align="left" valign="top">60,1</td>
       <td align="left" valign="top">376,4</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4</td>
       <td align="left" valign="top">3,1</td>
       <td align="left" valign="top">12,2</td>
       <td align="left" valign="top">57,3</td>
       <td align="left" valign="top">58,8</td>
       <td align="left" valign="top">72,4</td>
       <td align="left" valign="top">81,9</td>
       <td align="left" valign="top">558,0</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">5</td>
       <td align="left" valign="top">4,0</td>
       <td align="left" valign="top">20,4</td>
       <td align="left" valign="top">70,4</td>
       <td align="left" valign="top">73,5</td>
       <td align="left" valign="top">87,8</td>
       <td align="left" valign="top">102,6</td>
       <td align="left" valign="top">764,0</td>
      </tr>
     </table>
     <empty-line/>
     <p>Таблица А.7. Время увеличения счетчика в разделяемой памяти для Digital Unix 4.0B (в секундах)</p>
     <table>
      <tr align="left">
       <th align="left" valign="top">Количество процессов</th>
       <th align="left" valign="top">Семафор Posix в памяти</th>
       <th align="left" valign="top">Именованный семафор Posix</th>
       <th align="left" valign="top">Семафор System V</th>
       <th align="left" valign="top">Семафор System V с UNDO</th>
       <th align="left" valign="top">Блокировка записей fcntl</th>
      </tr>
      <tr align="left">
       <td align="left" valign="top">1</td>
       <td align="left" valign="top">12,8</td>
       <td align="left" valign="top">12,5</td>
       <td align="left" valign="top">30,1</td>
       <td align="left" valign="top">49,0</td>
       <td align="left" valign="top">98,1</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">2</td>
       <td align="left" valign="top">664,8</td>
       <td align="left" valign="top">659,2</td>
       <td align="left" valign="top">58,6</td>
       <td align="left" valign="top">95,7</td>
       <td align="left" valign="top">477,1</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">3</td>
       <td align="left" valign="top">1236,1</td>
       <td align="left" valign="top">1269,8</td>
       <td align="left" valign="top">96,4</td>
       <td align="left" valign="top">146,2</td>
       <td align="left" valign="top">1785,2</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">4</td>
       <td align="left" valign="top">1772,9</td>
       <td align="left" valign="top">1804,1</td>
       <td align="left" valign="top">120,3</td>
       <td align="left" valign="top">197,0</td>
       <td align="left" valign="top">2582,8</td>
      </tr>
      <tr align="left">
       <td align="left" valign="top">5</td>
       <td align="left" valign="top">2179,9</td>
       <td align="left" valign="top">2196,8</td>
       <td align="left" valign="top">147,7</td>
       <td align="left" valign="top">250,9</td>
       <td align="left" valign="top">3419,2</td>
      </tr>
     </table>
    </section>
   </section>
   <section>
    <title>
     <p>А.З. Измерение полосы пропускания: программы</p>
    </title>
    <section>
     <p>В этом разделе приведены тексты трех программ, измеряющих полосу пропускания каналов, очередей сообщений Posix и System V. Результаты работы этих программ приведены в табл. А.2 и А.З.</p>
    </section>
    <section>
     <title>
      <p>Измерение полосы пропускания канала</p>
     </title>
     <p>На рис. А.7 приведена схема описываемой программы.</p>
     <image l:href="#Any2FbImgLoader252"/>
     <p>Рис. А.7. Схема программы измерения полосы пропускания канала</p>
     <empty-line/>
     <p>В листинге А.1 приведен текст первой половины программы bw_pipe, измеряющей полосу пропускания канала.</p>
     <subtitle>Листинг А.1. Функция main, измеряющая полосу пропускания канала</subtitle>
     <p><code>//bench/bw_pipe.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  void reader(int, int, int);</code></p>
     <p><code>3  void writer(int, int);</code></p>
     <p><code>4  void *buf;</code></p>
     <p><code>5  int totalnbytes, xfersize;</code></p>
     <empty-line/>
     <p><code>6  int</code></p>
     <p><code>7  main(int argc, char **argv)</code></p>
     <p><code>8  {</code></p>
     <p><code>9   int i, nLoop, contpipe[2], datapipe[2];</code></p>
     <p><code>10  pid_t childpid;</code></p>
     <p><code>11  if (argc != 4)</code></p>
     <p><code>12   err_quit("usage: bw_pipe &lt;#loops&gt; &lt;#mbytes&gt; &lt;#bytes/write&gt;");</code></p>
     <p><code>13  nloop = atoi(argv[1]);</code></p>
     <p><code>14  totalnbytes = atoi(argv[2]) * 1024 * 1024;</code></p>
     <p><code>15  xfersize = atoi(argv[3]);</code></p>
     <p><code>16  buf = Valloc(xfersize);</code></p>
     <p><code>17  Touch(buf, xfersize);</code></p>
     <p><code>18  Pipe(contpipe);</code></p>
     <p><code>19  Pipe(datapipe);</code></p>
     <p><code>20  if ((childpid = Fork()) == 0) {</code></p>
     <p><code>21   writer(contpipe[0], datapipe[1]); /* child */</code></p>
     <p><code>22   exit(0);</code></p>
     <p><code>23  }</code></p>
     <p><code>24  /* 4parent */</code></p>
     <p><code>25  Start_time();</code></p>
     <p><code>26  for (i = 0; i &lt; nloop; i++)</code></p>
     <p><code>27   reader(contpipe[1], datapipe[0], totalnbytes);</code></p>
     <p><code>28  printf("bandwidth: %.3f MB/sec\n",</code></p>
     <p><code>29   totalnbytes / Stop_time() * nloop);</code></p>
     <p><code>30  kill(childpid, SIGTERM);</code></p>
     <p><code>31  exit(0);</code></p>
     <p><code>32 }</code></p>
     <subtitle>Аргументы командной строки</subtitle>
     <p>11-15 Аргументы командной строки задают количество повторов (обычно 5), количество передаваемых мегабайтов (если указать 10, будет передано 10&#215;1024&#215;1024 байт) и количество байтов для каждой операции read и write (которое может принимать значения от 1024 до 65536 в наших измерениях).</p>
     <subtitle>Выделение буфера и помещение начального значения</subtitle>
     <p>16-17 Вызов valloc аналогичен malloc, но выделяемая память начинается с границы страницы памяти. Функция touch (листинг А.3) помещает 1 байт данных в каждую страницу буфера, заставляя ядро считать в память все страницы данного буфера. Мы всегда выполняем это перед проведением измерений.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Функция valloc не входит в стандарт Posix.1 и названа устаревшей в Unix 98. Она требовалась в ранних версиях спецификаций Х/Open, но уже не является необходимой. Обертка Valloc вызывает функцию malloc, если valloc недоступна.</p>
     </cite>
     <subtitle>Создание двух каналов</subtitle>
     <p>18-19 Создаются два канала: contpipe[0] и contpipe[1] используются для синхронизации процессов перед началом передачи, a datapipe[0] и datapipe[1] используются для передачи самих данных.</p>
     <subtitle>Вызов fork</subtitle>
     <p>20-31 Создается дочерний процесс, вызывающий функцию writer, а родительский процесс в это время вызывает функцию reader. Функция reader вызывается nlоор раз. Функция start_time вызывается непосредственно перед началом цикла, a stop_time — сразу после его окончания. Эти функции даны в листинге А.З. Полоса пропускания представляет собой количество байтов, переданных за все проходы цикла, поделенное на время, затраченное на передачу (stop_time возвращает количество микросекунд, прошедшее с момент запуска start_time). Затем дочерний процесс завершается сигналом SIGTERM и программа завершает свою работу. Вторая половина программы приведена в листинге А.2. Она состоит из функций reader и writer.</p>
     <subtitle>Листинг А.2. Функции reader и writer</subtitle>
     <p><code>//bench/bw_pipe.cvoid</code></p>
     <p><code>33 void</code></p>
     <p><code>34 writer(int contfd, int datafd)</code></p>
     <p><code>35 {</code></p>
     <p><code>36  int ntowrite;</code></p>
     <p><code>37  for(;;) {</code></p>
     <p><code>38   Read(contfd, &amp;ntowrite, sizeof(ntowrite));</code></p>
     <p><code>39   while (ntowrite &gt; 0) {</code></p>
     <p><code>40    Write(datafd, buf, xfersize);</code></p>
     <p><code>41    ntowrite –= xfersize;</code></p>
     <p><code>42   }</code></p>
     <p><code>43  }</code></p>
     <p><code>44 }</code></p>
     <empty-line/>
     <p><code>45 void</code></p>
     <p><code>46 reader(int contfd, int datafd, int nbytes)</code></p>
     <p><code>47 {</code></p>
     <p><code>48  ssize_t n;</code></p>
     <p><code>49  Write(contfd, &amp;nbytes, sizeof(nbytes));</code></p>
     <p><code>50  while ((nbytes &gt; 0) &amp;&amp;</code></p>
     <p><code>51   ((n = Read(datafd, buf, xfersize)) &gt; 0)) {</code></p>
     <p><code>52   nbytes –= n;</code></p>
     <p><code>53  }</code></p>
     <p><code>54 }</code></p>
     <subtitle>Функция writer</subtitle>
     <p>33-44 Функция writer представляет собой бесконечный цикл, вызываемый дочерним процессом. Он ожидает сообщения родительского процесса о готовности к приему данных, считывая целое число из управляющего канала. Это целое число определяет количество байтов, которое будет записано в канал данных. При получении этого числа дочерний процесс записывает данные в канал, отправляя их родителю. За один вызов write записывается xfersize байтов.</p>
     <subtitle>Функция reader</subtitle>
     <p>45-54 Эта функция вызывается родительским процессом в цикле. Каждый раз при вызове функции в управляющий канал записывается целое число, указывающее дочернему процессу на необходимость помещения соответствующего количества данных в канал данных. Затем функция вызывает read в цикле до тех пор, пока не будут приняты все данные.</p>
     <p>Текст функций start_time, stop_time и touch приведен в листинге А.З.</p>
     <subtitle>Листинг А.З. Функции start_sime, stop_time и touch</subtitle>
     <p><code>//lib/timing.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  static struct timeval tv_start, tv_stop;</code></p>
     <empty-line/>
     <p><code>3  int</code></p>
     <p><code>4  start_time(void)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   return(gettimeofday(&amp;tv_start, NULL));</code></p>
     <p><code>7  }</code></p>
     <empty-line/>
     <p><code>8  double</code></p>
     <p><code>9  stop_time(void)</code></p>
     <p><code>10 {</code></p>
     <p><code>11  double clockus;</code></p>
     <p><code>12  if (gettimeofday(&amp;tv_stop, NULL) == –1)</code></p>
     <p><code>13   return(0.0);</code></p>
     <p><code>14  tv_sub(&amp;tv_stop, &amp;tv_start);</code></p>
     <p><code>15  clockus = tv_stop.tv_sec * 1000000.0 + tv_stop.tv_usec;</code></p>
     <p><code>16  return(clockus);</code></p>
     <p><code>17 }</code></p>
     <empty-line/>
     <p><code>18 int</code></p>
     <p><code>19 touch(void *vptr, int nbytes)</code></p>
     <p><code>20 {</code></p>
     <p><code>21  char *cptr;</code></p>
     <p><code>22  static int pagesize = 0;</code></p>
     <p><code>23  if (pagesize == 0) {</code></p>
     <p><code>24   errno = 0;</code></p>
     <p><code>25 #ifdef _SC_PAGESIZE</code></p>
     <p><code>26   if ((pagesize = sysconf(_SC_PAGESIZE)) == –1)</code></p>
     <p><code>27    return(-1);</code></p>
     <p><code>28 #else</code></p>
     <p><code>29   pagesize = getpagesize(); /* BSD */</code></p>
     <p><code>30 #endif</code></p>
     <p><code>31  }</code></p>
     <p><code>32  cptr = vptr;</code></p>
     <p><code>33  while (nbytes &gt; 0) {</code></p>
     <p><code>34   *cptr = 1;</code></p>
     <p><code>35   cptr += pagesize;</code></p>
     <p><code>36   nbytes –= pagesize;</code></p>
     <p><code>37  }</code></p>
     <p><code>38  return(0);</code></p>
     <p><code>39 }</code></p>
     <p>Текст функции tv_sub приведен в листинге А.4. Она осуществляет вычитание двух структур timeval, сохраняя результат в первой структуре.</p>
     <subtitle>Листинг А.4. Функция tv_sub: вычитание двух структур timeval</subtitle>
     <p><code>//lib/tv_sub.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  void</code></p>
     <p><code>3  tv_sub(struct timeval *out, struct timeval *in)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   if ((out-&gt;tv_usec –= in-&gt;tv_usec) &lt; 0) { /* out –= in */</code></p>
     <p><code>6    --out-&gt;tv_sec;</code></p>
     <p><code>7    out-&gt;tv_usec += 1000000;</code></p>
     <p><code>8   }</code></p>
     <p><code>9   out-&gt;tv_sec –= in-&gt;tv_sec;</code></p>
     <p><code>10 }</code></p>
     <p>На компьютере Sparc под управлением Solaris 2.6 при выполнении программы пять раз подряд получим следующий результат:</p>
     <p><code>solaris % <strong>bw_pipe 5 10 65536</strong></code></p>
     <p><code>bandwidth: 13.722 MB/sec</code></p>
     <p><code>solaris % <strong>bw_pipe 5 10 65536</strong></code></p>
     <p><code>bandwidth: 13.781 MB/sec</code></p>
     <p><code>solaris % <strong>bw_pipe 5 10 65536</strong></code></p>
     <p><code>bandwidth: 13.685 MB/sec</code></p>
     <p><code>solaris % <strong>bw_pipe 5 10 65536</strong></code></p>
     <p><code>bandwidth: 13.665 MB/sec</code></p>
     <p><code>solaris % <strong>bw_pipe 5 10 65536</strong></code></p>
     <p><code>bandwidth: 13.584 MB/sec</code></p>
     <p>Каждый раз мы задаем пять циклов, 10 Мбайт за цикл и 65536 байт за один вызов write или read. Среднее от этих пяти результатов даст величину 13,7 Мбайт в секунду, приведенную в табл. А.2.</p>
    </section>
    <section>
     <title>
      <p>Измерение полосы пропускания очереди сообщений Posix</p>
     </title>
     <p>В листинге А.5 приведена функция main программы, измеряющей полосу пропускания очереди сообщений Posix. Листинг А.6 содержит функции reader и writer. Эта программа устроена аналогично предыдущей, измерявшей полосу пропускания канала.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Обратите внимание, что в программе приходится указывать максимальное количество сообщений в очереди при ее создании. Мы указываем значение 4. Размер канала IPC может влиять на производительность, потому что записывающий процесс может отправить это количество сообщений, прежде чем будет заблокирован в вызове mq_send, что приведет к переключению контекста на считывающий процесс. Следовательно, производительность программы зависит от этого магического числа. Изменение его с 4 на 8 в Solaris 2.6 никак не влияет на величины, приведенные в табл. А.2, но в Digital Unix 4.0B производительность уменьшается на 12%. Мы могли ожидать, что производительность возрастет с увеличением количества сообщений в очереди, поскольку требуется в два раза меньше переключений контекста. Однако если используется отображение файла в память, это увеличивает размер отображаемого файла в два раза, как и требуемое количество памяти.</p>
     </cite>
     <subtitle>Листинг А.5. Функция main для измерения полосы пропускания очереди сообщений Posix</subtitle>
     <p><code>//bench/bw_pxmsg.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define NAME "bw_pxmsg"</code></p>
     <p><code>3  void reader(int, mqd_t, int);</code></p>
     <p><code>4  void writer(int, mqd_t);</code></p>
     <p><code>5  void *buf;</code></p>
     <p><code>6  int totalnbytes, xfersize;</code></p>
     <empty-line/>
     <p><code>7  int</code></p>
     <p><code>8  main(int argc, char **argv)</code></p>
     <p><code>9  {</code></p>
     <p><code>10  int i, nloop, contpipe[2];</code></p>
     <p><code>11  mqd_t mq;</code></p>
     <p><code>12  pid_t childpid;</code></p>
     <p><code>13  struct mq_attr attr;</code></p>
     <p><code>14  if (argc != 4)</code></p>
     <p><code>15   err_quit("usage: bw_pxmsg &lt;#loops&gt; &lt;#mbytes&gt; &lt;#bytes/write&gt;");</code></p>
     <p><code>16  nloop = atoi(argv[1]);</code></p>
     <p><code>17  totalnbytes = atoi(argv[2]) * 1024 * 1024;</code></p>
     <p><code>18  xfersize = atoi(argv[3]);</code></p>
     <p><code>19  buf = Valloc(xfersize);</code></p>
     <p><code>20  Touch(buf, xfersize);</code></p>
     <p><code>21  Pipe(contpipe);</code></p>
     <p><code>22  mq_unlink(Px_ipc_name(NAME)); /* error OK */</code></p>
     <p><code>23  attr.mq_maxmsg = 4;</code></p>
     <p><code>24  attr.mq_msgsize = xfersize;</code></p>
     <p><code>25  mq = Mq_open(Px_ipc_name(NAME), O_RDWR | O_CREAT, FILE_MODE, &amp;attr);</code></p>
     <p><code>26  if ((childpid = Fork()) == 0) {</code></p>
     <p><code>27   writer(contpipe[0], mq); /* child */</code></p>
     <p><code>28   exit(0);</code></p>
     <p><code>29  }</code></p>
     <p><code>30  /* 4parent */</code></p>
     <p><code>31  Start_time();</code></p>
     <p><code>32  for (i = 0; i &lt; nloop; i++)</code></p>
     <p><code>33   reader(contpipe[1], mq, totalnbytes);</code></p>
     <p><code>34  printf("bandwidth: %.3f MB/sec\n",</code></p>
     <p><code>35  totalnbytes / Stop_time() * nloop);</code></p>
     <p><code>36  kill(childpid, SIGTERM);</code></p>
     <p><code>37  Mq_close(mq);</code></p>
     <p><code>38  Mq_unlink(Px_ipc_name(NAME));</code></p>
     <p><code>39  exit(0);</code></p>
     <p><code>40 }</code></p>
     <subtitle>Листинг А.6. Функции reader и writer</subtitle>
     <p><code>//bench/bw_pxmsg.c</code></p>
     <p><code>41 void</code></p>
     <p><code>42 writer(int contfd, mqd_t mqsend)</code></p>
     <p><code>43 {</code></p>
     <p><code>44  int ntowrite;</code></p>
     <p><code>45  for(;;) {</code></p>
     <p><code>46   Read(contfd, &amp;ntowrite, sizeof(ntowrite));</code></p>
     <p><code>47   while (ntowrite &gt; 0) {</code></p>
     <p><code>48    Mq_send(mqsend, buf, xfersize, 0);</code></p>
     <p><code>49    ntowrite –= xfersize;</code></p>
     <p><code>50   }</code></p>
     <p><code>51  }</code></p>
     <p><code>52 }</code></p>
     <empty-line/>
     <p><code>53 void</code></p>
     <p><code>54 reader(int contfd, mqd_t mqrecv, int nbytes)</code></p>
     <p><code>55 {</code></p>
     <p><code>56  ssize_t n;</code></p>
     <p><code>57  Write(contfd, &amp;nbytes, sizeof(nbytes));</code></p>
     <p><code>58  while ((nbytes &gt; 0) &amp;&amp;</code></p>
     <p><code>59   ((n = Mq_receive(mqrecv, buf, xfersize, NULL)) &gt; 0)) {</code></p>
     <p><code>60   nbytes –= n;</code></p>
     <p><code>61  }</code></p>
     <p><code>62 }</code></p>
    </section>
    <section>
     <title>
      <p>Программа измерения полосы пропускания очереди System V</p>
     </title>
     <p>В листинге А.7 приведен текст функции main, измеряющей полосу пропускания очередей сообщений System V, а в листинге А.8 <strong>—</strong>текст функций reader и writer.</p>
     <subtitle>Листинг А.7. Функция main для измерения полосы пропускания очереди сообщений System V</subtitle>
     <p><code>//bench/bw_svmsg.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  void reader(int, int, int);</code></p>
     <p><code>3  void writer(int, int);</code></p>
     <p><code>4  struct msgbuf *buf;</code></p>
     <p><code>5  int totalnbytes, xfersize;</code></p>
     <empty-line/>
     <p><code>6  int</code></p>
     <p><code>7  main(int argc, char **argv)</code></p>
     <p><code>8  {</code></p>
     <p><code>9   int i, nloop, contpipe[2], msqid;</code></p>
     <p><code>10  pid_t childpid;</code></p>
     <p><code>11  if (argc != 4)</code></p>
     <p><code>12   err_quit("usage: bw_svmsg &lt;#loops&gt; &lt;#mbytes&gt; &lt;#bytes/write&gt;");</code></p>
     <p><code>13  nloop = atoi(argv[1]);</code></p>
     <p><code>14  totalnbytes = atoi(argv[2]) * 1024 * 1024;</code></p>
     <p><code>15  xfersize = atoi(argv[3]);</code></p>
     <p><code>16  buf = Valloc(xfersize);</code></p>
     <p><code>17  Touch(buf, xfersize);</code></p>
     <p><code>18  buf-&gt;mtype = 1;</code></p>
     <p><code>19  Pipe(contpipe);</code></p>
     <p><code>20  msqid = Msgget(IPC_PRIVATE, IPC_CREAT | SVMSG_MODE);</code></p>
     <p><code>21  if ((childpid = Fork()) == 0) {</code></p>
     <p><code>22   writer(contpipe[0], msqid); /* дочерний процесс */</code></p>
     <p><code>23   exit(0);</code></p>
     <p><code>24  }</code></p>
     <p><code>25  Start_time();</code></p>
     <p><code>26  for (i = 0; i &lt; nloop; i++)</code></p>
     <p><code>27   reader(contpipe[1], msqid, totalnbytes);</code></p>
     <p><code>28  printf("bandwidth: %.3f MB/sec\n",</code></p>
     <p><code>29  totalnbytes / Stop_time() * nloop);</code></p>
     <p><code>30  kill(childpid, SIGTERM);</code></p>
     <p><code>31  Msgctl(msqid, IPC_RMID, NULL);</code></p>
     <p><code>32  exit(0);</code></p>
     <p><code>33 }</code></p>
     <subtitle>Листинг А.8. Функции reader и writer</subtitle>
     <p><code>//bench/bw_svmsg.c</code></p>
     <p><code>34 void</code></p>
     <p><code>35 writer(int contfd, int msqid)</code></p>
     <p><code>36 {</code></p>
     <p><code>37  int ntowrite;</code></p>
     <p><code>38  for (;;) {</code></p>
     <p><code>39   Read(contfd, &amp;ntowrite, sizeof(ntowrite));</code></p>
     <p><code>40   while (ntowrite &gt; 0) {</code></p>
     <p><code>41    Msgsnd(msqid, buf, xfersize – sizeof(long), 0);</code></p>
     <p><code>42    ntowrite –= xfersize;</code></p>
     <p><code>43   }</code></p>
     <p><code>44  }</code></p>
     <p><code>45 }</code></p>
     <empty-line/>
     <p><code>46 void</code></p>
     <p><code>47 reader(int contfd, int msqid, int nbytes)</code></p>
     <p><code>48 {</code></p>
     <p><code>49  ssize_t n;</code></p>
     <p><code>50  Write(contfd, &amp;nbytes, sizeof(nbytes));</code></p>
     <p><code>51  while ((nbytes &gt; 0) &amp;&amp;</code></p>
     <p><code>52   ((n = Msgrcv(msqid, buf, xfersize – sizeof(long), 0, 0)) &gt; 0)) {</code></p>
     <p><code>53   nbytes –= n + sizeof(long);</code></p>
     <p><code>54  }</code></p>
     <p><code>55 }</code></p>
    </section>
    <section>
     <title>
      <p><strong>Программа измерения полосы пропускания дверей</strong></p>
     </title>
     <p>Программа измерения полосы пропускания интерфейса дверей сложнее, чем предыдущие, поскольку нам нужно вызвать fork перед созданием двери. Родительский процесс создает дверь и с помощью канала оповещает дочерний процесс о том, что ее можно открывать.</p>
     <p>Другое изменение заключается в том, что в отличие от рис. А.7 функция reader не принимает данные. Данные принимаются функцией server, которая является процедурой сервера для данной двери. На рис. А.8 изображена схема программы. </p>
     <image l:href="#Any2FbImgLoader253"/>
     <p>Рис. А.8. Схема программы измерения полосы пропускания дверей</p>
     <empty-line/>
     <p>Поскольку двери поддерживаются только в Solaris, мы упростим программу, предполагая наличие двустороннего канала (раздел 4.4).</p>
     <p>Еще одно изменение вызвано фундаментальным различием между передачей сообщений и вызовом процедуры. В программе, работавшей с очередью сообщений Posix, например, записывающий процесс просто помещал сообщения в очередь в цикле, что осуществляется асинхронно. В какой-то момент очередь будет заполнена или записывающий процесс будет просто приостановлен, и тогда считывающий процесс получит сообщения. Если, например, в очередь помещается 8 сообщений и записывающий процесс помещал в нее 8 сообщений каждый раз, когда получал управление, а считывающий процесс считывал 8 сообщений, отправка N сообщений требовала N/4 переключения контекста. Интерфейс дверей является синхронным: вызывающий процесс блокируется каждый раз при вызове door_call и не может возобновиться до тех пор, пока сервер не завершит работу. Передача N сообщений в этом случае требует N/2 переключений контекста. С той же проблемой мы столкнемся при измерении полосы пропускания вызовов RPC. Несмотря на увеличившееся количество переключений контекста, из рис. А.1 следует, что двери обладают наибольшей полосой пропускания при размере сообщений не более 25 Кбайт.</p>
     <p>В листинге А.9 приведен текст функции main нашей программы. Функции writer, server и reader приведены в листинге А.10.</p>
     <subtitle>Листинг А.9. Функция main измерения полосы пропускания интерфейса дверей</subtitle>
     <p><code>//bench/bw_door.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  void reader(int, int);</code></p>
     <p><code>3  void writer(int);</code></p>
     <p><code>4  void server(void *, char *, size_t, door_desc_t *, size_t);</code></p>
     <p><code>5  void *buf;</code></p>
     <p><code>6  int totalnbytes, xfersize, contpipe[2];</code></p>
     <empty-line/>
     <p><code>7  int</code></p>
     <p><code>8  main(int argc, char **argv)</code></p>
     <p><code>9  {</code></p>
     <p><code>10  int i, nloop, doorfd;</code></p>
     <p><code>11  char c;</code></p>
     <p><code>12  pid_t childpid;</code></p>
     <p><code>13  ssize_t n;</code></p>
     <p><code>14  if (argc != 5)</code></p>
     <p><code>15   err_quit("usage: bw_door &lt;pathname&gt; &lt;#loops&gt; &lt;#mbytes&gt; &lt;#bytes/write&gt;");</code></p>
     <p><code>16  nloop = atoi(argv[2]);</code></p>
     <p><code>17  totalnbytes = atoi(argv[3]) * 1024 * 1024;</code></p>
     <p><code>18  xfersize = atoi(argv[4]);</code></p>
     <p><code>19  buf = Valloc(xfersize);</code></p>
     <p><code>20  Touch(buf, xfersize);</code></p>
     <p><code>21  unlink(argv[1]);</code></p>
     <p><code>22  Close(Open(argv[1], O_CREAT | O_EXCL | O_RDWR, FILE_MODE));</code></p>
     <p><code>23  Pipe(contpipe); /* предполагается наличие двустороннего канала SVR4 */</code></p>
     <p><code>24  if ((childpid = Fork()) == 0) {</code></p>
     <p><code>25   /* дочерний процесс = клиент */</code></p>
     <p><code>26   if ((n = Read(contpipe[0], &amp;c, 1)) != 1)</code></p>
     <p><code>27    err_quit("child: pipe read returned %d", n);</code></p>
     <p><code>28   doorfd = Open(argv[1], O_RDWR);</code></p>
     <p><code>29   writer(doorfd);</code></p>
     <p><code>30   exit(0);</code></p>
     <p><code>31  }</code></p>
     <p><code>32  /* родительский процесс = сервер */</code></p>
     <p><code>33  doorfd = Door_create(server, NULL, 0);</code></p>
     <p><code>34  Fattach(doorfd, argv[1]);</code></p>
     <p><code>35  Write(contpipe[1], &amp;c, 1); /* уведомление о готовности двери */</code></p>
     <p><code>36  Start_time();</code></p>
     <p><code>37  for (i = 0; i &lt; nloop; i++)</code></p>
     <p><code>38   reader(doorfd, totalnbytes);</code></p>
     <p><code>39  printf("bandwidth: %.3f MB/sec\n",</code></p>
     <p><code>40  totalnbytes / Stop_time() * nloop);</code></p>
     <p><code>41  kill(childpid, SIGTERM);</code></p>
     <p><code>42  unlink(argv[1]);</code></p>
     <p><code>43  exit(0);</code></p>
     <p><code>44 }</code></p>
     <subtitle>Листинг A.10. Функции writer, server, reader для интерфейса дверей</subtitle>
     <p><code>//bench/bw_door.c</code></p>
     <p><code>45 void</code></p>
     <p><code>46 writer(int doorfd)</code></p>
     <p><code>47 {</code></p>
     <p><code>48  int ntowrite;</code></p>
     <p><code>49  door_arg_t arg;</code></p>
     <p><code>50  arg.desc_ptr = NULL; /* дескрипторы не передаются */</code></p>
     <p><code>51  arg.desc_num = 0;</code></p>
     <p><code>52  arg.rbuf = NULL; /* значения не возвращаются */</code></p>
     <p><code>53  arg.rsize = 0;</code></p>
     <p><code>54  for(;;) {</code></p>
     <p><code>55   Read(contpipe[0], &amp;ntowrite, sizeof(ntowrite));</code></p>
     <p><code>56   while (ntowrite &gt; 0) {</code></p>
     <p><code>57    arg.data_ptr = buf;</code></p>
     <p><code>58    arg.data_size = xfersize;</code></p>
     <p><code>59    Door_call(doorfd, &amp;arg);</code></p>
     <p><code>60    ntowrite –= xfersize;</code></p>
     <p><code>61   }</code></p>
     <p><code>62  }</code></p>
     <p><code>63 }</code></p>
     <empty-line/>
     <p><code>64 static int ntoread, nread;</code></p>
     <empty-line/>
     <p><code>65 void</code></p>
     <p><code>66 server(void *cookie, char *argp, size_t arg_size,</code></p>
     <p><code>67  door_desc_t *dp, size_t n_descriptors)</code></p>
     <p><code>68 {</code></p>
     <p><code>69  char c;</code></p>
     <p><code>70  nread += arg_size;</code></p>
     <p><code>71  if (nread &gt;= ntoread)</code></p>
     <p><code>72   Write(contpipe[0], &amp;c, 1); /* запись закончена */</code></p>
     <p><code>73  Door_return(NULL, 0, NULL, 0);</code></p>
     <p><code>74 }</code></p>
     <empty-line/>
     <p><code>75 void</code></p>
     <p><code>76 reader(int doorfd, int nbytes)</code></p>
     <p><code>77 {</code></p>
     <p><code>78  char c;</code></p>
     <p><code>79  ssize_t n;</code></p>
     <p><code>80  ntoread = nbytes; /* глобальные переменные процедуры сервера */</code></p>
     <p><code>81  nread = 0;</code></p>
     <p><code>82  Write(contpipe[1], &amp;nbytes, sizeof(nbytes));</code></p>
     <p><code>83  if ((n = Read(contpipe[1], &amp;c, 1)) != 1)</code></p>
     <p><code>84   err_quit("reader: pipe read returned %d", n);</code></p>
     <p><code>85 }</code></p>
    </section>
    <section>
     <title>
      <p>Программа определения полосы пропускания Sun RPC</p>
     </title>
     <p>Поскольку вызовы процедур в Sun RPC являются синхронными, для них действует то же ограничение, что и для дверей (см. выше). В данном случае проще создать две программы (клиент и сервер), поскольку они создаются автоматически программой rpcgen. В листинге А.11 приведен файл спецификации RPC. Мы объявляем единственную процедуру, принимающую скрытые данные переменной длины в качестве входного аргумента и ничего не возвращающую.</p>
     <p>В листинге А.12 приведен текст программы-клиента, а в листинге А.13 — процедура сервера. Мы указываем протокол в качестве аргумента командной строки при вызове клиента, что позволяет нам измерить скорость работы обоих протоколов.</p>
     <subtitle>Листинг А.11. Спецификация RPC для измерения полосы пропускания RPC</subtitle>
     <p><code>//bench/bw_sunrpc.х</code></p>
     <p><code>1 %#define DEBUG /* сервер выполняется в приоритетном режиме */</code></p>
     <empty-line/>
     <p><code>2 struct data_in {</code></p>
     <p><code>3  opaque data&lt;&gt;; /* скрытые данные переменной длины */</code></p>
     <p><code>4 };</code></p>
     <empty-line/>
     <p><code>5 program BW_SUNRPC_PROG {</code></p>
     <p><code>6  version BW_SUNRPC_VERS {</code></p>
     <p><code>7   void BW_SUNRPC(data_in) = 1;</code></p>
     <p><code>8  } = 1;</code></p>
     <p><code>9 } = 0x31230001;</code></p>
     <subtitle>Листинг A.12. Клиент RPC для измерения полосы пропускания</subtitle>
     <p><code>//bench/bw_sunrpc_client.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #include "bw_sunrpc.h"</code></p>
     <empty-line/>
     <p><code>3  void *buf;</code></p>
     <p><code>4  int totalnbytes, xfersize;</code></p>
     <empty-line/>
     <p><code>5  int</code></p>
     <p><code>6  main(int argc, char **argv)</code></p>
     <p><code>7  {</code></p>
     <p><code>8   int i, nloop, ntowrite;</code></p>
     <p><code>9   CLIENT *cl;</code></p>
     <p><code>10  data_in in;</code></p>
     <p><code>11  if (argc != 6)</code></p>
     <p><code>12   err_quit("usage: bw_sunrpc_client &lt;hostname&gt; &lt;#loops&gt;"</code></p>
     <p><code>13   " &lt;#mbytes&gt; &lt;#bytes/write&gt; &lt;protocol&gt;");</code></p>
     <p><code>14  nloop = atoi(argv[2]);</code></p>
     <p><code>15  totalnbytes = atoi(argv[3]) * 1024 * 1024;</code></p>
     <p><code>16  xfersize = atoi(argv[4]);</code></p>
     <p><code>17  buf = Valloc(xfersize);</code></p>
     <p><code>18  Touch(buf, xfersize);</code></p>
     <p><code>19  cl = Clnt_create(argv[1], BW_SUNRPC_PROG, BW_SUNRPC_VERS, argv[5]);</code></p>
     <p><code>20  Start_time();</code></p>
     <p><code>21  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>22   ntowrite = totalnbytes;</code></p>
     <p><code>23   while (ntowrite &gt; 0) {</code></p>
     <p><code>24    in.data.data_len = xfersize;</code></p>
     <p><code>25    in.data.data_val = buf;</code></p>
     <p><code>26    if (bw_sunrpc_1(&amp;in, cl) == NULL)</code></p>
     <p><code>27     err_quit("%s", clnt_sperror(cl, argv[1]));</code></p>
     <p><code>28    ntowrite –= xfersize;</code></p>
     <p><code>29   }</code></p>
     <p><code>30  }</code></p>
     <p><code>31  printf("bandwidth: %.3f MB/sec\n",</code></p>
     <p><code>32   totalnbytes / Stop_time() * nloop);</code></p>
     <p><code>33  exit(0);</code></p>
     <p><code>34 }</code></p>
     <subtitle>Листинг A.13. Процедура сервера для измерения полосы пропускания RPC</subtitle>
     <p><code>//bench/bw_sunrpc_server.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #include "bw_sunrpc.h"</code></p>
     <p><code>3  #ifndef RPCGEN_ANSIC</code></p>
     <p><code>4  #define bw_sunrpc_1_svc bw_sunrpc_1</code></p>
     <p><code>5  #endif</code></p>
     <empty-line/>
     <p><code>6  void *</code></p>
     <p><code>7  bw_sunrpc_1_svc(data_in *inp, struct svc_req *rqstp)</code></p>
     <p><code>8  {</code></p>
     <p><code>9   static int nbytes;</code></p>
     <p><code>10  nbytes = inp-&gt;data.data_len;</code></p>
     <p><code>11  return(&amp;nbytes); /* должен быть ненулевым, но xdr_void игнорирует */</code></p>
     <p><code>12 }</code></p>
    </section>
   </section>
   <section>
    <title>
     <p>А.4. Измерение задержки передачи сообщений: программы</p>
    </title>
    <section>
     <p>Приведем текст трех программ, измеряющих задержку при передаче сообщений по каналам, очередям Posix и очередям System V. Данные о производительности, полученные с их помощью, приведены в табл. А.1.</p>
    </section>
    <section>
     <title>
      <p>Программа измерения задержки канала</p>
     </title>
     <p>Программа для измерения задержки канала приведена в листинге А.14.</p>
     <subtitle>Листинг А.14. Программа измерения задержки канала</subtitle>
     <p><code>//bench/lat_pipe.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  void</code></p>
     <p><code>3  doit(int readfd, int writefd)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   char c;</code></p>
     <p><code>6   Write(writefd, &amp;c, 1);</code></p>
     <p><code>7   if (Read(readfd, &amp;c, 1) != 1)</code></p>
     <p><code>8    err_quit("read error");</code></p>
     <p><code>9  }</code></p>
     <empty-line/>
     <p><code>10 int</code></p>
     <p><code>11 main(int argc, char **argv)</code></p>
     <p><code>12 {</code></p>
     <p><code>13  int i, nloop, pipe1[2], pipe2[2];</code></p>
     <p><code>14  char c;</code></p>
     <p><code>15  pid_t childpid;</code></p>
     <p><code>16  if (argc != 2)</code></p>
     <p><code>17   err_quit("usage: lat_pipe &lt;#loops&gt;");</code></p>
     <p><code>18  nloop = atoi(argv[1]);</code></p>
     <p><code>19  Pipe(pipe1);</code></p>
     <p><code>20  Pipe(pipe2);</code></p>
     <p><code>21  if ((childpid = Fork()) == 0) {</code></p>
     <p><code>22   for(;;) { /* дочерний процесс */</code></p>
     <p><code>23    if (Read(pipe1[0], &amp;c, 1) != 1)</code></p>
     <p><code>24     err_quit("read error");</code></p>
     <p><code>25    Write(pipe2[1], &amp;c, 1);</code></p>
     <p><code>26   }</code></p>
     <p><code>27   ехit(0);</code></p>
     <p><code>28  }</code></p>
     <p><code>29  /* родительский процесс */</code></p>
     <p><code>30  doit(pipe2[0], pipe1[1]);</code></p>
     <p><code>31  Start_time();</code></p>
     <p><code>32  for (i = 0; i &lt; nloop; i++)</code></p>
     <p><code>33   doit(pipe2[0], pipe1[1]);</code></p>
     <p><code>34  printf("latency: %.3f usec\n", Stop_time() / nloop);</code></p>
     <p><code>35  Kill(childpid, SIGTERM);</code></p>
     <p><code>36  exit(0);</code></p>
     <p><code>37 }</code></p>
     <subtitle>Функция doit</subtitle>
     <p>2-9 Эта функция запускается родительским процессом. Мы измеряем время ее работы. Она помещает 1 байт в канал, из которого читает дочерний процесс, и считывает 1 байт из другого канала, в который сообщение помещается дочерним процессом. При этом измеряется именно то, что мы назвали задержкой, — время передачи небольшого сообщения туда и обратно.</p>
     <subtitle>Создание каналов</subtitle>
     <p>19-20 Создаются два канала, после чего вызов fork порождает дочерний процесс. При этом образуется схема, изображенная на рис. 4.6 (но без закрытия неиспользуемых дескрипторов каналов). Для этого теста требуются два канала, поскольку каналы являются односторонними, а мы хотим передавать сообщение в обе стороны.</p>
     <subtitle>Дочерний процесс отсылает обратно сообщение</subtitle>
     <p>22-27 Дочерний процесс представляет собой бесконечный цикл, в котором однобайтовое сообщение считывается и отсылается обратно.</p>
     <subtitle>Измерение времени работы родительского процесса</subtitle>
     <p>29-34 Родительский процесс вызывает функцию doit для отправки однобайтового сообщения дочернему процессу и получения ответа. После этого мы имеем гарантию, что оба процесса выполняются. Затем функция doit вызывается в цикле с измерением времени задержки.</p>
     <p>На компьютере Sparc под управлением Solaris 2.6 при запуске программы пять раз подряд мы получим вот что:</p>
     <p><code>solaris % <strong>lat_pipe 10000</strong></code></p>
     <p><code>latency: 278.633 usec</code></p>
     <p><code>solaris % <strong>lat_pipe 10000</strong></code></p>
     <p><code>latency: 397.810 usec</code></p>
     <p><code>solaris % <strong>lat_pipe 10000</strong></code></p>
     <p><code>latency: 392.567 usec</code></p>
     <p><code>solaris % <strong>lat_pipe 10000</strong></code></p>
     <p><code>latency: 266.572 usec</code></p>
     <p><code>solaris % <strong>lat_pipe 10000</strong></code></p>
     <p><code>latency: 284.559 usec</code></p>
     <p>Среднее для пяти попыток составляет 324 микросекунды, и именно это значение приведено в табл. А.1. Это время учитывает два переключения контекста (от родительского процесса к дочернему и обратно), четыре системных вызова (write, read, write, read) и затраты на передачу 1 байта данных по каналу.</p>
    </section>
    <section>
     <title>
      <p>Программа измерения задержки очередей сообщений Posix</p>
     </title>
     <p>Пpoгрaммa измерения задержки для очередей сообщений Posix приведена в листинге А.15.</p>
     <subtitle>Листинг А. 15. Программа измерения задержки для очереди сообщений Posix</subtitle>
     <p><code>//bench/lat_pxmsg.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define NAME1 "lat_pxmsg1"</code></p>
     <p><code>3  #define NAME2 "lat_pxmsg2"</code></p>
     <p><code>4  #define MAXMSG 4 /* место для 4096 байт в очереди */</code></p>
     <p><code>5  #define MSGSIZE 1024</code></p>
     <empty-line/>
     <p><code>6  void</code></p>
     <p><code>7  doit(mqd_t mqsend, mqd_t mqrecv)</code></p>
     <p><code>8  {</code></p>
     <p><code>9   char buff[MSGSIZE];</code></p>
     <p><code>10  Mq_send(mqsend, buff, 1.0);</code></p>
     <p><code>11  if (Mq_receive(mqrecv, buff, MSGSIZE, NULL) != 1)</code></p>
     <p><code>12   err_quit("mq_receive error");</code></p>
     <p><code>13 }</code></p>
     <empty-line/>
     <p><code>14 int</code></p>
     <p><code>15 main(int argc, char **argv)</code></p>
     <p><code>16 {</code></p>
     <p><code>17  int i, nloop;</code></p>
     <p><code>18  mqd_t mq1, mq2;</code></p>
     <p><code>19  char buff[MSGSIZE];</code></p>
     <p><code>20  pid_t childpid;</code></p>
     <p><code>21  struct mq_attr attr;</code></p>
     <p><code>22  if (argc != 2)</code></p>
     <p><code>23   err_quit("usage: lat_pxmsg &lt;#loops&gt;");</code></p>
     <p><code>24  nloop = atoi(argv[1]);</code></p>
     <p><code>25  attr.mq_maxmsg = MAXMSG;</code></p>
     <p><code>26  attr.mq_msgsize = MSGSIZE;</code></p>
     <p><code>27  mq1 = Mq_open(Px_ipc_name(NAME1), O_RDWR | O_CREAT, FILE_MODE, &amp;attr);</code></p>
     <p><code>28  mq2 = Mq_open(Px_ipc_name(NAME2), O_RDWR | O_CREAT, FILE_MODE, &amp;attr);</code></p>
     <p><code>29  if ((childpid = Fork()) == 0) {</code></p>
     <p><code>30   for(;;) { /* дочерний процесс */</code></p>
     <p><code>31    if (Mq_receive(mq1, buff, MSGSIZE, NULL) != 1)</code></p>
     <p><code>32     err_quit("mq_receive error");</code></p>
     <p><code>33    Mq_send(mq2, buff, 1.0);</code></p>
     <p><code>34   }</code></p>
     <p><code>35   exit(0);</code></p>
     <p><code>36  }</code></p>
     <p><code>37  /* родительский процесс */</code></p>
     <p><code>38  doit(mq1, mq2);</code></p>
     <p><code>39  Start_time();</code></p>
     <p><code>40  for (i = 0; i &lt; nloop; i++)</code></p>
     <p><code>41   doit(mq1, mq2);</code></p>
     <p><code>42  printf("latency: %.3f usec\n", Stop_time() / nloop);</code></p>
     <p><code>43  Kill(childpid, SIGTERM);</code></p>
     <p><code>44  Mq_close(mq1);</code></p>
     <p><code>45  Mq_close(mq2);</code></p>
     <p><code>46  Mq_unlink(Px_ipc_name(NAMED);</code></p>
     <p><code>47  Mq_unlink(Px_ipc_name (NAME2));</code></p>
     <p><code>48  exit(0);</code></p>
     <p><code>49 }</code></p>
     <p>25-28 Создаются две очереди сообщений, каждая из которых используется для передачи данных в одну сторону. Хотя для очередей Posix можно указывать приоритет сообщений, функция mq_receive всегда возвращает сообщение с наивысшим приоритетом, поэтому мы не можем использовать лишь одну очередь для данного приложения.</p>
    </section>
    <section>
     <title>
      <p>Измерение задержки очередей сообщений System V</p>
     </title>
     <p>В листинге А.16 приведен текст программы измерения времени задержки для очередей сообщений System V.</p>
     <subtitle>Листинг А.16. Программа измерения времени задержки для очередей сообщений System V</subtitle>
     <p><code>//bench/lat_svmsg.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  struct msgbuf p2child = { 1, { 0 } }; /* type = 1 */</code></p>
     <p><code>3  struct msgbuf child2p = { 2, { 0 } }; /* type = 2 */</code></p>
     <p><code>4  struct msgbuf inbuf;</code></p>
     <empty-line/>
     <p><code>5  void</code></p>
     <p><code>6  doit(int msgid)</code></p>
     <p><code>7  {</code></p>
     <p><code>8   Msgsnd(msgid, &amp;p2child, 0, 0);</code></p>
     <p><code>9   if (Msgrcv(msgid, &amp;inbuf, sizeof(inbuf.mtext), 2, 0) != 0)</code></p>
     <p><code>10   err_quit("msgrcv error");</code></p>
     <p><code>11 }</code></p>
     <empty-line/>
     <p><code>12 int</code></p>
     <p><code>13 main(int argc, char **argv)</code></p>
     <p><code>14 {</code></p>
     <p><code>15  int i, nloop, msgid;</code></p>
     <p><code>16  pid_t childpid;</code></p>
     <p><code>17  if (argc != 2)</code></p>
     <p><code>18   err_quit("usage: lat_svmsg &lt;#loops&gt;");</code></p>
     <p><code>19  nloop = atoi(argv[1]);</code></p>
     <p><code>20  msgid = Msgget(IPC_PRIVATE, IPC_CREAT | SVMSG_MODE);</code></p>
     <p><code>21  if ((childpid = Fork()) == 0) {</code></p>
     <p><code>22   for(;;) { /* дочерний процесс */</code></p>
     <p><code>23    if (Msgrcv(msgid, &amp;inbuf, sizeof(inbuf.mtext), 1, 0) != 0)</code></p>
     <p><code>24     err_quit("msgrcv error");</code></p>
     <p><code>25    Msgsnd(msgid, &amp;child2p, 0, 0);</code></p>
     <p><code>26   }</code></p>
     <p><code>27   exit(0);</code></p>
     <p><code>28  }</code></p>
     <p><code>29  /* родительский процесс */</code></p>
     <p><code>30  doit(msgid);</code></p>
     <p><code>31  Start_time();</code></p>
     <p><code>32  for (i = 0; i &lt; nloop; i++)</code></p>
     <p><code>33   doit(msgid);</code></p>
     <p><code>34  printf("latency: %.3f usec\n", Stop_time() / nloop);</code></p>
     <p><code>35  Kill(childpid, SIGTERM);</code></p>
     <p><code>36  Msgctl(msgid, IPC_RMID, NULL);</code></p>
     <p><code>37  exit(0);</code></p>
     <p><code>38 }</code></p>
     <p>Мы создаем одну очередь, по которой сообщения передаются в обоих направлениях. Сообщения с типом 1 передаются от родительского процесса дочернему, а сообщения с типом 2 — в обратную сторону. Четвертый аргумент при вызове msgrcv в функции doit имеет значение 2, что обеспечивает получение сообщений только данного типа. Аналогично в дочернем процессе четвертый аргумент msgrcv имеет значение 1.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>В разделах 9.3 и 11.3 мы отмечали, что многие структуры, определенные в ядре, нельзя инициализировать статически, поскольку стандарты Posix.1 и Unix 98 гарантируют лишь наличие определенных полей в этих структурах, но не определяют ни их порядок, ни наличие других полей. В этой программе мы инициализируем структуру msgbuf статически, поскольку очереди сообщений System V гарантируют, что эта структура содержит поле типа сообщения long, за которым следуют передаваемые данные.</p>
     </cite>
    </section>
    <section>
     <title>
      <p>Программа измерения задержки интерфейса дверей</p>
     </title>
     <p>Пpoгрaммa измерения задержки для интерфейса дверей дана в листинге А.17. Дочерний процесс создает дверь и связывает с ней функцию server. Родительский процесс открывает дверь и вызывает door_call в цикле. В качестве аргумента передается 1 байт данных, и ничего не возвращается.</p>
     <subtitle>Листинг А.17. Программа измерения задержки интерфейса дверей</subtitle>
     <p><code>//bench/lat_door.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  void</code></p>
     <p><code>3  server(void *cookie, char *argp, size_t arg_size,</code></p>
     <p><code>4   door_desc_t *dp, size_t n_descriptors)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   char c;</code></p>
     <p><code>7   Door_return(&amp;c, sizeof(char), NULL, 0);</code></p>
     <p><code>8  }</code></p>
     <empty-line/>
     <p><code>9  int</code></p>
     <p><code>10 main(int argc, char **argv)</code></p>
     <p><code>11 {</code></p>
     <p><code>12  int i, nloop, doorfd, contpipe[2];</code></p>
     <p><code>13  char c;</code></p>
     <p><code>14  pid_t childpid;</code></p>
     <p><code>15  door_arg_t arg;</code></p>
     <p><code>16  if (argc != 3)</code></p>
     <p><code>17   err_quit("usage: lat_door &lt;pathname&gt; &lt;#loops&gt;");</code></p>
     <p><code>18  nloop = atoi(argv[2]);</code></p>
     <p><code>19  unlink(argv[1]);</code></p>
     <p><code>20  Close(Open(argv[1], O_CREAT | O_EXCL | O_RDWR, FILE_MODE));</code></p>
     <p><code>21  Pipe(contpipe);</code></p>
     <p><code>22  if ((childpid = Fork()) == 0) {</code></p>
     <p><code>23   doorfd = Door_create(server, NULL, 0);</code></p>
     <p><code>24   Fattach(doorfd, argv[1]);</code></p>
     <p><code>25   Write(contpipe[1], &amp;c, 1);</code></p>
     <p><code>26   for(;;) /* дочерний процесс = сервер */</code></p>
     <p><code>27    pause();</code></p>
     <p><code>28   exit(0);</code></p>
     <p><code>29  }</code></p>
     <p><code>30  arg.data_ptr = &amp;c; /* родительский процесс = клиент */</code></p>
     <p><code>31  arg.data_size = sizeof(char);</code></p>
     <p><code>32  arg.desc_ptr = NULL;</code></p>
     <p><code>33  arg.desc_num = 0;</code></p>
     <p><code>34  arg.rbuf = &amp;c;</code></p>
     <p><code>35  arg.rsize = sizeof(char);</code></p>
     <p><code>36  if (Read(contpipe[0], &amp;c, 1) != 1) /* ждем создания */</code></p>
     <p><code>37   err_quit("pipe read error");</code></p>
     <p><code>38  doorfd = Open(argv[1], O_RDWR);</code></p>
     <p><code>39  Door_call(doorfd, &amp;arg); /* запуск */</code></p>
     <p><code>40  Start_time();</code></p>
     <p><code>41  for (i = 0; i &lt; nloop; i++)</code></p>
     <p><code>42   Door_call(doorfd, &amp;arg);</code></p>
     <p><code>43  printf("latency: %.3f usec\n", Stop_time() / nloop);</code></p>
     <p><code>44  Kill(childpid, SIGTERM);</code></p>
     <p><code>45  unlink(argv[1]);</code></p>
     <p><code>46  exit(0);</code></p>
     <p><code>47 }</code></p>
    </section>
    <section>
     <title>
      <p>Программа измерения времени задержки Sun RPC</p>
     </title>
     <p>Для измерения времени задержки Sun RPC мы напишем две программы: клиент и сервер, аналогично измерению полосы пропускания. Мы используем старый файл спецификации RPC, но на этот раз клиент вызывает нулевую процедуру сервера. Вспомните упражнение 16.11: эта процедура не принимает никаких аргументов и ничего не возвращает. Это именно то, что нам нужно, чтобы определить задержку. В листинге А.18 приведен текст клиента. Как и в решении упражнения 16.11, нам нужно воспользоваться clnt_call для вызова нулевой процедуры; в заглушке клиента отсутствует необходимая заглушка для этой процедуры.</p>
     <subtitle>Листинг А.18. Клиент Sun RPC для измерения задержки</subtitle>
     <p><code>//bench/lat_sunrpc_client.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #include "lat_sunrpc.h"</code></p>
     <empty-line/>
     <p><code>3  int</code></p>
     <p><code>4  main(int argc, char **argv)</code></p>
     <p><code>5  {</code></p>
     <p><code>6   int i, nloop;</code></p>
     <p><code>7   CLIENT *cl;</code></p>
     <p><code>8   struct timeval tv;</code></p>
     <p><code>9   if (argc != 4)</code></p>
     <p><code>10   err_quit("usage: lat_sunrpc_client &lt;hostname&gt; &lt;#loops&gt; &lt;protocol&gt;");</code></p>
     <p><code>11  nloop = atoi(argv[2]);</code></p>
     <p><code>12  cl = Clnt_create(argv[1], BW_SUNRPC_PROG, BW_SUNRPC_VERS, argv[3]);</code></p>
     <p><code>13  tv.tv_sec = 10;</code></p>
     <p><code>14  tv.tv_usec = 0;</code></p>
     <p><code>15  Start_time();</code></p>
     <p><code>16  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>17   if (clnt_call(cl, NULLPROC, xdr_void, NULL,</code></p>
     <p><code>18    xdr_void, NULL, tv) != RPC_SUCCESS)</code></p>
     <p><code>19    err_quit("%s", clnt_sperror(cl, argv[1]));</code></p>
     <p><code>20  }</code></p>
     <p><code>21  printf("latency: %.3f usec\n", Stop_time() / nloop);</code></p>
     <p><code>22  exit(0);</code></p>
     <p><code>23 }</code></p>
     <p>Мы компилируем сервер с функцией, приведенной в листинге А.13, но она все равно не вызывается. Поскольку мы используем rpcgen для построения клиента и сервера, нам нужно определить хотя бы одну процедуру сервера, но мы не обязаны ее вызывать. Причина, по которой мы используем rpcgen, заключается в том, что она автоматически создает функцию main сервера с нулевой процедурой, которая нам нужна.</p>
    </section>
   </section>
   <section>
    <title>
     <p>А.5. Синхронизация потоков: программы</p>
    </title>
    <section>
     <p>Для измерения времени, уходящего на синхронизацию при использовании различных средств, мы создаем некоторое количество потоков (от одного до пяти, согласно табл. А.4 и А.5), каждый из которых увеличивает счетчик в разделяемой памяти большое количество раз, используя различные формы синхронизации для получения доступа к счетчику.</p>
    </section>
    <section>
     <title>
      <p>Взаимные исключения Posix</p>
     </title>
     <p>В листинге А.19 приведены глобальные переменные и функция main пpoгрaммы, измеряющей быстродействие взаимных исключений Posix.</p>
     <subtitle>Листинг А.19. Глобальные переменные и функция main для взаимных исключений Posix</subtitle>
     <p><code>//bench/incr_pxmutex1.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define MAXNTHREADS 100</code></p>
     <empty-line/>
     <p><code>3  int nloop;</code></p>
     <p><code>4  struct {</code></p>
     <p><code>5   pthread_mutex_t mutex;</code></p>
     <p><code>6   long counter;</code></p>
     <p><code>7  } shared = {</code></p>
     <p><code>8   PTHREAD_MUTEX_INITIALIZER</code></p>
     <p><code>9  };</code></p>
     <p><code>10 void *incr(void *);</code></p>
     <empty-line/>
     <p><code>11 int</code></p>
     <p><code>12 main(int argc, char **argv)</code></p>
     <p><code>13 {</code></p>
     <p><code>14  int i, nthreads;</code></p>
     <p><code>15  pthread_t tid[MAXNTHREADS];</code></p>
     <p><code>16  if (argc != 3)</code></p>
     <p><code>17   err_quit("usage: incr_pxmutex1 &lt;#loops&gt; &lt;#threads&gt;");</code></p>
     <p><code>18  nloop = atoi(argv[1]);</code></p>
     <p><code>19  nthreads = min(atoi(argv[2]), MAXNTHREADS);</code></p>
     <p><code>20  /* блокировка взаимного исключения */</code></p>
     <p><code>21  Pthread_mutex_lock(&amp;shared.mutex);</code></p>
     <p><code>22  /* создание потоков */</code></p>
     <p><code>23  Set_concurrency(nthreads);</code></p>
     <p><code>24  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>25   Pthread_create(&amp;tid[i], NULL, incr, NULL);</code></p>
     <p><code>26  }</code></p>
     <p><code>27  /* запуск таймера и разблокирование взаимного исключения */</code></p>
     <p><code>28  Start_time();</code></p>
     <p><code>29  Pthread_mutex_unlock(&amp;shared.mutex);</code></p>
     <p><code>30  /* ожидание завершения работы потоков */</code></p>
     <p><code>31  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>32   Pthread_join(tid[i], NULL);</code></p>
     <p><code>33  }</code></p>
     <p><code>34  printf("microseconds: %.0f usec\n", Stop_time());</code></p>
     <p><code>35  if (shared.counter != nloop * nthreads)</code></p>
     <p><code>36   printf("error: counter = %ld\n", shared, counter);</code></p>
     <p><code>37  exit(0);</code></p>
     <p><code>38 }</code></p>
     <subtitle>Общие данные</subtitle>
     <p>4-9 Совместно используемые потоками данные состоят из взаимного исключения и счетчика. Взаимное исключение инициализируется статически.</p>
     <subtitle>Блокирование взаимного исключения и создание потоков</subtitle>
     <p>20-26 Основной поток блокирует взаимное исключение перед созданием прочих потоков, чтобы ни один из них не получил это исключение до тех пор, пока все они не будут созданы. Вызывается функция set_concurrency, создаются потоки. Каждый поток выполняет функцию incr, текст которой будет приведен позже. </p>
     <subtitle>Запуск таймера и разблокирование взаимного исключения</subtitle>
     <p>27-36 После создания всех потоков главный поток запускает таймер и освобождает взаимное исключение. Затем он ожидает завершения всех потоков, после чего останавливает таймер и выводит полное время работы. В листинге А.20 приведен текст функции incr, выполняемой каждым из потоков.</p>
     <subtitle>Листинг А.20. Функция incr, выполняемая потоками</subtitle>
     <p><code>//bench/incr_pxmutex1.c</code></p>
     <p><code>39 void *</code></p>
     <p><code>40 incr(void *arg)</code></p>
     <p><code>41 {</code></p>
     <p><code>42  int i;</code></p>
     <p><code>43  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>44   Pthread_mutex_lock(&amp;shared.mutex);</code></p>
     <p><code>45   shared.counter++;</code></p>
     <p><code>46   Pthread_mutex_unlock(&amp;shared.mutex);</code></p>
     <p><code>47  }</code></p>
     <p><code>48  return(NULL);</code></p>
     <p><code>49 }</code></p>
     <subtitle>Увеличение счетчика — критическая область кода</subtitle>
     <p>44-46 Операция увеличения счетчика осуществляется после получения блокировки на взаимное исключение. После этого взаимное исключение разблокируется.</p>
    </section>
    <section>
     <title>
      <p>Блокировки чтения-записи</p>
     </title>
     <p>Пpoгрaммa, использующая блокировки чтения-записи, является слегка измененной версией программы с взаимными исключениями Posix. Поток должен установить блокировку файла, прежде чем увеличивать общий счетчик.</p>
     <cite>
      <p><strong>ПРИМЕЧАНИЕ</strong></p>
      <p>Существует не так уж много систем, в которых реализованы блокировки чтения-записи, являющиеся частью стандарта Unix 98 и разрабатываемые рабочей группой Posix.1j. Измерения в этом разделе проводились в системе Solaris 2.6 с использованием блокировок, описанных в документации на странице rwlock(3T). Эта реализация обеспечивает тот же набор функций, что и предлагаемые блокировки чтения-записи Posix. Для использования этих функций мы применяем тривиальные функции-обертки.</p>
      <p>В Digital Unix 4.0B мы использовали блокировки чтения-записи поточно-независимых служб, описанные на странице документации tis_rwlock. Мы не приводим листингов с несущественными изменениями, необходимыми для использования этих блокировок.</p>
     </cite>
     <p>В листинге А.21 приведен текст функции main, а в листинге А.22 — текст функции incr.</p>
     <subtitle>Листинг А.21. Функция main для блокировок чтения-записи</subtitle>
     <p><code>//bench/incr_rwlock1.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #include &lt;synch.h&gt; /* Заголовочный файл для Solaris */</code></p>
     <empty-line/>
     <p><code>3  void Rw_wrlock(rwlock_t *rwptr);</code></p>
     <p><code>4  void Rw_unlock(rwlock_t *rwptr);</code></p>
     <p><code>5  #define MAXNTHREADS 100</code></p>
     <p><code>6  int nloop;</code></p>
     <p><code>7  struct {</code></p>
     <p><code>8   rwlock_t rwlock; /* тип данных Solaris */</code></p>
     <p><code>9   long counter;</code></p>
     <p><code>10  } shared; /* инициализация О –&gt; USYNC_THREAD */</code></p>
     <p><code>11  void *incr(void *);</code></p>
     <empty-line/>
     <p><code>12 int</code></p>
     <p><code>13 main(int argc, char **argv)</code></p>
     <p><code>14 {</code></p>
     <p><code>15  int i, nthreads;</code></p>
     <p><code>16  pthread_t tid[MAXNTHREADS];</code></p>
     <p><code>17  if (argc != 3)</code></p>
     <p><code>18   err_quit("usage: incr_rwlockl &lt;#loops&gt; &lt;#threads&gt;");</code></p>
     <p><code>19  nloop = atoi(argv[1]);</code></p>
     <p><code>20  nthreads = min(atoi(argv[2]), MAXNTHREADS);</code></p>
     <p><code>21  /* получение блокировки на запись */</code></p>
     <p><code>22  Rw_wrlock(&amp;shared.rwlock);</code></p>
     <p><code>23  /* создание всех потоков */</code></p>
     <p><code>24  Set_concurrency(nthreads);</code></p>
     <p><code>25  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>26   Pthread_create(&amp;tid[i], NULL, incr, NULL);</code></p>
     <p><code>27  }</code></p>
     <p><code>28  /* запуск таймера и снятие блокировки */</code></p>
     <p><code>29  Start_time();</code></p>
     <p><code>30  Rw_unlock(&amp;shared.rwlock);</code></p>
     <p><code>31  /* ожидание завершения всех потоков */</code></p>
     <p><code>32  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>33   Pthread_join(tid[i], NULL);</code></p>
     <p><code>34  }</code></p>
     <p><code>35  printf("microseconds: %.0f usec\n", Stop_time());</code></p>
     <p><code>36  if (shared.counter != nloop * nthreads)</code></p>
     <p><code>37   printf("error: counter = %ld\n", shared.counter);</code></p>
     <p><code>38  exit(0);</code></p>
     <p><code>39 }</code></p>
     <subtitle>Листинг А.22. Увеличение общего счетчика с использованием блокировок чтения-записи</subtitle>
     <p><code>//bench/incr_rwlock1.c</code></p>
     <p><code>40 void *</code></p>
     <p><code>41 incr(void *arg)</code></p>
     <p><code>42 {</code></p>
     <p><code>43  int i;</code></p>
     <p><code>44  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>45   Rw_wrlock(&amp;shared.rwlock);</code></p>
     <p><code>46   shared.counter++;</code></p>
     <p><code>47   Rw_unlock(&amp;shared.rwlock);</code></p>
     <p><code>48  }</code></p>
     <p><code>49  return(NULL);</code></p>
     <p><code>50 }</code></p>
    </section>
    <section>
     <title>
      <p>Семафоры Posix, размещаемые в памяти</p>
     </title>
     <p>Мы измеряем скорость работы семафоров Posix (именованных и размещаемых в памяти). В листинге А.24 приведен текст функции main, а в листинге А.23 — текст функции incr.</p>
     <subtitle>Листинг А.23. Увеличение счетчика с использованием семафоров Posix в памяти</subtitle>
     <p><code>//bench/incr_pxsem1.с</code></p>
     <p><code>37 void *</code></p>
     <p><code>38 incr(void *arg)</code></p>
     <p><code>39 {</code></p>
     <p><code>40  int i;</code></p>
     <p><code>41  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>42   Sem_wait(&amp;shared.mutex);</code></p>
     <p><code>43   shared.counter++;</code></p>
     <p><code>44   Sem_post(&amp;shared.mutex);</code></p>
     <p><code>45  }</code></p>
     <p><code>46  return(NULL);</code></p>
     <p><code>47 }</code></p>
     <subtitle>Листинг А.24. Функция main для семафоров Posix, размещаемых в памяти</subtitle>
     <p><code>//bench/incr_pxsem1.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define MAXNTHREADS 100</code></p>
     <p><code>3  int nloop;</code></p>
     <p><code>4  struct {</code></p>
     <p><code>5   sem_t mutex; /* размещаемый в памяти семафор */</code></p>
     <p><code>6   long counter;</code></p>
     <p><code>7  } shared;</code></p>
     <p><code>8  void *incr(void *);</code></p>
     <empty-line/>
     <p><code>9  int</code></p>
     <p><code>10 main(int argc, char **argv)</code></p>
     <p><code>11 {</code></p>
     <p><code>12  int i, nthreads;</code></p>
     <p><code>13  pthread_t tid[MAXNTHREADS];</code></p>
     <p><code>14  if (argc != 3)</code></p>
     <p><code>15   err_quit("usage: incr_pxseml &lt;#loops&gt; &lt;#threads&gt;");</code></p>
     <p><code>16  nloop = atoi(argv[1]);</code></p>
     <p><code>17  nthreads = min(atoi(argv[2]), MAXNTHREADS);</code></p>
     <p><code>18  /* инициализация размещаемого в памяти семафора 0 */</code></p>
     <p><code>19  Sem_init(&amp;shared.mutex, 0, 0);</code></p>
     <p><code>20  /* создание всех потоков */</code></p>
     <p><code>21  Set_concurrency(nthreads);</code></p>
     <p><code>22  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>23   Pthread_create(&amp;tid[i], NULL, incr, NULL);</code></p>
     <p><code>24  }</code></p>
     <p><code>25  /* запуск таймера и разблокирование семафора */</code></p>
     <p><code>26  Start_time();</code></p>
     <p><code>27  Sem_post(&amp;shared.mutex);</code></p>
     <p><code>28  /* ожидание завершения всех потоков */</code></p>
     <p><code>29  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>30   Pthread_join(tid[i], NULL);</code></p>
     <p><code>31  }</code></p>
     <p><code>32  printf("microseconds: %.0f usec\n", Stop_time());</code></p>
     <p><code>33  if (shared.counter != nloop * nthreads)</code></p>
     <p><code>34   printf("error: counter = %ld\n", shared.counter);</code></p>
     <p><code>35  exit(0);</code></p>
     <p><code>36 }</code></p>
     <p>18-19 Создается семафор, инициализируемый значением 0. Второй аргумент в вызове sem_init, имеющий значение 0, говорит о том, что семафор используется только потоками вызвавшего процесса.</p>
     <p>20-27 После создания всех потоков запускается таймер и вызывается функция sem_post.</p>
    </section>
    <section>
     <title>
      <p>Именованные семафоры Posix</p>
     </title>
     <p>В листинге А.26 приведен текст функции main, измеряющей быстродействие именованных семафоров Posix, а в листинге А.25 — соответствующая функция incr.</p>
     <subtitle>Листинг А.25. Увеличение общего счетчика с использованием именованного семафора Posix</subtitle>
     <p><code>//bench/incr_pxsem2.c</code></p>
     <p><code>40 void *</code></p>
     <p><code>41 incr(void *arg)</code></p>
     <p><code>42 {</code></p>
     <p><code>43  int i;</code></p>
     <p><code>44  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>45   Sem_wait(shared.mutex);</code></p>
     <p><code>46   shared.counter++;</code></p>
     <p><code>47   Sem_post(shared.mutex);</code></p>
     <p><code>48  }</code></p>
     <p><code>49  return(NULL);</code></p>
     <p><code>50 }</code></p>
     <subtitle>Листинг А.26. Функция main для измерения быстродействия именованных семафоров Posix</subtitle>
     <p><code>//bench/incr_pxsem2.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define MAXNTHREADS 100</code></p>
     <p><code>3  #define NAME "incr_pxsem2"</code></p>
     <empty-line/>
     <p><code>4  int nloop;</code></p>
     <p><code>5  struct {</code></p>
     <p><code>6   sem_t *mutex; /* указатель на именованный семафор */</code></p>
     <p><code>7   long counter;</code></p>
     <p><code>8  } shared;</code></p>
     <p><code>9  void *incr(void *);</code></p>
     <empty-line/>
     <p><code>10 int</code></p>
     <p><code>11 main(int argc, char **argv)</code></p>
     <p><code>12 {</code></p>
     <p><code>13  int i, nthreads;</code></p>
     <p><code>14  pthread_t tid[MAXNTHREADS];</code></p>
     <p><code>15  if (argc != 3)</code></p>
     <p><code>16   err_quit("usage: incr_pxsem2 &lt;#loops&gt; &lt;#threads&gt;");</code></p>
     <p><code>17  nloop = atoi(argv[1]);</code></p>
     <p><code>18  nthreads = min(atoi(argv[2]), MAXNTHREADS);</code></p>
     <p><code>19  /* инициализация именованного семафора 0 */</code></p>
     <p><code>20  sem_unlink(Px_ipc_name(NAME)); /* ошибка – OK */</code></p>
     <p><code>21  shared.mutex = Sem_open(Px_ipc_name(NAME), O_CREAT | O_EXCL, FILE_MODE, 0);</code></p>
     <p><code>22  /* создание всех потоков */</code></p>
     <p><code>23  Set_concurrency(nthreads);</code></p>
     <p><code>24  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>25   Pthread_create(&amp;tid[i], NULL, incr, NULL);</code></p>
     <p><code>26  }</code></p>
     <p><code>27  /* запуск таймера и разблокирование семафора */</code></p>
     <p><code>28  Start_time();</code></p>
     <p><code>29  Sem_post(shared.mutex);</code></p>
     <p><code>30  /* ожидание завершения всех потоков */</code></p>
     <p><code>31  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>32   Pthread_join(tid[i], NULL);</code></p>
     <p><code>33  }</code></p>
     <p><code>34  printf("microseconds: %.0f usec\n", Stop_time());</code></p>
     <p><code>35  if (shared.counter != nloop * nthreads)</code></p>
     <p><code>36   printf("error: counter = %ld\n", shared.counter);</code></p>
     <p><code>37  Sem_unlink(Px_ipc_name(NAME));</code></p>
     <p><code>38  exit(0);</code></p>
     <p><code>39 }</code></p>
    </section>
    <section>
     <title>
      <p>Семафоры System V</p>
     </title>
     <p>Функция main программы, измеряющей быстродействие семафоров System V, приведена в листинге А.27, а функция incr показана в листинге А.28.</p>
     <subtitle>Листинг А.27. Функция main для измерения быстродействия семафоров System V</subtitle>
     <p><code>//bench/incr_svsem1.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define MAXNTHREADS 100</code></p>
     <empty-line/>
     <p><code>3  int nloop;</code></p>
     <p><code>4  struct {</code></p>
     <p><code>5   int semid;</code></p>
     <p><code>6   long counter;</code></p>
     <p><code>7  } shared;</code></p>
     <p><code>8  struct sembuf postop, waitop;</code></p>
     <p><code>9  void *incr(void *);</code></p>
     <empty-line/>
     <p><code>10 int</code></p>
     <p><code>11 main(int argc, char **argv)</code></p>
     <p><code>12 {</code></p>
     <p><code>13  int i, nthreads;</code></p>
     <p><code>14  pthread_t tid[MAXNTHREADS];</code></p>
     <p><code>15  union semun arg;</code></p>
     <p><code>16  if (argc != 3)</code></p>
     <p><code>17   err_quit("usage: incr_svseml &lt;#loops&gt; &lt;#threads&gt;");</code></p>
     <p><code>18  nloop = atoi(argv[1]);</code></p>
     <p><code>19  nthreads = min(atoi(argv[2]), MAXNTHREADS);</code></p>
     <p><code>20  /* создание семафора и инициализация его значением 0 */</code></p>
     <p><code>21  shared.semid = Semget(IPC_PRIVATE, 1, IPC_CREAT | SVSEM_MODE);</code></p>
     <p><code>22  arg.val =0;</code></p>
     <p><code>23  Semctl(shared.semid, 0, SETVAL, arg);</code></p>
     <p><code>24  postop.sem_num = 0; /* инициализация двух структур semop */</code></p>
     <p><code>25  postop.sem_op = 1;</code></p>
     <p><code>26  postop.sem_flg = 0;</code></p>
     <p><code>27  waitop.sem_num = 0;</code></p>
     <p><code>28  waitop.sem_op = –1;</code></p>
     <p><code>29  waitop.sem_flg = 0;</code></p>
     <p><code>30  /* создание всех потоков */</code></p>
     <p><code>31  Set_concurrency(nthreads);</code></p>
     <p><code>32  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>33   Pthread_create(&amp;tid[i], NULL, incr, NULL);</code></p>
     <p><code>34  }</code></p>
     <p><code>35  /* запуск таймера и разблокирование семафора */</code></p>
     <p><code>36  Start_time();</code></p>
     <p><code>37  Semop(shared.semid, &amp;postop, 1); /* up by 1 */</code></p>
     <p><code>38  /* ожидание завершения всех потоков */</code></p>
     <p><code>39  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>40   Pthread_join(tid[i], NULL);</code></p>
     <p><code>41  }</code></p>
     <p><code>42  printf("microseconds: %.0f usec\n", Stop_time());</code></p>
     <p><code>43  if (shared.counter != nloop * nthreads)</code></p>
     <p><code>44   printf("error: counter = %ld\n", shared, counter);</code></p>
     <p><code>45  Semctl(shared.semid, 0, IPC_RMID);</code></p>
     <p><code>46  exit(0);</code></p>
     <p><code>47 }</code></p>
     <subtitle>Листинг А.28. Увеличение общего счетчика с использованием семафоров System V</subtitle>
     <p><code>//bench/incr_svsem1.c</code></p>
     <p><code>48 void *</code></p>
     <p><code>49 incr(void *arg)</code></p>
     <p><code>50 {</code></p>
     <p><code>51  int i;</code></p>
     <p><code>52  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>53   Semop(shared.semid, &amp;waitop, 1);</code></p>
     <p><code>54   shared.counter++;</code></p>
     <p><code>55   Semop(shared.semid, &amp;postop, 1);</code></p>
     <p><code>56  }</code></p>
     <p><code>57  return(NULL);</code></p>
     <p><code>58 }</code></p>
     <p>20-23 Создается семафор с одним элементом, значение которого инициализируется нулем.</p>
     <p>24-29 Инициализируются две структуры semop: одна для увеличения семафора, а другая для ожидания его изменения. Обратите внимание, что поле sem_flg в обеих структурах имеет значение 0: флаг SEM_UNDO не установлен.</p>
     <subtitle>Семафоры System V с флагом SEM_UNDO</subtitle>
     <p>Единственное отличие от пpoгрaммы из листинга А.27 заключается в том, что поле sem_flg структур semop устанавливается равным SEM_UNDO, а не 0. Мы не приводим в книге новый листинг с этим небольшим изменением.</p>
    </section>
    <section>
     <title>
      <p>Блокировка записей fcntl</p>
     </title>
     <p>Последняя пpoгрaммa использует fcntl для синхронизации. Функция main приведена в листинге А.30. Эта программа будет выполняться успешно только в том случае, если количество потоков равно 1, поскольку блокировка fcntl предназначена для использования между процессами, а не между потоками одного процесса. При указании нескольких потоков каждый из них всегда имеет возможность получить блокировку (то есть вызовы writew_lock не приводят к остановке потока, потому что процесс уже является владельцем блокировки), и конечное значение счетчика оказывается неправильным.</p>
     <p>Функция incr, использующая блокировку записей, приведена в листинге А.29.</p>
     <subtitle>Листинг А.29. Увеличение общего счетчика с использованием блокировки записей fcntl</subtitle>
     <p><code>//bench/incr_fcntl1.e</code></p>
     <p><code>44 void *</code></p>
     <p><code>45 incr(void *arg)</code></p>
     <p><code>46 {</code></p>
     <p><code>47  int i;</code></p>
     <p><code>48  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>49   Writew_lock(shared.fd, 0, SEEK_SET, 0);</code></p>
     <p><code>50   shared.counter++;</code></p>
     <p><code>51   Un_lock(shared.fd, 0, SEEK_SET, 0);</code></p>
     <p><code>52  }</code></p>
     <p><code>53 return(NULL);</code></p>
     <p><code>54 }</code></p>
     <subtitle>Листинг А.30. Функция main для измерения производительности блокировки fcntl</subtitle>
     <p><code>//bench/incr_fcntl1.e</code></p>
     <p><code>4  #include "unpipc.h"</code></p>
     <p><code>5  #define MAXNTHREADS 100</code></p>
     <empty-line/>
     <p><code>6  int nloop;</code></p>
     <p><code>7  struct {</code></p>
     <p><code>8   int fd;</code></p>
     <p><code>9   long counter;</code></p>
     <p><code>10 } shared;</code></p>
     <p><code>11 void *incr(void *);</code></p>
     <empty-line/>
     <p><code>12 int</code></p>
     <p><code>13 main(int argc, char **argv)</code></p>
     <p><code>14 {</code></p>
     <p><code>15  int i, nthreads;</code></p>
     <p><code>16  char *pathname;</code></p>
     <p><code>17  pthread_t tid[MAXNTHREADS];</code></p>
     <p><code>18  if (argc != 4)</code></p>
     <p><code>19   err_quit("usage: incr_fcntll &lt;pathname&gt; &lt;#loops&gt; &lt;#threads&gt;");</code></p>
     <p><code>20  pathname = argv[1];</code></p>
     <p><code>21  nloop = atoi(argv[2]);</code></p>
     <p><code>22  nthreads = min(atoi(argv[3]), MAXNTHREADS);</code></p>
     <p><code>23  /* создание файла и получение блокировки на запись */</code></p>
     <p><code>24  shared.fd = Open(pathname, O_RDWR | O_CREAT | O_TRUNC, FILE_MODE);</code></p>
     <p><code>25  Writew_lock(shared.fd, 0, SEEK_SET, 0);</code></p>
     <p><code>26  /* создание всех потоков */</code></p>
     <p><code>27  Set_concurrency(nthreads);</code></p>
     <p><code>28  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>29   Pthread_create(&amp;tid[i], NULL, incr, NULL);</code></p>
     <p><code>30  }</code></p>
     <p><code>31  /* запуск таймера и снятие блокировки на запись */</code></p>
     <p><code>32  Start_time();</code></p>
     <p><code>33  Un_lock(shared.fd, 0, SEEK_SET, 0);</code></p>
     <p><code>34  /* ожидание завершения всех потоков */</code></p>
     <p><code>35  for (i = 0; i &lt; nthreads; i++) {</code></p>
     <p><code>36   Pthread_join(tid[i], NULL);</code></p>
     <p><code>37  }</code></p>
     <p><code>38  printf("microseconds: %.0f usec\n", Stop_time());</code></p>
     <p><code>39  if (shared.counter != nloop * nthreads)</code></p>
     <p><code>40   printf("error: counter = %ld\n", shared.counter);</code></p>
     <p><code>41  Unlink(pathname);</code></p>
     <p><code>42  exit(0);</code></p>
     <p><code>43 }</code></p>
     <p>15-19 Полное имя создаваемого и используемого для блокировки файла принимается в качестве аргумента командной строки. Это позволяет измерять скорость работы для разных файловых систем. Можно ожидать, что программа будет работать гораздо медленнее при использовании NFS (если она вообще будет работать, то есть если сервер и клиент NFS поддерживают блокировку записей NFS).</p>
    </section>
   </section>
   <section>
    <title>
     <p>А.6. Синхронизация процессов: программы</p>
    </title>
    <section>
     <p>В программах предыдущего раздела счетчик использовался несколькими потоками одного процесса. При этом он представлял собой глобальную переменную. Теперь нам нужно изменить эти программы для измерения скорости синхронизации различных процессов.</p>
     <p>Для разделения счетчика между родительским процессом и дочерними мы помещаем его в разделяемую память, выделяемую функцией my_shm, показанной в листинге А.31.</p>
     <subtitle>Листинг А.31. Выделение разделяемой памяти под родительский и дочерние процессы</subtitle>
     <p><code>//lib/my_shm.c</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <empty-line/>
     <p><code>2  void *</code></p>
     <p><code>3  my_shm(size_t nbytes)</code></p>
     <p><code>4  {</code></p>
     <p><code>5   void *shared;</code></p>
     <p><code>6  #if defined(MAP_ANON)</code></p>
     <p><code>7   shared = mmap(NULL, nbytes, PROT_READ | PROT_WRITE,</code></p>
     <p><code>8   MAP_ANON | MAP_SHARED, –1, 0);</code></p>
     <p><code>9  #elif defined(HAVE_DEV_ZERO)</code></p>
     <p><code>10  int fd;</code></p>
     <p><code>11  /* отображение в память файла /dev/zero */</code></p>
     <p><code>12  if ((fd = open("/dev/zero", O_RDWR)) == –1)</code></p>
     <p><code>13   return(MAP_FAILED);</code></p>
     <p><code>14  shared = mmap(NULL, nbytes, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</code></p>
     <p><code>15  close(fd);</code></p>
     <p><code>16 #else</code></p>
     <p><code>17 # error cannot determine what type of anonymous shared memory to use</code></p>
     <p><code>18 #endif</code></p>
     <p><code>19  return(shared); /* ошибка отображения в память */</code></p>
     <p><code>20 }</code></p>
     <p>Если система поддерживает флаг MAP_ANON (раздел 12.4), мы используем этот тип разделяемой памяти. В противном случае используется отображение в память файла /dev/zero (раздел 12.5).</p>
     <p>Последующие изменения зависят от средства синхронизации и от того, что происходит с лежащим в основе этого средства типом данных при вызове fork. Детали описаны в разделе 10.12.</p>
     <p>&#9632; Взаимное исключение Posix: должно храниться в разделяемой памяти (вместе со счетчиком) и инициализироваться с установленным атрибутом PTHREAD_ PROCESS_SHARED. Код программы будет приведен ниже.</p>
     <p>&#9632; Блокировка чтения-записи Posix: должна храниться в разделяемой памяти (вместе со счетчиком) и инициализироваться с установленным атрибутом PTHREAD_PROCESS_SHARED.</p>
     <p>&#9632; Семафоры Posix, размещаемые в памяти: семафор должен храниться в разделяемой памяти (вместе со счетчиком), и вторым аргументом при вызове sem_init должна быть единица (указывающая на то, что семафор используется несколькими процессами).</p>
     <p>&#9632; Именованные семафоры Posix: следует либо вызывать sem_open из родительского и дочерних процессов по отдельности, либо вызывать sem_open в родительском процессе, учитывая, что семафор станет общим после вызова fork.</p>
     <p>&#9632; Семафоры System V: никакого специального кодирования не требуется, поскольку эти семафоры всегда могут использоваться как процессами, так и потоками. Дочерним процессам достаточно знать идентификатор семафора.</p>
     <p>&#9632; Блокировка записей fcntl: изначально предназначена для использования несколькими процессами.</p>
     <p>Мы приведем код только для программы с взаимными исключениями Posix.</p>
    </section>
    <section>
     <title>
      <p>Взаимные исключения Posix между процессами</p>
     </title>
     <p>Функция main первой программы использует взаимное исключение Posix для обеспечения синхронизации. Текст ее приведен в листинге А.32.</p>
     <subtitle>Листинг А.32. Функция main для измерения быстродействия взаимных исключений между процессами</subtitle>
     <p><code>//bench/incr_pmutex5.с</code></p>
     <p><code>1  #include "unpipc.h"</code></p>
     <p><code>2  #define MAXNPROC 100</code></p>
     <empty-line/>
     <p><code>3  int nloop;</code></p>
     <p><code>4  struct shared {</code></p>
     <p><code>5   pthread_mutex_t mutex;</code></p>
     <p><code>6   long counter;</code></p>
     <p><code>7  } *shared; /* указатель, сама структура в общей памяти */</code></p>
     <p><code>8  void *incr(void *);</code></p>
     <empty-line/>
     <p><code>9  int</code></p>
     <p><code>10 main(int argc, char **argv)</code></p>
     <p><code>11 {</code></p>
     <p><code>12  int i, nprocs;</code></p>
     <p><code>13  pid_t childpid[MAXNPROC];</code></p>
     <p><code>14  pthread_mutexattr_t mattr;</code></p>
     <p><code>15  if (argc != 3)</code></p>
     <p><code>16   err_quit("usage: incr_pxmutex5 &lt;#loops&gt; &lt;#processes&gt;");</code></p>
     <p><code>17  nloop = atoi(argv[l]);</code></p>
     <p><code>18  nprocs = min(atoi(argv[2]), MAXNPROC);</code></p>
     <p><code>19  /* получение разделяемой памяти для родительского и дочерних процессов */</code></p>
     <p><code>20  shared = My_shm(sizeof(struct shared));</code></p>
     <p><code>21  /* инициализация взаимного исключения и его блокировка */</code></p>
     <p><code>22  Pthread_mutexattr_init(&amp;mattr);</code></p>
     <p><code>23  Pthread_mutexattr_setpshared(&amp;mattr, PTHREAD_PROCESS_SHARED);</code></p>
     <p><code>24  Pthread_mutex_init(&amp;shared-&gt;mutex, &amp;mattr);</code></p>
     <p><code>25  Pthread_mutexattr_destroy(&amp;mattr);</code></p>
     <p><code>26  Pthread_mutex_lock(&amp;shared-&gt;mutex);</code></p>
     <p><code>27  /* порождение дочерних процессов */</code></p>
     <p><code>28  for (i = 0; i &lt; nprocs; i++) {</code></p>
     <p><code>29   if ((childpid[i] = Fork()) == 0) {</code></p>
     <p><code>30    incr(NULL);</code></p>
     <p><code>31    exit(0);</code></p>
     <p><code>32   }</code></p>
     <p><code>33  }</code></p>
     <p><code>34  /* родительский процесс: запуск таймера и разблокирование взаимного исключения */</code></p>
     <p><code>35  Start_time();</code></p>
     <p><code>36  Pthread_mutex_unlock(&amp;shared-&gt;mutex);</code></p>
     <p><code>37  /* ожидание завершения всех дочерних процессов */</code></p>
     <p><code>38  for (i = 0; i &lt; nprocs; i++) {</code></p>
     <p><code>39   Waitpid(childpid[i], NULL, 0);</code></p>
     <p><code>40  }</code></p>
     <p><code>41  printf("microseconds: %.0f usec\n", Stop_time());</code></p>
     <p><code>42  if (shared-&gt;counter != nloop * nprocs)</code></p>
     <p><code>43   printf("error: counter = %ld\n", shared-&gt;counter);</code></p>
     <p><code>44  exit(0);</code></p>
     <p><code>45 }</code></p>
     <p>19-20 Поскольку мы запускаем несколько процессов, структура shared должна располагаться в разделяемой памяти. Мы вызываем функцию my_shm, текст которой приведен в листинге А.31.</p>
     <p>21-26 Поскольку взаимное исключение помещено в разделяемую память, мы не можем статически инициализировать его, поэтому мы вызываем pthread_mutex_init после установки атрибута PTHREAD_PROCESS_SHARED. Взаимное исключение блокируется.</p>
     <p>27-36 После создания дочерних процессов и запуска таймера блокировка снимается.</p>
     <p>37-43 Родительский процесс ожидает завершения всех дочерних, после чего останавливает таймер.</p>
     <subtitle>Листинг А.33. Увеличение счетчика с использованием взаимных исключений между процессами</subtitle>
     <p><code>//bench/incr_pxmutex5.с</code></p>
     <p><code>46 void *</code></p>
     <p><code>47 incr(void *arg)</code></p>
     <p><code>48 {</code></p>
     <p><code>49  int i;</code></p>
     <p><code>50  for (i = 0; i &lt; nloop; i++) {</code></p>
     <p><code>51   Pthread_mutex_lock(&amp;shared-&gt;mutex);</code></p>
     <p><code>52   shared-&gt;counter++;</code></p>
     <p><code>53   Pthread_mutex_unlock(&amp;shared-&gt;mutex);</code></p>
     <p><code>54  }</code></p>
     <p><code>55  return(NULL);</code></p>
     <p><code>56 }</code></p>
    </section>
   </section>
  </section>
  <section>
   <title>
    <p>ПРИЛОЖЕНИЕ Б</p>
    <p>Основы многопоточного программирования</p>
   </title>
   <section>
    <title>
     <p>Б.1. Введение</p>
    </title>
    <p>В этом приложении приведены основные функции, используемые для работы с потоками. В традиционной модели Unix процесс, которому нужно, чтобы какое-то действие было выполнено не им самим, порождает дочерний процесс вызовом fork. Большая часть сетевых серверов под Unix написана именно так.</p>
    <p>Хотя эта парадигма хорошо работала на протяжении многих лет, вызов fork обладает некоторыми недостатками:</p>
    <p>&#9632; вызов fork ресурсоемок. Память копируется от родительского процесса к дочернему, копируются все дескрипторы и т. д. Существующие реализации используют метод копирования при записи (copy-on-write), что исключает необходимость копирования адресного пространства родительского процесса, пока оно не понадобится клиенту, но, несмотря на эту оптимизацию, вызов fork остается ресурсоемким;</p>
    <p>&#9632; для передачи информации между родительским и дочерним процессами необходимо использовать одну из форм IPC после вызова fork. Передать информацию дочернему процессу легко: это можно сделать до вызова fork. Однако передать ее обратно может быть достаточно сложно.</p>
    <p>Потоки помогают решить обе проблемы. Часто они называются «облегченными процессами» (lightweight processes), поскольку поток проще, чем процесс. Создание потока может занимать по времени меньше одной десятой создания процесса.</p>
    <p>Все потоки одного процесса совместно используют его глобальные переменные, поэтому им легко обмениваться информацией, но это приводит к необходимости синхронизации. Однако общими становятся не только глобальные переменные. Все потоки одного процесса разделяют:</p>
    <p>&#9632; инструкции процесса;</p>
    <p>&#9632; большую часть данных;</p>
    <p>&#9632; открытые файлы (дескрипторы);</p>
    <p>&#9632; обработчики сигналов и вообще настройки для работы с сигналами;</p>
    <p>&#9632; текущий рабочий каталог;</p>
    <p>&#9632; идентификатор пользователя и группы.</p>
    <p>Однако каждый поток имеет свои собственный:</p>
    <p>&#9632; идентификатор потока;</p>
    <p>&#9632; набор регистров, включая PC и указатель стека;</p>
    <p>&#9632; стек (для локальных переменных и адресов возврата);</p>
    <p>&#9632; errno;</p>
    <p>&#9632; маску сигналов;</p>
    <p>&#9632; приоритет.</p>
   </section>
   <section>
    <title>
     <p>Б.2. Основные функции для работы с потоками: создание и завершение</p>
    </title>
    <p>В этом разделе мы опишем пять основных функций для работы с потоками.</p>
    <subtitle>Функция pthread_create</subtitle>
    <p>При запуске пpoгрaммы вызовом exec создается единственный поток, называемый начальным потоком, или главным (initial thread). Добавочные потоки создаются вызовом pthread_create:</p>
    <p><code>#include &lt;pthread.h&gt;</code></p>
    <p><code>int pthread_create(pthread_t *<emphasis>tid,</emphasis> const pthread_attr_t <emphasis>*attr,</emphasis> void <emphasis>*(*func)</emphasis> (void *), void <emphasis>*arg</emphasis>);</code></p>
    <p><code>/* Возвращает 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
    <p>Каждый поток процесса обладает собственным идентификатором потока, который имеет тип pthread_t. При успешном создании нового потока его идентификатор возвращается через указатель <emphasis>tid.</emphasis></p>
    <p>Каждый поток обладает некоторым количеством атрибутов: приоритетом, начальным размером стека, признаком демона и т. п. При создании потока эти атрибуты могут быть указаны с помощью переменной типа pthread_attr_t, значение которой имеет более высокий приоритет, чем значения по умолчанию. Обычно мы используем значения по умолчанию. При этом аргумент <emphasis>attr</emphasis> является нулевым указателем.</p>
    <p>Наконец, при создании потока мы должны указать функцию, которую он будет выполнять, — начальную функцию потока (thread start function). Поток запускается вызовом этой функции и завершается либо явно (вызовом pthread_exit), либо неявно (возвратом из этой функции). Адрес функции указывается в аргументе <emphasis>func,</emphasis> и вызывается она с единственным аргументом — указателем <emphasis>arg.</emphasis> Если функции нужно передать несколько аргументов, следует упаковать их в структуру и передать ее адрес в качестве единственного аргумента начальной функции.</p>
    <p>Обратите внимание на объявления <emphasis>func</emphasis> и <emphasis>arg.</emphasis> Функция принимает один аргумент — указатель типа void, и возвращает один аргумент — такой же указатель. Это дает нам возможность передать потоку указатель на что угодно и получить в ответ такой же указатель.</p>
    <p>Функции Posix для работы с потоками обычно возвращают 0 в случае успешного завершения работы и ненулевое значение в случае ошибки. В отличие от большинства системных функций, возвращающих –1 в случае ошибки и устанавливающих значение errno равным коду ошибки, функции Pthread возвращают положительный код ошибки. Например, если pthread_create не сможет создать новый поток из-за превышения системного oгрaничeния на потоки, эта функция вернет значение EAGAIN. Функции Pthread не устанавливают значение переменной errno. Несоответствий при их вызове не возникает, поскольку ни один из кодов ошибок не имеет нулевого значения (&lt;sys/errno.h&gt;).</p>
    <subtitle>Функция pthread_join</subtitle>
    <p>Мы можем ожидать завершения какого-либо процесса, вызвав pthread_join. Сравнивая потоки с процессами Unix, можно сказать, что pthread_create аналогична fork, a pthread_join — waitpid:</p>
    <p><code>#include &lt;pthread.h&gt;</code></p>
    <p><code>int pthread_join(pthread_t <emphasis>tid,</emphasis> void <emphasis>**status</emphasis>);</code></p>
    <p><code>/* Возвращает 0 в случае успешного завершения, положительное значение Еххх – в случае ошибки */</code></p>
    <p>Мы должны указать идентификатор потока, завершения которого ожидаем. К сожалению, невозможно задать режим ожидания завершения нескольких потоков (аналога waitpid с идентификатором процесса –1 нет).</p>
    <p>Если указатель <emphasis>status</emphasis> ненулевой, возвращаемое потоком значение (указатель на объект) сохраняется в ячейке памяти, на которую указывает <emphasis>status.</emphasis></p>
    <subtitle>Функция pthread_self</subtitle>
    <p>У каждого потока имеется свой идентификатор, уникальный в пределах данного процесса. Идентификатор возвращается pthread_create и используется при вызове pthread_join. Поток может узнать свой собственный идентификатор вызовом pthread_self:</p>
    <p><code>#include &lt;pthread.h&gt;</code></p>
    <p><code>pthread_t pthread_self(void);</code></p>
    <p><code>/* Возвращает идентификатор вызвавшего потока */</code></p>
    <p>Вызов pthread_self является аналогом getpid для процессов Unix.</p>
    <subtitle>Функция pthread_detach</subtitle>
    <p>Поток может являться как присоединяемым (по умолчанию), так и отсоединенным. При завершении присоединяемого потока его идентификатор и статус завершения сохраняются до тех пор, пока какой-либо другой поток данного процесса не вызовет pthread_join. Отсоединенный поток функционирует аналогично процессу-демону. После его завершения все ресурсы освобождаются. Никакой другой поток не может ожидать его завершения. Если имеется необходимость ожидания одним потоком завершения другого, лучше оставить последний присоединяемым.</p>
    <p>Функция pthread_detach делает данный поток отсоединенным:</p>
    <p><code>#include &lt;pthread.h&gt;</code></p>
    <p><code>int pthread_detach(pthread_t <emphasis>tid</emphasis>);</code></p>
    <p><code>/* Возвращает 0 в случае успешного завершения, положительное значение Еххх в случае ошибки */</code></p>
    <p>Эта функция вызывается потоком при необходимости изменить собственный статус в форме</p>
    <p><code>pthread_detach(pthread_self());</code></p>
    <subtitle>Функция pthread_exit</subtitle>
    <p>Одним из способов завершения потока является вызов pthread_exit:</p>
    <p><code>#include &lt;pthread.h&gt;</code></p>
    <p><code>void pthread_exit(void <emphasis>*status</emphasis>);</code></p>
    <p><code>/* ничего не возвращает вызвавшему потоку */</code></p>
    <p>Если поток не является отсоединенным, его идентификатор и статус завершения сохраняются для возвращения другому потоку, который может вызвать pthread_join.</p>
    <p>Указатель <emphasis>status</emphasis> не должен быть установлен на локальный объект вызвавшего потока (типа автоматической переменной), поскольку этот объект уничтожается при завершении потока.</p>
    <p>Поток может быть завершен двумя другими способами:</p>
    <p>&#9632; начальная функция потока (третий аргумент pthread_create) может вызвать return. Поскольку эта функция должна объявляться как возвращающая указатель на тип void, это возвращаемое значение становится статусом завершения потока;</p>
    <p>&#9632; функция main процесса может завершить работу или один из потоков может вызвать exit или _exit. При этом процесс завершает работу немедленно, вместе со всеми своими потоками.</p>
   </section>
  </section>
  <section>
   <title>
    <p>ПРИЛОЖЕНИЕ В</p>
    <p>Вспомогательные исходные коды</p>
   </title>
   <section>
    <title>
     <p>В.1. Заголовочный файл unpipc.h</p>
    </title>
    <p>Почти все программы книги подключают заголовочный файл unpipc.h, приведенный в листинге В.1.<a l:href="#n_1" type="note">[1]</a> Он подключает все стандартные системные заголовки, нужные большинству пpoгрaмм для работы с сетью, вместе с некоторыми общими системными заголовками. Он также определяет константы типа MAXLINE и прототипы функций ANSI С для функций, определенных в тексте (типа px_ipc_name), и для всех используемых в книге оберток. Мы не приводим эти прототипы.</p>
    <subtitle>Листинг В.1. Заголовочный файл unpipc.h</subtitle>
    <p><code>//lib/unpipc.h</code></p>
    <p><code>1   /* Наш заголовочный файл. */</code></p>
    <p><code>2   #ifndef __unpipc_h</code></p>
    <p><code>3   #define __unpipc_h</code></p>
    <empty-line/>
    <p><code>4   #include "../config.h" /* параметры конфигурации ОС */</code></p>
    <p><code>5   /* "../config.h" создается сценарием configure */</code></p>
    <empty-line/>
    <p><code>6   /* изменяя список директив #include, нужно изменять файлы</code></p>
    <p><code>7    ../aclocal.m4 и ../configure.in. чтобы работал сценарий configure */</code></p>
    <p><code>8   #include &lt;sys/types.h&gt; /* базовые типы данных */</code></p>
    <p><code>9   #include &lt;sys/time.h&gt; /* структура timeval{} для select() */</code></p>
    <empty-line/>
    <p><code>10  #include &lt;time.h&gt; /* timespec{} для pselect() */</code></p>
    <p><code>11  #include &lt;errno.h&gt;</code></p>
    <p><code>12  #include &lt;fcntl.h&gt; /* отключение блокировки */</code></p>
    <p><code>13  #include &lt;limits.h&gt; /* PIPE_BUF */</code></p>
    <p><code>14  #include &lt;signal.h&gt;</code></p>
    <p><code>15  #include &lt;stdio.h&gt;</code></p>
    <p><code>16  #include &lt;stdlib.h&gt;</code></p>
    <p><code>17  #include &lt;string.h&gt;</code></p>
    <p><code>18  #include &lt;sys/stat.h&gt; /* константы режима доступа к файлу S_xxx */</code></p>
    <p><code>19  #include &lt;unistd.h&gt;</code></p>
    <p><code>20  #include &lt;sys/wait.h&gt;</code></p>
    <empty-line/>
    <p><code>21  #ifdef HAVE_MQUEUE_H</code></p>
    <p><code>22  #include &lt;mqueue.h&gt; /* очереди сообщений Posix */</code></p>
    <p><code>23  #endif</code></p>
    <empty-line/>
    <p><code>24  #ifdef HAVE_SEMAPHORE_H</code></p>
    <p><code>25  #include &lt;semaphore.h&gt; /* семафоры Posix */</code></p>
    <p><code>26  #ifndef SEM_FAILED</code></p>
    <p><code>27  #define SEM_FAILED ((sem_t *)(-1))</code></p>
    <p><code>28  #endif</code></p>
    <p><code>29  #endif</code></p>
    <empty-line/>
    <p><code>30  #ifdef HAVE_SYS_MMAN_H</code></p>
    <p><code>31  #include &lt;sys/mman.h&gt; /* разделяемая память Posix */</code></p>
    <p><code>32  #endif</code></p>
    <empty-line/>
    <p><code>33  #ifndef MAP_FAILED</code></p>
    <p><code>34  #define MAP_FAILED ((void *)(-1))</code></p>
    <p><code>35  #endif</code></p>
    <empty-line/>
    <p><code>36  #ifdef HAVE_SYS_IPC_H</code></p>
    <p><code>37  #include &lt;sys/ipc.h&gt; /* System V IPC */</code></p>
    <p><code>38  #endif</code></p>
    <empty-line/>
    <p><code>39  #ifdef HAVE_SYS_MSG_H</code></p>
    <p><code>40  #include &lt;sys/msg.h&gt; /* очереди сообщений System V */</code></p>
    <p><code>41  #endif</code></p>
    <empty-line/>
    <p><code>42  #ifdef HAVE_SYS_SEM_H</code></p>
    <p><code>43  #ifdef __bsdi__</code></p>
    <p><code>44  #undef HAVE_SYS_SEM_H /* тонкий момент: прототип semctl() в BSDI's содержит ошибки*/</code></p>
    <p><code>45  #else</code></p>
    <p><code>46  #include &lt;sys/sem.h&gt; /* семафоры System V */</code></p>
    <p><code>47  #endif</code></p>
    <p><code>48  #ifndef HAVE_SEMUN_UNION /* $$.It semun$$ */</code></p>
    <p><code>49  union semun { /* определение объединения для semctl() */</code></p>
    <p><code>50   int val;</code></p>
    <p><code>51   struct semid_ds *buf;</code></p>
    <p><code>52   unsigned short *array;</code></p>
    <p><code>53  };</code></p>
    <p><code>54  #endif</code></p>
    <p><code>55  #endif /* HAVE_SYS_SEM_H */</code></p>
    <empty-line/>
    <p><code>56  #ifdef HAVE_SYS_SHM_H</code></p>
    <p><code>57  #include &lt;sys/shm.h&gt; /* разделяемая память System V */</code></p>
    <p><code>58  #endif</code></p>
    <empty-line/>
    <p><code>59  #ifdef HAVE_SYS_SELECT_H</code></p>
    <p><code>60  #include &lt;sys/select.h&gt; /* для удобства */</code></p>
    <p><code>61  #endif</code></p>
    <empty-line/>
    <p><code>62  #ifdef HAVE_POLL_H</code></p>
    <p><code>63  #include &lt;poll.h&gt; /* для удобства */</code></p>
    <p><code>64  #endif</code></p>
    <empty-line/>
    <p><code>65  #ifdef HAVE_STROPTS_H</code></p>
    <p><code>66  #include &lt;stropts.h&gt; /* для удобства */</code></p>
    <p><code>67  #endif</code></p>
    <empty-line/>
    <p><code>68  #ifdef HAVE_STRINGS_H</code></p>
    <p><code>69  #include &lt;strings.h&gt; /* для удобства */</code></p>
    <p><code>70  #endif</code></p>
    <empty-line/>
    <p><code>71  /* Следующие три заголовочных файла нужны для ioctl файлов и сокетов:</code></p>
    <p><code>72   * &lt;sys/ioctl.h&gt;, &lt;sys/filio.h&gt;, и &lt;sys/sockio.h&gt;.</code></p>
    <p><code>73   */</code></p>
    <p><code>74  #ifdef HAVE_SYS_IOCTL_H</code></p>
    <p><code>75  #include &lt;sys/ioctl.h&gt;</code></p>
    <p><code>76  #endif</code></p>
    <p><code>77  #ifdef HAVE_SYS_FILIO_H</code></p>
    <p><code>78  #include &lt;sys/filio.h&gt;</code></p>
    <p><code>79  #endif</code></p>
    <empty-line/>
    <p><code>80  #ifdef HAVE_PTHREAD_H</code></p>
    <p><code>81  #include &lt;pthread.h&gt;</code></p>
    <p><code>82  #endif</code></p>
    <p><code>83  #ifdef HAVE_DOOR_H</code></p>
    <p><code>84  #include &lt;door.h&gt; /* интерфейс дверей Solaris */</code></p>
    <p><code>85  #endif</code></p>
    <p><code>86  #ifdef HAVE_RPC_RPC_H</code></p>
    <p><code>87  #ifdef _PSX4_NSPACE_H_TS /* баги Digital Unix 4.0b */</code></p>
    <p><code>88  #undef SUCCESS</code></p>
    <p><code>89  #endif</code></p>
    <p><code>90  #include &lt;rpc/rpc.h&gt; /* Sun RPC */</code></p>
    <p><code>91  #endif</code></p>
    <empty-line/>
    <p><code>92  /* Определяем bzero() как макрос, если его нет в стандартной библиотеке С */</code></p>
    <p><code>93  #ifndef HAVE_BZERO</code></p>
    <p><code>94  #define bzero(ptr,n) memset(ptr, 0, n)</code></p>
    <p><code>95  #endif</code></p>
    <empty-line/>
    <p><code>96  /* Posix.1g требует, чтобы INFTIM определялось в &lt;poll.h&gt;. но во многих системах эта</code></p>
    <p><code>97     константа все еще определяется в &lt;sys/stropts.h&gt;. Нам не нужно подключать все</code></p>
    <p><code>98     функции для работы с потоками, поэтому мы определяем INFTM здесь. Это стандартное</code></p>
    <p><code>99     значение, но нет гарантий, что оно равно –1 */</code></p>
    <p><code>100 #ifndef INFTIM</code></p>
    <p><code>101 #define INFTIM (-1) /* неограниченное время опроса */</code></p>
    <p><code>102 #ifdef HAVE_POLL_H</code></p>
    <p><code>103 #define INFTIM_UNPH /* чтобы из файла unpxti.h узнать, что константа определена */</code></p>
    <p><code>104 #endif</code></p>
    <p><code>105 #endif</code></p>
    <empty-line/>
    <p><code>106 /* Прочие константы */</code></p>
    <p><code>107 #ifndef РАТН_МАХ /* должна быть в &lt;limits.h&gt; */</code></p>
    <p><code>108 #define PATH_MAX 1024 /* максимальное количество символов в полном имени файла */</code></p>
    <p><code>109 #endif</code></p>
    <p><code>110 #define MAX_PATH 1024</code></p>
    <p><code>111 #define MAXLINE 4096 /* максимальная длина строки */</code></p>
    <p><code>112 #define BUFFSI2E 8192 /* объем буфера чтения и записи */</code></p>
    <p><code>113 #define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)</code></p>
    <p><code>114  /* разрешения по умолчанию для новых файлов */</code></p>
    <p><code>115 #define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)</code></p>
    <p><code>116  /* разрешения по умолчанию для новых каталогов */</code></p>
    <p><code>117 #define SVMSG_MODE (MSG_R | MSG_W | MSG_R&gt;&gt;3 | MSG_R&gt;&gt;6)</code></p>
    <p><code>118  /* разрешения по умолчанию для новых очередей сообщений System V */</code></p>
    <p><code>119 #define SVSEM_MODE (SEM_R | SEM_A | SEM_R&gt;&gt;3 | SEM_R&gt;&gt;6)</code></p>
    <p><code>120  /* разрешения по умолчанию для новых семафоров System V */</code></p>
    <p><code>121 #define SVSHM_MODE (SHM_R | SHM_W | SHM_R&gt;&gt;3 | SHM_R&gt;&gt;6)</code></p>
    <p><code>122  /* разрешения по умолчанию для новой разделяемой памяти System V */</code></p>
    <empty-line/>
    <p><code>123 typedef void Sigfunc(int); /* для обработчиков сигналов */</code></p>
    <p><code>124 #ifdef HAVE_SIGINFO_T_STRUCT</code></p>
    <p><code>125 typedef void Sigfunc_rt(int, siginfo_t*, void*);</code></p>
    <p><code>126 #endif</code></p>
    <empty-line/>
    <p><code>127 #define min(a,b) ((a) &lt; (b) ? (a) : (b))</code></p>
    <p><code>128 #define max(a,b) ((a) &gt; (b) ? (a) : (b))</code></p>
    <p><code>129 #ifndef HAVE_TIMESPEC_STRUCT</code></p>
    <p><code>130 struct timespec {</code></p>
    <p><code>131  time_t tv_sec; /* секунды */</code></p>
    <p><code>132  long tv_nsec; /* и наносекунды */</code></p>
    <p><code>133 };</code></p>
    <p><code>134 #endif</code></p>
    <empty-line/>
    <p><code>135 /*</code></p>
    <p><code>136 В функциях-обертках open(), mq_open(), sem_open() мы обрабатываем</code></p>
    <p><code>137 дополнительные аргументы с помощью макросов va_XXX().</code></p>
    <p><code>138 Один из аргументов имеет тип mode_t, что приводит</code></p>
    <p><code>139 к ошибке в BSD/OS, где для этого типа используются</code></p>
    <p><code>140 16-разрядные целые. При вызове обертки</code></p>
    <p><code>141 компилятор преобразовывает 16-разрядное целое</code></p>
    <p><code>142 в 32-разрядное. Поэтому и необходимо то.</code></p>
    <p><code>143 что сделано ниже.</code></p>
    <p><code>144 */</code></p>
    <p><code>145 #ifdef __bsdi__</code></p>
    <p><code>146 #define va_mode_t int</code></p>
    <p><code>147 #else</code></p>
    <p><code>148 #define va_mode_t mode_t</code></p>
    <p><code>149 #endif</code></p>
    <empty-line/>
    <p><code>150 /* макросы блокировки записей */</code></p>
    <p><code>151 #define read_lock(fd, offset, whence, len) \</code></p>
    <p><code>152  lock_reg(fd, F_SETLK, F_RDLCK, offset, whence, len)</code></p>
    <p><code>153 #define readw_lock(fd, offset, whence, len) \</code></p>
    <p><code>154  lock_reg(fd, F_SETLKW, F_RDLCK, offset, whence, len)</code></p>
    <p><code>155 #define write_lock(fd, offset, whence, len) \</code></p>
    <p><code>156  lock_reg(fd, F_SETLK, F_WRLCK, offset, whence, len)</code></p>
    <p><code>157 #define writew_lock(fd, offset, whence, len) \</code></p>
    <p><code>158  lock_reg(fd, F_SETLKW, F_WRLCK, offset, whence, len)</code></p>
    <p><code>159 #define un_lock(fd, offset, whence, len) \</code></p>
    <p><code>160  lock_reg(fd, F_SETLK, F_UNLCK, offset, whence, len)</code></p>
    <p><code>161 #define is_read_lockable(fd, offset, whence, len) \</code></p>
    <p><code>162  lock_test(fd, F_RDLCK, offset, whence, len)</code></p>
    <p><code>163 #define is_write_lockable(fd, offset, whence, len) \</code></p>
    <p><code>164  lock_test(fd. F_WRLCK, offset, whence, len)</code></p>
   </section>
   <section>
    <title>
     <p>B.2. Заголовочный файл config.h</p>
    </title>
    <p>Для подготовки пpoгрaмм в этой книге использовалась утилита GNU autoconf, которая помогает сделать их более переносимыми. Она доступна по адресу ftp://prep.ai.mit.edu/pub/gnu. Утилита создает сценарий configure, который следует запустить после того, как вы зaгрyзитe пpoгрaммy из Сети. Этот сценарий определяет возможности вашей системы: поддерживаются ли очереди System V, определен ли тип uint8_t, определена ли функция gethostname и т. д. В процессе работы он создает заголовочный файл config.h, который включается нашим unpipc.h перед всеми остальными. В листинге В.2 приведен пример заголовочного файла config.h для системы Solaris 2.6 и компилятора gcc.</p>
    <p>Строки, начинающиеся с #define, описывают функции, поддерживаемые в системе. Закомментированные строки соответствуют неподдерживаемым функциям.</p>
    <subtitle>Листинг В.2. Заголовочный файл config.h для Solaris 2.6</subtitle>
    <p><code>//sparc-sun-solaris2.6/config.h</code></p>
    <p><code>1  /* config.h. Автоматически создается сценарием configure. */</code></p>
    <p><code>2  /* Константы следует указывать только тогда, когда есть соответствующий заголовочный файл */</code></p>
    <p><code>3  #define CPU_VENDOR_OS "sparc-sun-solaris2.6"</code></p>
    <p><code>4  #define HAVE_DOOR_H 1 /* &lt;door.h&gt; */</code></p>
    <p><code>5  #define HAVE_MQUEUE_H 1 /* &lt;mqueue.h&gt; */</code></p>
    <p><code>6  #define HAVE_POLL_H 1 /*&lt;poll.h&gt;*/</code></p>
    <p><code>7  #define HAVE_PTHREAD_H 1 /* &lt;pthread.h&gt; */</code></p>
    <p><code>8  #define HAVE_RPC_RPC_H 1 /* &lt;rpc/rpc.h&gt; */</code></p>
    <p><code>9  #define HAVE_SEMAPHORE_H 1 /* semaphore.h&gt; */</code></p>
    <p><code>10 #define HAVE_STRINGS_H 1 /* &lt;strings.h&gt; */</code></p>
    <p><code>11 #define HAVE_SYS_FILIO_H 1 /* &lt;sys/filio.h&gt; */</code></p>
    <p><code>12 #define HAVE_SYS_IOCTL_H 1 /* &lt;sys/ioctl.h&gt; */</code></p>
    <p><code>13 #define HAVE_SYS_IPC_H 1 /* &lt;sys/ipc.h&gt; */</code></p>
    <p><code>14 #define HAVE_SYS_MMAN_H 1 /* &lt;sys/mman.h&gt; */</code></p>
    <p><code>15 #define HAVE_SYS_MSG_H 1 /* &lt;sys/msg.h&gt; */</code></p>
    <p><code>16 #define HAVE_SYS_SEM_H 1 /* &lt;sys/sem.h&gt; */</code></p>
    <p><code>17 #define HAVE_SYS_SHM_H 1 /* &lt;sys/shm.h&gt; */</code></p>
    <p><code>18 #define HAVE_SYS_SELECT_H 1 /* &lt;sys/select.h&gt; */</code></p>
    <p><code>19 /* #undef HAVE_SYS_SYSCTL_H */ /* &lt;sys/sysctl.h&gt; */</code></p>
    <p><code>20 #define HAVE_SYS_TIME_H 1 /* &lt;sys/time.h&gt; */</code></p>
    <empty-line/>
    <p><code>21 /* Определена, если можно подключить &lt;time.h&gt; вместе с &lt;sys/time.h&gt; */</code></p>
    <p><code>22 #define TIME_WITH_SYS_TIME 1</code></p>
    <empty-line/>
    <p><code>23 /* Определены, если имеются соответствующие функции */</code></p>
    <p><code>24 #define HAVE_BZERO 1</code></p>
    <p><code>25 #define HAVE_FATTACH 1</code></p>
    <p><code>26 #define HAVE_POLL 1</code></p>
    <p><code>27 /* #undef HAVE_PSELECT */</code></p>
    <p><code>28 #define HAVE_SIGWAIT 1</code></p>
    <p><code>29 #define HAVE_VALLOC 1</code></p>
    <p><code>30 #define HAVE_VSNPRINTF 1</code></p>
    <empty-line/>
    <p><code>31 /* Определены, если прототипы функций есть в заголовках */</code></p>
    <p><code>32 #define HAVE_GETHOSTNAME_PROTO 1 /* &lt;unistd.h&gt; */</code></p>
    <p><code>33 #define HAVE_GETRUSAGE_PROTO 1 /* &lt;sys/resource.h&gt; */</code></p>
    <p><code>34 /* #undef HAVE_PSELECT_PROTO */ /* &lt;sys/select.h&gt; */</code></p>
    <p><code>35 #define HAVE SHM_OPEN_PROTO 1 /* &lt;sys/mman.h&gt; */</code></p>
    <p><code>36 #define HAVE_SNPRINTF_PROTO 1 /* &lt;stdio.h&gt; */</code></p>
    <p><code>37 #define HAVE_THR_SETCONCURRENCY_PROTO 1 /* &lt;thread.h&gt; */</code></p>
    <empty-line/>
    <p><code>38 /* Определены, если определены соответствующие структуры */</code></p>
    <p><code>39 #define HAVE_SIGINFO_T_STRUCT 1 /* &lt;signal.h&gt; */</code></p>
    <p><code>40 #define HAVE_TIMESPEC_STRUCT 1 /* &lt;time.h&gt; */</code></p>
    <p><code>41 /* #undef HAVE_SEMUN_UNION */ /* &lt;sys/sem.h&gt; */</code></p>
    <empty-line/>
    <p><code>42 /* Устройства */</code></p>
    <p><code>43 #define HAVE_DEV_ZERO 1</code></p>
    <empty-line/>
    <p><code>44 /* Для соответствующих типов данных */</code></p>
    <p><code>45 /* #undef int8_t */ /* &lt;sys/types.h&gt; */</code></p>
    <p><code>46 /* #undef intl6_t */ /* &lt;sys/types.h&gt; */</code></p>
    <p><code>47 /* #undef int32_t */ /* &lt;sys/types.h&gt; */</code></p>
    <p><code>48 /* #undef uint8_t */ /* &lt;sys/types.h&gt; */</code></p>
    <p><code>49 /* #undef uintl6_t */ /* &lt;sys/types.h&gt; */</code></p>
    <p><code>50 /* #undef uint32_t */ /* &lt;sys/types.n&gt; */</code></p>
    <p><code>51 /* #undef size_t */ /* &lt;sys/types.h&gt; */</code></p>
    <p><code>52 /* #undef ssize_t */ /* &lt;sys/types.h&gt; */</code></p>
    <empty-line/>
    <p><code>53 #define POSIX_IPC_PREFIX "/"</code></p>
    <p><code>54 #define RPCGEN_ANSIC 1 /* определена, если rpcgen поддерживает параметр –С */</code></p>
   </section>
   <section>
    <title>
     <p>В.З. Стандартные функции вывода сообщений об ошибках</p>
    </title>
    <p>Мы определили свой набор функций, используемых во всех программах книги для обработки ситуаций с возникновением ошибок. Причина, по которой мы создаем эти функции, заключается в том, что теперь мы можем писать команды в одну строку:</p>
    <p><code>if (условие_ошибки) err_sys(формат printf с произвольным количеством аргументов);</code></p>
    <p>вместо:</p>
    <p><code>if (условие_ошибки) {</code></p>
    <p><code> char buff[200];</code></p>
    <p><code> snprintf(buff, sizeof(buff), формат printf с произвольным количеством аргументов);</code></p>
    <p><code> perror(buff);</code></p>
    <p><code> exit(1);</code></p>
    <p><code>}</code></p>
    <p>Функции обработки ошибок используют возможности работы со списком аргументов переменной длины, определенные стандартом ANSI С. В разделе 7.3 [ 11 ] вы можете узнать подробности.</p>
    <p>В таблице В.1 приведены отличия между различными функциями обработки ошибок. Если глобальное целое daemon_proc отлично от нуля, сообщение передается демону syslog с указанным уровнем (см. главу 12 [24]); в противном случае сообщение выводится в стандартный поток сообщений об ошибках.</p>
    <empty-line/>
    <p>Таблица В.1. Функции обработки ошибок</p>
    <table>
     <tr align="left">
      <th align="left" valign="top">Функция</th>
      <th align="left" valign="top">strerror(errno)?</th>
      <th align="left" valign="top">Завершение?</th>
      <th align="left" valign="top">Уровень syslog</th>
     </tr>
     <tr align="left">
      <td align="left" valign="top">err_dump</td>
      <td align="left" valign="top">Да</td>
      <td align="left" valign="top">abort();</td>
      <td align="left" valign="top">LOG_ERR</td>
     </tr>
     <tr align="left">
      <td align="left" valign="top">err_msg</td>
      <td align="left" valign="top">Нет</td>
      <td align="left" valign="top">return;</td>
      <td align="left" valign="top">LOG_INFO</td>
     </tr>
     <tr align="left">
      <td align="left" valign="top">err_quit</td>
      <td align="left" valign="top">Нет</td>
      <td align="left" valign="top">exit(1);</td>
      <td align="left" valign="top">LOG_ERR</td>
     </tr>
     <tr align="left">
      <td align="left" valign="top">err_ret</td>
      <td align="left" valign="top">Да</td>
      <td align="left" valign="top">return;</td>
      <td align="left" valign="top">LOG_INFO</td>
     </tr>
     <tr align="left">
      <td align="left" valign="top">err_sys</td>
      <td align="left" valign="top">Да</td>
      <td align="left" valign="top">exit(1);</td>
      <td align="left" valign="top">LOG_ERR</td>
     </tr>
    </table>
    <p>В листинге В.3 приведен текст функций из табл. В.1.</p>
    <subtitle>Листинг В.3. Функции обработки ошибок</subtitle>
    <p><code>//lib/error.с</code></p>
    <p><code>1  #include "unpipc.h"</code></p>
    <p><code>2  #include &lt;stdarg.h&gt; /* заголовочный файл ANSI С */</code></p>
    <p><code>3  #include &lt;syslog.h&gt; /* для демона syslog() */</code></p>
    <empty-line/>
    <p><code>4  int daemon_proc; /* устанавливается отличным от нуля daemon_init() */</code></p>
    <p><code>5  static void err_doit(int, int, const char*, va_list);</code></p>
    <empty-line/>
    <p><code>6  /* Нефатальная ошибка при системном вызове.</code></p>
    <p><code>7   * Вывод сообщения и возврат из функции. */</code></p>
    <p><code>8  void</code></p>
    <p><code>9  err_ret(const char *fmt, ...)</code></p>
    <p><code>10 {</code></p>
    <p><code>11  va_list ар;</code></p>
    <p><code>12  va_start(ap, fmt);</code></p>
    <p><code>13  err_doit(1, LOG_INFO, fmt, ap);</code></p>
    <p><code>14  va_end(ap);</code></p>
    <p><code>15  return;</code></p>
    <p><code>16 }</code></p>
    <empty-line/>
    <p><code>17 /* Фатальная ошибка при системном вызове.</code></p>
    <p><code>18  * Вывод сообщения и завершение работы. */</code></p>
    <p><code>19 void</code></p>
    <p><code>20 err_sys(const char *fmt, ...)</code></p>
    <p><code>21 {</code></p>
    <p><code>22  va_list ap;</code></p>
    <p><code>23  va_start(ap, fmt);</code></p>
    <p><code>24  err_doit(1, LOG_ERR, fmt, ар);</code></p>
    <p><code>25  va_end(ap);</code></p>
    <p><code>26  exit(1);</code></p>
    <p><code>27 }</code></p>
    <empty-line/>
    <p><code>28 /* Фатальная ошибка при системном вызове.</code></p>
    <p><code>29  * Вывод сообщения, сохранение дампа памяти, завершение работы. */</code></p>
    <p><code>30 void</code></p>
    <p><code>31 err_dump(const char *fmt, ...)</code></p>
    <p><code>32 {</code></p>
    <p><code>33  va_list ар;</code></p>
    <p><code>34  va_start(ap, fmt);</code></p>
    <p><code>35  err_doit(1, LOG_ERR, fmt, ap);</code></p>
    <p><code>36  va_end(ap);</code></p>
    <p><code>37  abort(); /* сохранение дампа и завершение */</code></p>
    <p><code>38  exit(1); /* досюда не должно дойти */</code></p>
    <p><code>39 }</code></p>
    <empty-line/>
    <p><code>40 /* Нефатальная ошибка не при системном вызове.</code></p>
    <p><code>41  * Вывод сообщения и возврат. */</code></p>
    <p><code>42 void</code></p>
    <p><code>43 err_msg(const char *fmt, ...)</code></p>
    <p><code>44 {</code></p>
    <p><code>45  va_list ap;</code></p>
    <p><code>46  va_start(ap, fmt);</code></p>
    <p><code>47  err_doit(0, LOG_INFO, fmt, ap);</code></p>
    <p><code>48  va_end(ap);</code></p>
    <p><code>49  return;</code></p>
    <p><code>50 }</code></p>
    <empty-line/>
    <p><code>51 /* Фатальная ошибка не при системном вызове.</code></p>
    <p><code>52  * Вывод сообщения и возврат. */</code></p>
    <p><code>53 void</code></p>
    <p><code>54 err_quit(const char *fmt, ...)</code></p>
    <p><code>55 {</code></p>
    <p><code>56  va_list ap;</code></p>
    <p><code>57  va_start(ap, fmt);</code></p>
    <p><code>58  err_doit(0, LOG_ERR, fmt, ap);</code></p>
    <p><code>59  va_end(ap);</code></p>
    <p><code>60  exit(1);</code></p>
    <p><code>61 }</code></p>
    <empty-line/>
    <p><code>62 /* Вывод сообщения и возврат.</code></p>
    <p><code>63  * Вызывающий указывает "errnoflag" и "level". */</code></p>
    <p><code>64 static void</code></p>
    <p><code>65 err_doit(int errnoflag, int level, const char *fmt, va_list ap)</code></p>
    <p><code>66 {</code></p>
    <p><code>67  int errno_save, n;</code></p>
    <p><code>68  char buf[MAXLINE];</code></p>
    <p><code>69  errno_save = errno; /* значение может понадобиться вызвавшему */</code></p>
    <p><code>70 #ifdef HAVE_VSNPRINTF</code></p>
    <p><code>71  vsnprintf(buf, sizeof(buf), fmt, ар); /* защищенный вариант */</code></p>
    <p><code>72 #else</code></p>
    <p><code>73  vsprintf(buf, fmt, ар); /* незащищенный вариант <emphasis>*/</emphasis></code></p>
    <p><code>74 #endif</code></p>
    <p><code>75  n = strlen(buf);</code></p>
    <p><code>76  if (errnoflag)</code></p>
    <p><code>77   snprintf(buf+n, sizeof(buf)-n, ": %s", strerror(errno_save));</code></p>
    <p><code>78  strcat(buf, "\n");</code></p>
    <p><code>79  if (daemon_proc) {</code></p>
    <p><code>80   syslog(level, buf);</code></p>
    <p><code>81  } else {</code></p>
    <p><code>82   fflush(stdout); /* если stdout и stderr одинаковы */</code></p>
    <p><code>83   fputs(buf, stderr);</code></p>
    <p><code>84   fflush(stderr);</code></p>
    <p><code>85  }</code></p>
    <p><code>86  return;</code></p>
    <p><code>87 }</code></p>
   </section>
  </section>
  <section>
   <title>
    <p>ПРИЛОЖЕНИЕ Г</p>
    <p>Решения некоторых упражнений</p>
   </title>
   <section>
    <title>
     <p>Глава 1</p>
    </title>
    <p>1. В обоих процессах нужно лишь указать флаг O_APPEND при вызове функции open или режим дополнения файла при вызове fopen. Ядро гарантирует, что данные будут дописываться в конец файла. Это самая простая форма синхронизации доступа к файлу. На с. 60-61 [21] об этом рассказывается более подробно. Синхронизация становится проблемой при обновлении имеющихся в файле данных, как это происходит в базах данных.</p>
    <p>2. Обычно встречается что-нибудь вроде:</p>
    <p><code>#ifdef REENTRANT</code></p>
    <p><code>#define errno (*_errno())</code></p>
    <p><code>#else</code></p>
    <p><code>extern int errno;</code></p>
    <p><code>#endif</code></p>
    <p>Если определена константа _REENTRANT, обращение к errno приводит к вызову функции _errno, возвращающей адрес переменной errno вызвавшего потока. Эта переменная, скорее всего, хранится в области собственных данных этого потока (раздел 23.5 [24]). Если константа REENTRANT не определена, переменная errno является глобальной.</p>
   </section>
   <section>
    <title>
     <p>Глава 2</p>
    </title>
    <p>1. Эти два бита могут менять действующий идентификатор пользователя и/или группы выполняющейся программы. Идентификаторы используются в разделе 2.4.</p>
    <p>2. Сначала следует указать флаги O_CREAT | O_EXCL, и если вызов окажется успешным, будет создан новый объект. Если вызов вернет ошибку EEXIST, объект уже существует и программа должна вызвать open еще раз, без флага O_CREAT или O_EXCL Второй вызов должен оказаться успешным, но есть вероятность, что он вернет ошибку ENOENT, если какой-либо другой поток или процесс удалит объект в промежутке между этими двумя вызовами.</p>
   </section>
   <section>
    <title>
     <p>Глава 3</p>
    </title>
    <p>1. Текст пpoгрaммы приведен в листинге Г.1.<a l:href="#n_1" type="note">[1]</a></p>
    <subtitle>Листинг Г.1. Вывод идентификатора и порядкового номера слота</subtitle>
    <p><code>//svmsg/slotseq.c</code></p>
    <p><code>1  #include "unpipc.h"</code></p>
    <empty-line/>
    <p><code>2  int</code></p>
    <p><code>3  main(int argc, char **argv)</code></p>
    <p><code>4  {</code></p>
    <p><code>5   int i, msqid;</code></p>
    <p><code>6   struct msqid_ds info;</code></p>
    <p><code>7   for (i = 0; i &lt; 10; i++) {</code></p>
    <p><code>8    msqid = Msgget(IPC_PRIVATE, SVMSG_MODE | IPC_CREAT);</code></p>
    <p><code>9    Msgctl(msqid, IPC_STAT, &amp;info);</code></p>
    <p><code>10   printf("msqid = %d, seq = %lu\n", msqid, info.msg_perm.seq);</code></p>
    <p><code>11   Msgctl(msqid, IPC_RMID, NULL);</code></p>
    <p><code>12  }</code></p>
    <p><code>13  exit(0);</code></p>
    <p><code>14 }</code></p>
    <p>2. Первый вызов msgget задействует первую свободную очередь сообщений, порядковый номер которой имеет значение 20 после двукратного запуска программы из листинга 3.2, и вернет идентификатор 1000. Если предположить, что следующая доступная очередь сообщений никогда ранее не использовалась, ее порядковый номер будет иметь значение 0, а возвращаться будет идентификатор 1.</p>
    <p>3. Программа приведена в листинге Г.2.</p>
    <subtitle>Листинг Г.2. Проверка использования маски создания файла функцией msgget</subtitle>
    <p><code>//svmsg/testumask.c</code></p>
    <p><code>1 #include "unpipc.h"</code></p>
    <empty-line/>
    <p><code>2 int</code></p>
    <p><code>3 main(int argc, char **argv)</code></p>
    <p><code>4 {</code></p>
    <p><code>5  Msgget(IPC_PRIVATE, 0666 | IPC_CREAT | IPC_EXCL);</code></p>
    <p><code>6  unlink("/tmp/fifo.1");</code></p>
    <p><code>7  Mkfifo("/tmp/fifo.1", 0666);</code></p>
    <p><code>8  exit(0);</code></p>
    <p><code>9 }</code></p>
    <p>Запустив эту пpoгрaммy, мы увидим, что маска создания файла имеет значение 2 (снять бит записи для прочих пользователей) и этот бит оказывается снятым для канала FIFO, но не для очереди сообщений:</p>
    <p><code>solaris % <strong>umask</strong></code></p>
    <p><code>02</code></p>
    <p><code>solaris % <strong>testumask</strong></code></p>
    <p><code>solaris % <strong>ls –l /tmp/fifo.1</strong></code></p>
    <p><code>prw-rw-r-- 1 rstevens other1 0 Mar 25 16:05 /tmp/fifo.1</code></p>
    <p><code>solaris % <strong>ipcs –q</strong></code></p>
    <p><code>IPC status from &lt;running system&gt; as of Wed Mar 25 16:06:03 1998</code></p>
    <p><code>T ID  KEY       MODE      OWNER    GROUP</code></p>
    <p><code>Message Queues:</code></p>
    <p><code>q 200 00000000 –rw-rw-rw– rstevens other1</code></p>
    <p>4. При использовании ftok имеется вероятность того, что для двух полных имен получится один и тот же ключ. При использовании IPC_PRIVATE сервер знает, что он создает новую очередь, но в этом случае ему нужно записать ее идентификатор в какой-либо файл, чтобы клиенты могли его считать.</p>
    <p>5. Вот один из способов обнаружения коллизий:</p>
    <p><code>solaris % <strong>find / –links 1 –not –type l – print | xargs –n1 ftok1 &gt; temp.1</strong></code></p>
    <p><code>solaris % <strong>wc –l temp.1</strong></code></p>
    <p><code>109351 temp.1</code></p>
    <p><code>solaris % <strong>sort +0 –1 temp.1 | nawk '{ if (lastkey== $1) print lastline, $0 lastline = $0 lastkey = $1 }' &gt; temp.2</strong></code></p>
    <p><code>solaris % <strong>wc –l temp.2 82188 temp.2</strong></code></p>
    <p>Программа find игнорирует файлы, на которые имеется несколько ссылок (поскольку у всех ссылок одинаковый номер узла), и символические ссылки (поскольку функция stat возвращает информацию для файла, на который ссылка указывает). Большой процент коллизий (75,2%) вызван тем, что в Solaris 2.x используется только 12 бит номера узла. Поэтому в файловых системах с числом файлов более 4096 количество коллизий может быть велико. Например, файлы с номерами 4096, 8192, 12288 и 16384 будут иметь один и тот же ключ IPC (если все они принадлежат одной файловой системе).</p>
    <p>Мы запустили эту программу в той же файловой системе, но используя функцию ftok из BSD/OS, которая добавляет номер узла к ключу целиком, и получили всего 849 коллизий (менее 1%).</p>
   </section>
   <section>
    <title>
     <p>Глава 4</p>
    </title>
    <p>1. Если бы дескриптор fd[1] остался открытым в дочернем процессе при завершении родительского, его операция read для этого дескриптора не вернула бы признак конца файла, потому что дескриптор был бы еще открыт в дочернем процессе. Закрытие fd[1] гарантирует, что после завершения родительского процесса все его дескрипторы закрываются и вызов read для fd[1] возвращает 0.</p>
    <p>2. Если поменять местами порядок вызовов, другой процесс сможет создать канал FIFO в промежутке между вызовами open и mkfifo, в результате чего последний вернет ошибку.</p>
    <p>3. Если выполнить</p>
    <p><code>solaris % <strong>mainopen 2&gt;temp.stderr</strong></code></p>
    <p><code>/etc/ntp.conf &gt; /myfile</code></p>
    <p><code>solaris % <strong>cat temp.stderr</strong></code></p>
    <p><code>sh: /myfile: cannot create</code></p>
    <p>мы увидим, что popen срабатывает успешно, но fgets считывает символ конца файла. Сообщение об ошибке записывается интерпретатором в стандартный поток сообщений об ошибках.</p>
    <p>5. Измените первый вызов open, указав флаг отключения блокировки:</p>
    <p><code>readfifo = Open(SERV_FIFO, O_RDONLY | O_NONBLOCK, 0);</code></p>
    <p>Возврат из этого вызова произойдет немедленно, как и из следующего вызова open, поскольку канал уже открыт на чтение. Чтобы избежать ошибки при вызове readline, флаг O_NONBLOCK для дескриптора readfifo следует снять, перед тем как вызывать эту функцию.</p>
    <p>6. Если клиент откроет свой канал на чтение перед открытием канала сервера, все зависнет. Единственный способ избежать блокировки заключается в вызове open для этих двух каналов в порядке, показанном в листинге 4.11, или в использовании флага отключения блокировки.</p>
    <p>7. Исчезновение пишущего процесса воспринимается считывающим как конец файла.</p>
    <p>8. В листинге Г.3 приведен текст соответствующей программы.</p>
    <subtitle>Листинг Г.З. Возвращает ли fstat количество байтов в канале FIFO?</subtitle>
    <p><code>//pipe/test1l.c</code></p>
    <p><code>1  #include "unpipc.h"</code></p>
    <empty-line/>
    <p><code>2  int</code></p>
    <p><code>3  main(int argc, char **argv)</code></p>
    <p><code>4  {</code></p>
    <p><code>5   int fd[2],</code></p>
    <p><code>6   char buff[7];</code></p>
    <p><code>7   struct stat info;</code></p>
    <p><code>8   if (argc != 2)</code></p>
    <p><code>9    err_quit("usage: test1 &lt;pathname&gt;");</code></p>
    <p><code>10  Mkfifo(argv[1], FILE_MODE);</code></p>
    <p><code>11  fd[0] = Open(argv[1], O_RDONLY | O_NONBLOCK);</code></p>
    <p><code>12  fd[1] = Open(argv[1], O_WRONLY | O_NONBLOCK);</code></p>
    <p><code>13  /* 4check sizes when FIFO is empty */</code></p>
    <p><code>14  Fstat(fd[0], &amp;info);</code></p>
    <p><code>15  printf("fd[0]: st_size = %ld\n", (long) info.st_size);</code></p>
    <p><code>16  Fstat(fd[1], &amp;info);</code></p>
    <p><code>17  printf("fd[1]: st_size = %ld\n", (long) info.st_size);</code></p>
    <p><code>18  Write(fd[1], buff, sizeof(buff));</code></p>
    <p><code>19  Fstat(fd[0], &amp;info);</code></p>
    <p><code>20  printf("fd[0]: st_size = %ld\n", (long) info.st_size);</code></p>
    <p><code>21  Fstat(fd[1], &amp;info);</code></p>
    <p><code>22  printf("fd[1]: st_size = %ld\n", (long) info.st_size);</code></p>
    <p><code>23  exit(0);</code></p>
    <p><code>24 }</code></p>
    <p>9. Вызов select возвращает информацию о возможности записи в дескриптор, но вызов write приводит к отправке сигнала SIGPIPE. Это описано в книге [24, с. 153-155]; когда возникает ошибка чтения или записи, select возвращает информацию о том, что дескриптор доступен, а собственно ошибка возвращается уже вызовами read или write. В листинге Г.4 приведен текст соответствующей пpoгрaммы.</p>
    <subtitle>Листинг Г.4. Что возвращает select при закрытии другого конца канала?</subtitle>
    <p><code>//pipe/test2.c</code></p>
    <p><code>1  #include "unpipc.h"</code></p>
    <empty-line/>
    <p><code>2  int</code></p>
    <p><code>3  main(int argc, char **argv)</code></p>
    <p><code>4  {</code></p>
    <p><code>5   int fd[2], n;</code></p>
    <p><code>6   pid_t childpid;</code></p>
    <p><code>7   fd_set wset;</code></p>
    <p><code>8   Pipe(fd);</code></p>
    <p><code>9   if ((childpid = Fork()) == 0) { /* child */</code></p>
    <p><code>10   printf("child closing pipe read descriptor\n");</code></p>
    <p><code>11   Close(fd[0]);</code></p>
    <p><code>12   sleep(6);</code></p>
    <p><code>13   exit(0);</code></p>
    <p><code>14  }</code></p>
    <p><code>15  /* 4parent */</code></p>
    <p><code>16  Close(fd[0]); /* для двустороннего канала */</code></p>
    <p><code>17  sleep(3);</code></p>
    <p><code>18  FD_ZERO(&amp;wset);</code></p>
    <p><code>19  FD_SET(fd[1], &amp;wset);</code></p>
    <p><code>20  n = select(fd[1] + 1, NULL, &amp;wset, NULL, NULL);</code></p>
    <p><code>21  printf("select returned %d\n", n);</code></p>
    <p><code>22  if (FD_ISSET(fd[1], &amp;wset)) {</code></p>
    <p><code>23   printf("fd[1] writable\n");</code></p>
    <p><code>24   Write(fd[1], "hello", 5);</code></p>
    <p><code>25  }</code></p>
    <p><code>26  exit(0);</code></p>
    <p><code>27 }</code></p>
   </section>
   <section>
    <title>
     <p>Глава 5</p>
    </title>
    <p>1. Сначала создайте очередь, не указывая никаких атрибутов, а затем вызовите mq_getattr для получения атрибутов по умолчанию. Затем удалите очередь и создайте ее снова, используя значения по умолчанию для всех неуказанных атрибутов.</p>
    <p>2. Для второго сообщения сигнал не отправляется, поскольку регистрация снимается после отправки первого сигнала.</p>
    <p>3. Для второго сообщения сигнал не отправляется, поскольку в момент отправки этого сообщения очередь не была пуста.</p>
    <p>4. Компилятор GNU С в системе Solaris 2.6 (в котором обе константы определены как вызовы sysconf) возвращает ошибки:</p>
    <p><code>test1.c:13: warning: int format, long int arg (arg 2)</code></p>
    <p><code>test1.c:13: warning: int format, long int arg (arg 3)</code></p>
    <p>5. В Solaris 2.6 мы указываем 1000000 сообщений по 10 байт в каждом. При этом создается файл размером 20000536 байт, что соответствует результатам, полученным с помощью пpoгрaммы 5.4: 10 байт данных на сообщение, 8 байт дополнительной информации (возможно, указатели), еще 2 байта добавочной информации (возможно, дополнение до кратного 4) и 536 байт добавочных данных на весь файл. Перед вызовом mq_open размер программы, выводимый ps, равнялся 1052 Кбайт, а после создания очереди размер вырос до 20 Мбайт. Это заставляет предположить, что очереди сообщений Posix реализованы через отображение файлов в память, и mq_open отображает файл в адресное пространство вызвавшего процесса. Аналогичные результаты получаются в Digital Unix 4.0B.</p>
    <p>6. Размер аргумента, равный нулю, не вызывает проблем с функциями ANSI С memXXX. В оригинале стандарта 1989 года Х3.159-1989 (ISO/IEC 9899:1990) ничего не говорилось по этому поводу (как и в документации), но в Technical Corrigendum Number 1 явно говорится, что указание размера 0 не вызовет проблем (но аргументы и указатели при этом должны быть правильными). Вообще, за информацией по языку С лучше всего обращаться по адресу http://www.lysator.liu.se/c/.</p>
    <p>7. Для двустороннего взаимодействия процессов требуется наличие двух очередей сообщений (см. например, листинг А.15). Если бы мы изменили листинг 4.4 для использования очередей сообщений Posix вместо каналов, мы бы увидели, что родительский процесс считывает то, что сам же и отправил.</p>
    <p>8. Взаимное исключение и условная переменная помещаются в отображаемый файл, совместно используемый всеми процессами, открывающими очередь. Очередь может быть открыта и другими процессами, поэтому при закрытии дескриптора очереди взаимное исключение и условная переменная не уничтожаются.</p>
    <p>9. Массиву нельзя присвоить значение другого массива с помощью знака равенства в языке С, а вот структуре можно.</p>
    <p>10. Функция main проводит большую часть времени заблокированной в вызове select, ожидая возможности чтения из конца канала. Каждый раз при получении сигнала возврат из обработчика прерывает вызов select, что приводит к возврату ошибки EINTR. Чтобы избежать этой проблемы, функция-обертка Select проверяет возврат данного кода ошибки и снова вызывает select, как показано в листинге Г.5. В книге [24, с. 124] вы можете найти более подробный рассказ о прерывании системных вызовов.</p>
    <subtitle>Листинг Г.5. Обертка Select, обрабатывающая возврат EINTR</subtitle>
    <p><code>//lib/wrapunix.c</code></p>
    <p><code>313 int</code></p>
    <p><code>314 Select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,</code></p>
    <p><code>315  struct timeval *timeout)</code></p>
    <p><code>316 {</code></p>
    <p><code>317  int n;</code></p>
    <p><code>318 again:</code></p>
    <p><code>319  if ( (n = select(nfds, readfds, writefds, exceptfds, timeout)) &lt; 0) {</code></p>
    <p><code>320   if (errno == EINTR)</code></p>
    <p><code>321    goto again;</code></p>
    <p><code>322  else</code></p>
    <p><code>323   err_sys("select error");</code></p>
    <p><code>324  } else if (n == 0 &amp;&amp; timeout == NULL)</code></p>
    <p><code>325   err_quit("select returned 0 with no timeout");</code></p>
    <p><code>326  return(n); /* возвращаем 0 по тайм-ауту */</code></p>
    <p><code>327 }</code></p>
   </section>
   <section>
    <title>
     <p>Глава 6</p>
    </title>
    <p>1. Оставшиеся программы должны принимать идентификатор очереди в числовом виде (вместо полного имени). Это изменение можно осуществить путем добавления нового аргумента командной строки или с помощью предположения, что полное имя, состоящее из одних цифр, является не именем файла, а идентификатором очереди. Поскольку большинство имен файлов, передаваемых ftok, являются абсолютными, они заведомо содержат по крайней мере один нецифровой символ (слэш), и это предположение является вполне корректным.</p>
    <p>2. Передача сообщений с типом 0 запрещена, а клиент никогда не может иметь идентификатор 1, поскольку этот идентификатор обычно принадлежит процессу init.</p>
    <p>3. При использовании единственной очереди на рис. 6.2 злоумышленник мог повлиять на все прочие процессы-клиенты. Если у каждого клиента есть своя очередь (рис. 6.3), злоумышленник портит только свою.</p>
   </section>
   <section>
    <title>
     <p>Глава 7</p>
    </title>
    <p>2. Вероятно, процесс завершит работу, прежде чем потребитель успеет сделать все, что нужно, поскольку вызов exit завершает все выполняющиеся потоки.</p>
    <p>3. В Solaris 2.6 удаление вызова функций типа destroy приводит к утечке памяти, из чего становится ясно, что функции init осуществляют динамическое выделение памяти. В Digital Unix 4.0B такого не наблюдается, что указывает на разницу в реализации. Тем не менее вызывать функции destroy все равно нужно. С точки зрения реализации в Digital Unix 4.0B используется переменная типа attr_t как объект, содержащий атрибуты, а в Solaris 2.6 эта переменная представляет собой указатель на динамически создаваемый объект.</p>
   </section>
   <section>
    <title>
     <p>Глава 9</p>
    </title>
    <p>1. В зависимости от системы может потребоваться увеличивать счетчик до значений, больших 20, чтобы наблюдать ошибку.</p>
    <p>2. Для отключения буферизации стандартного потока мы добавляем строку</p>
    <p><code>setvbuf(stdout, NULL, _IONBF, 0);</code></p>
    <p>к функции main перед циклом for. Это не должно ни на что влиять, поскольку вызов printf только один и строка завершается символом перевода. Обычно стандартный поток вывода буферизуется построчно, поэтому в любом случае один вызов printf превращается в один системный вызов write.</p>
    <p>3. Заменим printf на</p>
    <p><code>snprintf(line, sizeof(line), "%s: pid = 3.1d, seq# = %d\n", argv[0], (long) pid, seqno);</code></p>
    <p><code>for (ptr = line; (c = *ptr++) != 0) putchar(c);</code></p>
    <p>и объявим с как целое, a ptr — как char*. Если мы вызвали setvbuf для отключения буферизации стандартного потока вывода, библиотека будет делать системный вызов для вывода каждого символа. На это требуется больше времени, что дает ядру больше возможностей на переключение контекста между процессами. Такая программа должна давать больше ошибок.</p>
    <p>4. Поскольку несколько процессов могут заблокировать на чтение одну и ту же область файла, в нашем примере это эквивалентно полному отсутствию блокировок.</p>
    <p>5. Ничего не изменится, поскольку флаг отключения блокировки для дескриптора никак не влияет на работу рекомендательной блокировки fcntl. Блокирование процесса при вызове fcntl определяется типом команды: F_SETLKW (которая блокируется всегда) или F_SETLK (которая не блокируется никогда).</p>
    <p>6. Пpoгрaммa loopfcntlnonb работает как положено, поскольку, как мы показали в предыдущем примере, флаг отключения блокировки никак не влияет на блокировку fcntl. Однако этот флаг влияет на работу loopnonenonb, которая не пользуется блокировкой. Как говорилось в разделе 9.5, неблокируемый вызов write или read для файла с включенной обязательной блокировкой приводит к возврату ошибки EAGAIN. Мы увидим одно из следующих сообщений:</p>
    <p><code>read error: Resource temporarily unavailable</code></p>
    <p><code>write error: Resource temporarily unavailable</code></p>
    <p>и мы можем проверить, что это сообщение соответствует EAGAIN, выполнив</p>
    <p><code>solaris % <strong>grep Resource /usr/include/sys/errno.h</strong></code></p>
    <p><code>#define EAGAIN 11 /* Resource temporarily unavailable */</code></p>
    <p>7. В Solaris 2.6 обязательная блокировка увеличивает время работы на 16%, а время процессора — на 20%. Пользовательское время процессора остается прежним, поскольку проверка осуществляется в ядре, а не в процессе.</p>
    <p>8. Блокировки выдаются процессам, а не потокам.</p>
    <p>9. Если бы работала другая копия демона, а мы открыли бы файл с флагом O_TRUNC, это привело бы к удалению идентификатора процесса из файла. Мы не имеем права укорачивать файл, пока не убедимся, что данная копия является единственной.</p>
    <p>10. Лучше использовать SEEK_SET. Проблема с SEEK_CUR заключается в том, что этот вариант зависит от текущего положения в файле, устанавливаемого 1 seek. Однако если мы вызываем 1 seek, а потом fcntl, мы делаем одну операцию в два вызова и существует вероятность, что другой процесс в промежутке между вызовами изменит текущий сдвиг вызовом lseek. Вспомните, что все потоки используют общие дескрипторы. Аналогично, если указать SEEK_END, другой процесс может дописать данные к файлу, прежде чем мы получим блокировку, и тогда она уже не будет распространяться на весь файл.</p>
   </section>
   <section>
    <title>
     <p>Глава 10</p>
    </title>
    <p>1. Вот результат работы в Solaris 2.6:</p>
    <p><code>solaris % <strong>deadlock 100</strong></code></p>
    <p><code>prod: calling sem_wait(nempty) <emphasis>i=0 у производителя</emphasis></code></p>
    <p><code>prod: got sem_wait(nempty)</code></p>
    <p><code>prod: calling sem_wait(mutex)</code></p>
    <p><code>prod: got sem_wait(mutex), storing 0</code></p>
    <p><code>prod: calling sem_wait(nempty) <emphasis>i=1 у производителя</emphasis></code></p>
    <p><code>prod: got sem_wait(nempty)</code></p>
    <p><code>prod: calling sem_wait(mutex)</code></p>
    <p><code>prod: got sem_wait(mutex), storing 1</code></p>
    <p><code>prod: calling sem_wait(nempty) <emphasis>начало следующего цикла, но места больше нет,</emphasis></code></p>
    <p><code><emphasis>                               поэтому происходит переключение контекста</emphasis></code></p>
    <p><code>cons: calling sem_wait(mutex) <emphasis>i=0</emphasis></code></p>
    <p><code>cons: got sem_wait(mutex)</code></p>
    <p><code>cons: calling sem_wait(nstored)</code></p>
    <p><code>cons: got sem_wait(nstored)</code></p>
    <p><code>cons: fetched 0</code></p>
    <p><code>cons: calling sem_wait(mutex) <emphasis>i=1</emphasis></code></p>
    <p><code>cons: got sem_wait(mutex)</code></p>
    <p><code>cons: calling sem_wait(nstored)</code></p>
    <p><code>cons: got sem_wait(nstored)</code></p>
    <p><code>cons: fetched 1</code></p>
    <p><code>cons: calling sem_wait(mutex)</code></p>
    <p><code>cons: got sem_wait(mutex)</code></p>
    <p><code>cons: calling sem_wait(nstored) <emphasis>здесь блокируется потребитель. Навсегда.</emphasis></code></p>
    <p><code>prod: got sem_wait(nempty)</code></p>
    <p><code>prod: calling sem_wait(mutex)   <emphasis>а здесь блокируется производитель.</emphasis></code></p>
    <p>2. Это не вызывает проблем с учетом правил, которые были указаны при описании sem_open: если семафор уже существует, он не инициализируется. Поэтому только первая из четырех программ, вызывающих sem_open, инициализирует семафор.</p>
    <p>3. Это проблема. Семафор автоматически закрывается при завершении процесса, но значение его не изменяется. Это не дает другим пpoгрaммaм получить блокировку, и все зависает.</p>
    <p>4. Если мы не инициализируем дескрипторы значением –1, их значение оказывается неизвестным, поскольку malloc не инициализирует выделяемую память. Поэтому если один из вызовов open возвращает ошибку, вызовы close под меткой error могут закрыть какой-нибудь используемый процессом дескриптор. Инициализируя дескрипторы значением –1, мы можем быть уверены, что вызовы close не дадут результата (помимо возвращения игнорируемой ошибки), если дескриптор еще не был открыт.</p>
    <p>5. Существует вероятность, что close будет вызвана для нормального дескриптора и вернет ошибку, изменив значение errno. Поэтому нам нужно сохранить это значение в другой переменной, чтобы оно не изменилось из-за побочного эффекта.</p>
    <p>6. В этой функции ситуация гонок не возникает, поскольку mkfifo возвращает ошибку, если канал уже существует. Если два процесса вызывают эту функцию одновременно, канал FIFO создается только один раз. Второй вызов mkfifо приведет к возврату EEXIST.</p>
    <p>7. В пpoгрaммe из листинга 10.22 ситуация гонок, описанная в связи с листингом 10.28, не возникает, поскольку инициализация семафора осуществляется записью данных в канал. Если процесс, создавший канал, приостанавливается ядром после создания, но перед записью данных, второй процесс откроет этот канал и заблокируется в вызове sem_wait, поскольку только что созданный канал будет пуст (пока первый процесс не поместит в него данные).</p>
    <p>8. В листинге Г.6 приведена тестовая программа. Реализации Solaris 2.6 и Digital Unix 4.0B обнаруживают прерывание перехватываемым сигналом и возвращают ошибку EINTR.</p>
    <subtitle>Листинг Г.6. Возвращает ли sem_wait ошибку EINTR?</subtitle>
    <p><code>//pxsem/testeintr.c</code></p>
    <p><code>1  #include "unpipc.h"</code></p>
    <p><code>2  #define NAME "testeintr"</code></p>
    <p><code>3  static void sig_alrm(int);</code></p>
    <empty-line/>
    <p><code>4  int</code></p>
    <p><code>5  main(int argc, char **argv)</code></p>
    <p><code>6  {</code></p>
    <p><code>7   sem_t *sem1, sem2;</code></p>
    <p><code>8   /* именованный семафор */</code></p>
    <p><code>9   sem_unlink(Px_ipc_name(NAME));</code></p>
    <p><code>10  sem1 = Sem_open(Px_ipc_name(NAME), O_RDWR | O_CREAT | О_EXCL,</code></p>
    <p><code>11   FILE_MODE, 0);</code></p>
    <p><code>12  Signal(SIGALRM, sig_alrm);</code></p>
    <p><code>13  alarm(2);</code></p>
    <p><code>14  if (sem_wait(sem1) == 0)</code></p>
    <p><code>15   printf("sem_wait returned 0?\n");</code></p>
    <p><code>16  else</code></p>
    <p><code>17   err_ret("sem_wait error");</code></p>
    <p><code>18  Sem_close(sem1);</code></p>
    <p><code>19  /* размещаемый в памяти семафор */</code></p>
    <p><code>20  Sem_init(&amp;sem2, 1, 0);</code></p>
    <p><code>21  alarm(2);</code></p>
    <p><code>22  if (sem_wait(&amp;sem2) == 0)</code></p>
    <p><code>23   printf("sem_wait returned 0?\n");</code></p>
    <p><code>24  else</code></p>
    <p><code>25   err_ret("sem_wait error");</code></p>
    <p><code>26  Sem_destroy(&amp;sem2);</code></p>
    <p><code>27  exit(0);</code></p>
    <p><code>28 }</code></p>
    <empty-line/>
    <p><code>29 static void</code></p>
    <p><code>30 sig_alrm(int signo)</code></p>
    <p><code>31 {</code></p>
    <p><code>32  printf("SIGALRM caught\n");</code></p>
    <p><code>33  return;</code></p>
    <p><code>34 }</code></p>
    <p>Реализация с использованием FIFO возвращает EINTR, поскольку sem_wait блокируется в вызове read, который должен возвращать такую ошибку. Реализация с использованием отображения в память ошибки не возвращает, поскольку sem_wait блокируется в вызове pthread_cond_wait, а эта функция не возвращает такой ошибки. Реализация с использованием семафоров System V возвращает ошибку EINTR, поскольку sem_wait блокируется в вызове semop, которая возвращает эту ошибку.</p>
    <p>9. Реализация с использованием каналов (листинг 10.25) является защищенной, поскольку таковой является операция write. Реализация с отображением в память защищенной не является, поскольку функции pthread_XXX не являются защищенными и не могут вызываться из обработчика сигналов. Реализация с семафорами System V (листинг 10.41) также не является защищенной, поскольку semop не является защищенной функцией согласно Unix 98.</p>
   </section>
   <section>
    <title>
     <p>Глава 11</p>
    </title>
    <p>1. Нужно изменить только одну строку:</p>
    <p><code>&lt; semid = Semget(Ftok(argv[optind], 0), 0, 0);</code></p>
    <p><code>…</code></p>
    <p><code><emphasis>&gt;</emphasis> semid = atol(argv[optind]);</code></p>
    <p>2. Вызов ftok вернет ошибку, что приведет к завершению работы обертки Ftok. Функция my_lock могла бы вызывать ftok перед semget, проверять, не возвращается ли ошибка ENOENT, а затем создавать файл, если он не существует.</p>
   </section>
   <section>
    <title>
     <p>Глава 12</p>
    </title>
    <p>1. Размер файла увеличится еще на 4096 байт (до 36864), но обращение к новому концу файла (36863) может привести к отправке сигнала SIGSEGV, поскольку размер области отображения в памяти равен 32768 байт. Причина, по которой мы говорим «может», а не «должен», — в неопределенности размера страницы памяти.</p>
    <p>2. На рис. Г.1 показана схема с очередью сообщений System V, а на рис. Г.2 — с очередью сообщений Posix. Вызовы memcpy в отправителе происходят внутри функций mq_send (листинг 5.26), а в получателе — внутри mq_receive (листинг 5.28).</p>
    <image l:href="#Any2FbImgLoader263"/>
    <p>Рис. Г.1. Отправка сообщений в очередь System V</p>
    <empty-line/>
    <image l:href="#Any2FbImgLoader264"/>
    <p>Рис. Г.2. Отправка сообщений через очередь Posix, реализованную с mmap</p>
    <empty-line/>
    <p>3. Любой вызов read для /dev/zero возвращает запрошенное количество нулей. Данные, помещаемые в этот файл, попросту сбрасываются (аналогично /dev/null).</p>
    <p>4.  В результате в файле получится 4 байта — все нули (предполагается 32-разрядное целое).</p>
    <p>5. В листинге Г.7 приведен текст нашей программы.</p>
    <subtitle>Листинг Г.7. Использование select с очередями System V</subtitle>
    <p><code>//shm/svmsgread.c</code></p>
    <p><code>1  #include "unpipc.h"</code></p>
    <p><code>2  #define MAXMSG (8192 + sizeof(long))</code></p>
    <empty-line/>
    <p><code>3  int</code></p>
    <p><code>4  main(int argc, char **argv)</code></p>
    <p><code>5  {</code></p>
    <p><code>6   int pipe1[2], pipe2[2], mqid;</code></p>
    <p><code>7   char c;</code></p>
    <p><code>8   pid_t childpid;</code></p>
    <p><code>9   fd_set rset;</code></p>
    <p><code>10  ssize_t n, nread;</code></p>
    <p><code>11  struct msgbuf *buff;</code></p>
    <p><code>12  if (argc != 2)</code></p>
    <p><code>13   err_quit("usage: svmsgread &lt;pathname&gt;");</code></p>
    <p><code>14  Pipe(pipe1); /* двусторонняя связь */</code></p>
    <p><code>15  Pipe(pipe2);</code></p>
    <p><code>16  buff = My_shm(MAXMSG); /* неименованная разделяемая память */</code></p>
    <p><code>17  if ((childpid = Fork()) == 0) {</code></p>
    <p><code>18   Close(pipe1[1]); /* child */</code></p>
    <p><code>19   Close(pipe2[0]);</code></p>
    <p><code>20   mqid = Msgget(Ftok(argv[1], 0), MSG_R);</code></p>
    <p><code>21   for(;;) {</code></p>
    <p><code>22    /* блокируется в ожидании, извещает родительский процесс */</code></p>
    <p><code>23    nread = Msgrcv(mqid, buff, MAXMSG, 0, 0);</code></p>
    <p><code>24    Write(pipe2[1], &amp;nread, sizeof(ssize_t));</code></p>
    <p><code>25    /* ожидает разрешения родительского процесса */</code></p>
    <p><code>26    if ((n = Read(pipe1[0], &amp;c, 1)) != 1)</code></p>
    <p><code>27     err_quit("child: read on pipe returned %d", n);</code></p>
    <p><code>28   }</code></p>
    <p><code>29   exit(0);</code></p>
    <p><code>30  } /* $$.bp$$ */</code></p>
    <p><code>31  /* parent */</code></p>
    <p><code>32  Close(pipe1[0]);</code></p>
    <p><code>33  Close(pipe2[1]);</code></p>
    <p><code>34  FD_ZERO(&amp;rset);</code></p>
    <p><code>35  FD_SET(pipe2[0], &amp;rset);</code></p>
    <p><code>36  for(;;) {</code></p>
    <p><code>37   if ((n = select(pipe2[0] + 1, &amp;rset, NULL, NULL, NULL)) != 1)</code></p>
    <p><code>38    err_sys("select returned %d", n);</code></p>
    <p><code>39   if (FD_ISSET(pipe2[0], &amp;rset)) {</code></p>
    <p><code>40    n = Read(pipe2[0], &amp;nread, sizeof(ssize_t)); /* *INDENT-OFF* */</code></p>
    <p><code>41    if (n != sizeof(ssize_t))</code></p>
    <p><code>42     err_quit("parent: read on pipe returned %d", n); /* *INDENT-ON* */</code></p>
    <p><code>43    printf("read %d bytes, type = %ld\n", nread, buff-&gt;mtype);</code></p>
    <p><code>44    Write(pipe1[1], &amp;c, 1);</code></p>
    <p><code>45   } else</code></p>
    <p><code>47  }</code></p>
    <p><code>46  err_quit("pipe2[0] not ready");</code></p>
    <p><code>48  Kill(childpid, SIGTERM);</code></p>
    <p><code>49  exit(0);</code></p>
    <p><code>50 }</code></p>
   </section>
   <section>
    <title>
     <p>Глава 13</p>
    </title>
    <p>1. В листинге Г.8 приведен текст измененной версии листинга 12.6, а в листинге Г.9 — текст новой версии листинга 12.7. Обратите внимание, что в первой пpoгрaммe мы устанавливаем размер объекта вызовом ftruncate; lseek и write использовать для этого нельзя.</p>
    <subtitle>Листинг Г.8. Отображение с точным указанием размера файла</subtitle>
    <p><code>//pxshra/test1.c</code></p>
    <p><code>1  #include "unpipc.h"</code></p>
    <empty-line/>
    <p><code>2  int</code></p>
    <p><code>3  main(int argc, char **argv)</code></p>
    <p><code>4  {</code></p>
    <p><code>5   int fd, i;</code></p>
    <p><code>6   char *ptr;</code></p>
    <p><code>7   size_t shmsize, mmapsize, pagesize;</code></p>
    <p><code>8   if (argc != 4)</code></p>
    <p><code>9    err_quit("usage: test1 &lt;name&gt; &lt;shmsize&gt; &lt;mmapsize&gt;");</code></p>
    <p><code>10  shmsize = atoi(argv[2]);</code></p>
    <p><code>11  mmapsize = atoi(argv[3]);</code></p>
    <p><code>12  /* открываем shm: создание или урезание; установка размера */</code></p>
    <p><code>13  fd = Shm_open(Px_ipc_name(argv[1]), O_RDWR | O_CREAT | O_TRUNC,</code></p>
    <p><code>14   FILE_MODE);</code></p>
    <p><code>15  Ftruncate(fd, shmsize); /* $$.bp$S */</code></p>
    <p><code>16  ptr = Mmap(NULL, mmapsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</code></p>
    <p><code>17  Close(fd);</code></p>
    <p><code>18  pagesize = Sysconf(_SC_PAGESIZE);</code></p>
    <p><code>19  printf("PAGESIZE = %ld\n", (long) pagesize);</code></p>
    <p><code>20  for (i = 0; i &lt; max(shmsize, mmapsize); i += pagesize) {</code></p>
    <p><code>21   printf("ptr[%d] = %d\n", i, ptr[i]);</code></p>
    <p><code>22   ptr[i] = 1;</code></p>
    <p><code>23   printf("ptr[%d] = %d\n", i + pagesize – 1, ptr[i + pagesize – 1]);</code></p>
    <p><code>24   ptr[i + pagesize – 1] = 1;</code></p>
    <p><code>25  }</code></p>
    <p><code>26  printf("ptr[%d] =%d\n", i, ptr[i]);</code></p>
    <p><code>27  exit(0);</code></p>
    <p><code>28 }</code></p>
    <subtitle>Листинг Г.9. Отображение в память с возможностью роста файла</subtitle>
    <p><code>//pxshm/test2.c</code></p>
    <p><code>1  #include "unpipc.h"</code></p>
    <p><code>2  #define FILE "test.data"</code></p>
    <p><code>3  #define SIZE 32768</code></p>
    <empty-line/>
    <p><code>4  int</code></p>
    <p><code>5  main(int argc, char **argv)</code></p>
    <p><code>6  {</code></p>
    <p><code>7   int fd, i;</code></p>
    <p><code>8   char *ptr;</code></p>
    <p><code>9   /* создаем или урезаем, отображаем */</code></p>
    <p><code>10  fd = Shm_open(Px_ipc_name(FILE), O_RDWR | O_CREAT | O_TRUNC, FILE_MODE);</code></p>
    <p><code>11  ptr = Mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);</code></p>
    <p><code>12  for (i = 4096; i &lt;= SIZE; i += 4096) {</code></p>
    <p><code>13   printf("setting shm size to %d\n", i);</code></p>
    <p><code>14   Ftruncate(fd, i);</code></p>
    <p><code>15   printf("ptr[%d] = %d\n", i-1, ptr[i-1]);</code></p>
    <p><code>16  }</code></p>
    <p><code>17  exit(0);</code></p>
    <p><code>18 }</code></p>
    <p>2. Одна из возможных проблем при использовании *ptr++ заключается в том, что указатель, возвращенный mmap, изменяется, что может помешать впоследствии вызвать munmap. Если этот указатель еще понадобится, лучше его сохранить или вовсе не изменять.</p>
   </section>
   <section>
    <title>
     <p>Глава 14</p>
    </title>
    <p>1. Нужно изменить только одну строку:</p>
    <p><code>13с13</code></p>
    <p><code>&lt; id = Shmget(Ftok(argv[1], 0), 0, SVSHM_MORE);</code></p>
    <p><code>…</code></p>
    <p><code>&gt; id = atol(argv[1]);</code></p>
   </section>
   <section>
    <title>
     <p>Глава 15</p>
    </title>
    <p>1. Аргументы будут иметь размер data_size + (desc_numxsizeof(door_desc_t)) байт.</p>
    <p>2. Вызывать fstat не нужно. Если дескриптор не указывает на дверь, вызов door_infо возвращает ошибку EBADF:</p>
    <p><code>solaris % <strong>doorinfo /etc/passwd</strong></code></p>
    <p><code>door_info error: Bad file number</code></p>
    <p>3. Документация содержит неверные сведения. Стандарт Posix утверждает, что функция sleep приведет к приостановке вызвавшего <emphasis>потока.</emphasis></p>
    <p>4. Результат непредсказуем (хотя, скорее всего, будет выполнен дамп памяти), поскольку адрес процедуры сервера, связанной с дверью, в новом процессе будет указывать на совершенно случайную область памяти.</p>
    <p>5. При завершении door_call из-за перехвата сигнала сервер следует уведомить об этом, поскольку поток, работающий с этим клиентом, получит запрос на отмену выполнения. В связи с листингом 15.18 мы говорили, что отмена для создаваемых библиотекой потоков по умолчанию отключена, следовательно, поток завершен не будет. Вместо этого происходит досрочный возврат из вызова sleep(6) в процедуре сервера, но она продолжает выполняться.</p>
    <p>6. Вот что мы увидим:</p>
    <p><code>solaris % <strong>server6 /tmp/door6</strong></code></p>
    <p><code>my_thread: created sever thread 4</code></p>
    <p><code>door_bind error: Bad file number</code></p>
    <p>Запустив сервер 20 раз подряд, мы получим 5 сообщений об ошибке. Предсказать такую ошибку заранее нельзя.</p>
    <p>7. Нет. Все, что нужно, — включать возможность отмены каждый раз при вызове процедуры сервера, как мы делали в листинге 15.26. Хотя в этом случае и приходится вызывать pthread_setcancelstate каждый раз при запуске процедуры сервера, накладные расходы, скорее всего, будут невелики.</p>
    <p>8. Чтобы проверить это, изменим код одного из серверов (скажем, из листинга 15.6) так, чтобы он вызывал door_revoke из процедуры сервера. Поскольку аргументом door_revoke является дескриптор двери, его придется сделать глобальным. Вот что получится при запуске клиента (из листинга 15.1) два раза подряд:</p>
    <p><code>solaris % <strong>client8 /tmp/door8 88</strong></code></p>
    <p><code>result: 7744</code></p>
    <p><code>solaris % <strong>client8 /tmp/door8 99</strong></code></p>
    <p><code>door_call error: Bad file number</code></p>
    <p>Первый вызов завершается успешно, что подтверждает наше предположение насчет door_revoke. Второй вызов возвращает ошибку EBADF.</p>
    <p>9. Чтобы не делать дескриптор fd глобальным, мы воспользуемся указателем cookiе, который можем передать door_create и который затем будет передаваться процедуре сервера при каждом вызове. В листинге Г.10 приведен текст сервера.</p>
    <subtitle>Листинг Г.10. Использование указателя cookie для избавления от глобальных переменных</subtitle>
    <p><code>//doors/server9.c</code></p>
    <p><code>1  #include "unpipc.h"</code></p>
    <empty-line/>
    <p><code>2  void</code></p>
    <p><code>3  servproc(void *cookie, char *dataptr, size_t datasize,</code></p>
    <p><code>4   door_desc_t *descptr, size_t ndesc)</code></p>
    <p><code>5  {</code></p>
    <p><code>6   long arg, result;</code></p>
    <p><code>7   Door_revoke(*((int *) cookie));</code></p>
    <p><code>8   arg = *((long *) dataptr);</code></p>
    <p><code>9   printf("thread id %ld, arg = %ld\n", pr_thread_id(NULL), arg);</code></p>
    <p><code>10  result = arg * arg;</code></p>
    <p><code>11  Door_return((char *) &amp;result, sizeof(result), NULL, 0);</code></p>
    <p><code>12 }</code></p>
    <empty-line/>
    <p><code>13 int</code></p>
    <p><code>14 main(int argc, char **argv)</code></p>
    <p><code>15 {</code></p>
    <p><code>16  int fd;</code></p>
    <p><code>17  if (argc != 2)</code></p>
    <p><code>18   err_quit("usage: server9 &lt;server-pathname&gt;");</code></p>
    <p><code>19  fd = Door_create(servproc, &amp;fd, 0);</code></p>
    <p><code>20  unlink(argv[1]);</code></p>
    <p><code>21  Close(Open(argv[1], O_CREAT | O_RDWR, FILE MODE));</code></p>
    <p><code>22  Fattach(fd, argv[1]);</code></p>
    <p><code>23  for(;;)</code></p>
    <p><code>24   pause();</code></p>
    <p><code>25 }</code></p>
    <p>Мы легко могли бы изменить листинги 5.17 и 5.18, поскольку указатель cookie доступен функции my_thread (через структуру door_info_t), которая передает указатель на эту структуру создаваемому потоку (которому нужно знать дескриптор для вызова door_bind).</p>
    <p>10. В этом примере атрибуты потока не меняются, поэтому их достаточно инициализировать лишь единожды (в функции main).</p>
   </section>
   <section>
    <title>
     <p>Глава 16</p>
    </title>
    <p>1. Программа отображения портов (port mapper) не проверяет серверы на работоспособность во время регистрации. После завершения сервера отображения остаются в силе, в чем мы можем убедиться с помощью пpoгрaммы rpcinfо. Поэтому клиент, связывающийся с программой отображения портов, получит информацию, которая была актуальной до завершения сервера. Когда клиент попытается связаться с сервером по TCP, библиотека RPC получит RST в ответ на пакет SYN (предполагается, что другие процессы не успели подключиться к порту завершенного сервера), что приведет к возврату ошибки функцией clnt_create. Вызов по протоколу UDP будет успешен (поскольку устанавливать соединение не нужно), но при отправке дейтаграмм через устаревший порт ответ получен не будет и функция клиента выйдет по тайм-ауту.</p>
    <p>2. Библиотека RPC возвращает первый ответ сервера клиенту сразу по получении, то есть через 20 секунд после вызова клиента. Следующий ответ будет храниться в сетевом буфере для данной конечной точки до тех пор, пока эта точка не будет закрыта или не будет выполнена операция чтения из нее библиотекой RPC. Предположим, что клиент отправит второй вызов серверу сразу после получения первого ответа. Если потерь в сети не произойдет, следующей прибывшей дeйтaгрaммoй будет ответ сервера на повторно переданную клиентом дейтаграмму. Но библиотека RPC проигнорирует этот ответ, поскольку XID будет совпадать с первым вызовом процедуры, который не может быть равным XID для второго вызова.</p>
    <p>3. Соответствующая структура в С — это char c[10], но она будет закодирована XDR как десять 4-байтовых целых. Если вы хотите использовать строку фиксированной длины, используйте скрытый тип данных фиксированной длины.</p>
    <p>4. Вызов xdr_data возвращает FALSE, поскольку вызов xdr_string (прочитайте содержимое файла data_xdr.c) возвращает FALSE.</p>
    <p>Максимальная длина строки указывается в качестве последнего аргумента xdr_string. Если максимальная длина не указана, этот аргумент принимает значение 0 в дополнительном коде (2&#179;&#178;–1 для 32-разрядного целого).</p>
    <p>5. Пoдпpoгрaммы XDR проверяют наличие достаточного объема свободной памяти в буфере для кодирования данных и возвращают ошибку FALSE при переполнении буфера. К сожалению, отличить одну ошибку от другой для подпpoгрaмм XDR невозможно.</p>
    <p>6. В принципе, можно сказать, что использование последовательных номеров в TCP для обнаружения повторов эквивалентно кэшу повторных запросов, поскольку эти последовательные номера позволяют обнаружить любой устаревший сегмент. Для конкретного соединения (IP-адреса и порта клиента) размер этого кэша соответствует половине 32-разрядного последовательного номера TCP, то есть 2&#179;&#185; или 2 Гбайт.</p>
    <p>7. Поскольку все пять значений для конкретного запроса должны в точности равняться пяти значениям в кэше, первое сравнение должно выполняться для того поля, которое может отличаться с наибольшей вероятностью. Реальный порядок сравнений в пакете TI-RPC таков: (1) XID, (2) номер процедуры, (3) номер версии, (4) номер программы, (5) адрес клиента. Разумно сравнивать XID в первую очередь, поскольку именно это значение меняется от запроса к запросу.</p>
    <p>8. На рис. 16.5 имеется двенадцать 4-байтовых полей, начиная с поля флага и длины и включая 4 байта на аргумент типа long. Получается 48 байт. При использовании нулевой аутентификации данные о пользователе и проверочные данные будут отсутствовать. При этом они займут по 8 байтов: 4 байта на тип аутентификации (AUTH_NONE) и 4 байта на длину аутентификационных данных (0).</p>
    <p>В переданном ответе (взгляните на рис. 16.7, но помните, что используется протокол TCP, поэтому 4 байта флага и длины будут идти перед XID) будет восемь 4-байтовых полей, начиная с поля флага и длины и заканчивая результатом типа long. Вместе они дают 32 байта.</p>
    <p>При использовании UDP единственное отличие будет заключаться в отсутствии поля флага и длины (4 байта). При этом размер запроса будет 44 байта, а ответа — 28 байтов, что можно проверить с помощью tcpdump.</p>
    <p>9. Да. Отличие в обработке аргументов у клиента и сервера не зависит от пакетов, передаваемых по сети. Функция main клиента вызывает функцию заглушки для отправки пакета, а функция main сервера вызывает функцию заглушки сервера для обработки этого пакета. Передаваемая по сети запись RPC определяется протоколом RPC, и ее содержимое остается неизменным вне зависимости от того, поддерживается ли многопоточность.</p>
    <p>10. Библиотека XDR выделяет место под эти строки (динамически). Мы можем проверить это, добавив следующую строку к пpoгрaммe read:</p>
    <p><code>printf(sbrk()= %p, buff = %p, in.vstring_arg = %p\n", sbrk(NULL), buff, in.vstring_arg);</code></p>
    <p>Функция sbrk возвращает текущий адрес вершины сегмента данных программы, а функция malloc обычно выделяет память непосредственно под этим адресом. Запустив программу, получим:</p>
    <p><code>sbrk() = 29638, buff = 25е48, in.vstring_arg = 27e58</code></p>
    <p>Это показывает, что указатель vstring_arg указывает на область, выделенную mallос. Буфер buff размером 8192 байта занимает адреса с 0х25е48 по 0х27е47, а строка помещается непосредственно под ним.</p>
    <p>11. В листинге Г.11 приведен текст программы-клиента. Обратите внимание, что последним аргументом clnt_call является сама структура timeval, а не указатель на нее. Также отметьте, что третий и пятый аргументы clnt_call должныбыть ненулевыми указателями на подпрограммы XDR, поэтому мы указываем в этих аргументах xdr_void (функция, которая ничего не делает). Вы можете проверить, что именно так нужно вызывать функцию без аргументов и возвращаемых значений, написав тривиальный файл спецификации RPC, определяющий такую функцию, запустив rpcgen и посмотрев на содержимое созданной заглушки клиента.</p>
    <subtitle>Листинг Г.11. Клиент, вызывающий нулевую процедуру сервера</subtitle>
    <p><code>//sunrpc/square10/client.c</code></p>
    <p><code>1  #include "unpipc.h" /* our header */</code></p>
    <p><code>2  #include "square.h" /* generated by rpcgen */</code></p>
    <empty-line/>
    <p><code>3  int</code></p>
    <p><code>4  main(int argc, char **argv)</code></p>
    <p><code>5  {</code></p>
    <p><code>6   CLIENT *cl;</code></p>
    <p><code>7   struct timeval tv;</code></p>
    <p><code>8   if (argc != 3)</code></p>
    <p><code>9    err_quit("usage: client &lt;hostname&gt; &lt;protocol&gt;");</code></p>
    <p><code>10  cl = Clnt_create(argv[1], SQUARE_PROG, SQUARE_VERS, argv[2]);</code></p>
    <p><code>11  tv.tv_sec = 10;</code></p>
    <p><code>12  tv.tv_usec = 0;</code></p>
    <p><code>13  if (clnt_call(cl, NULLPROC, xdr_void, NULL,</code></p>
    <p><code>14   xdr_void, NULL, tv) != RPC_SUCCESS)</code></p>
    <p><code>15  err_quit("%s", clnt_sperror(cl, argv[1]));</code></p>
    <p><code>16  exit(0);</code></p>
    <p><code>17 }</code></p>
    <p>12. Получающийся размер дейтаграммы UDP (65536+20+дополнительные расходы RPC) превосходит 65535 — максимальный размер дейтаграммы в IPv4. В табл. А.2 отсутствуют значения для Sun RPC с использованием UDP для сообщений размером 16384 и 32768, поскольку старая реализация RPCSRC 4.0 ограничивала размер дейтаграммы UDP некоторым значением около 9000 байт.</p>
   </section>
  </section>
  <section>
   <title>
    <p>Литература</p>
   </title>
   <p>Для книг, статей и других источников, имеющих электронные версии, указаны адреса сайтов. Они могут меняться, поэтому следите за списком обновлений на сайте автора книги http://www.kohala.com/~rstevens.</p>
   <p>1. <emphasis>Bach M.J.</emphasis> The Design of the UNIX Operating System //Prentice Hall, Englewood Cliffs, N.J., 1986.</p>
   <p>2. <emphasis>Birrell A. D., Nelson B.J.</emphasis> Implementing Remote Procedure Calls //ACM Transactions on Computer Systems, vol. 2, no. 1, pp. 39-59 (Feb.), 1984.</p>
   <p>3. <emphasis>Butenhorf D. R.</emphasis> Programming with POSIX Threads //Addison-Wesley, Reading, Mass, 1997.</p>
   <p>4. <emphasis>Corbin J. R.</emphasis> The Art of Distributed Applications: Programming Techniques for Remote Procedure Calls //Springer-Verlag, New-York, 1991.</p>
   <p>5. <emphasis>Garfinkel S. L, Spafford E. H.</emphasis> Practical UNIX and Internet Security, Second Edition //O'Reilly &amp; Associates, Sebastopol, Calif, 1996.</p>
   <p>6. <emphasis>GoodheartВ.,Cox J.</emphasis> The Magi Garden Explained: The Internals of UNIX System V Release 4, An Open Systems Design //Prentice Hall, Englewood Cliffs, N.J., 1994.</p>
   <p>7. <emphasis>Hamilton. G., Kougiouris P.</emphasis> The Spring Nucleus: A Mikrokernel for Objects // Proceedings of the 1993 Summer USENIX Conference, pp. 147-159, Cincinnati Oh, 1993.</p>
   <p>http://www.kohala.com/~rstevens/papers.others/springnucleus.1993.ps</p>
   <p>8. IEEE 1996. Information Technology — Portable Operating System Interface (POSIX) – Part 1: System Application Program Interface (API) //IEEE Std 1003.1, 1996 Edition, Insitute of Electrical and Electonics Enibeers, Piscataway, N.J. (July).</p>
   <p>Данная версия Posix.1 (называемая также ISO/IEC 9945-1: 1996) содержит базовый интерфейс API (1990), расширения реального времени 1003.1b (1993), программные потоки Pthreads 1003.1с (1995) и технические поправки 1003.1i (1995). Чтобы сделать заказ, обратитесь на сайт http://www.ieee.org. К сожалению, стандарты IEEE не распространяются свободно через Интернет.</p>
   <p>9. <emphasis>Josey A.</emphasis> Go Solo 2: The Authorized Guide to Version 2 of the Single UNIX Specification //Prentice Hall, Upper Saddle River, N. J., ed. 1997.</p>
   <p>По адресу http://www.UNIX-systems.org/online.html можно найти множество спецификаций Unix (например, все технические руководства).</p>
   <p>10. <emphasis>Kernighan В.W., Pike R.</emphasis> The UNIX Programming Environment //Prentice Hall, Englewood Cliffs, N. J., 1984.11.       </p>
   <p>11. <emphasis>KernighanВ.W., Ritchie D. M.</emphasis> The С Programming Language, Second Edition // Prentice Hall, Englewood Cliffs, N.J., 1988.</p>
   <p>12. <emphasis>Kleiman S., Shah D., Smaalders B.</emphasis> Programming with Threads //Prentice Hall, Upper Saddle River, N. J., 1996.</p>
   <p>13. <emphasis>LewisВ., Berg D.J.</emphasis> Multithreaded Programming with Pthreads //Prentice Hall, Upper Saddle River, N. J., 1998.</p>
   <p>14. <emphasis>McKusick M. K., Bostic K., Karels M.J., Quaterman J. S.</emphasis> The Design and Implementation of the 4.4BSD Operating System //Addison-Wesley, Reading, Mass, 1996.</p>
   <p>15. <emphasis>McVoy L, Staelin С.</emphasis> lmbench: Portable Tools for Performance Analysis //Proceedings of the 1996 Winter Technical Conference, pp. 279-294, San Diego, Calif, 1996.</p>
   <p>Комплект средств для тестирования можно загрузить с сайта http:// www.bitmover.com/lmbench вместе с книгой.</p>
   <p>16. <emphasis>Rochkind M.J.</emphasis> Advanced UNIX Programming //Prentice Hall, Englewood Cliffs, N.J., 1985.</p>
   <p>17. <emphasis>Salus P. H.</emphasis> A Quarter Century of Unix //Addison-Wesley, Reading, Mass, 1994.</p>
   <p>18. <emphasis>Srinivasan R.</emphasis> RPC: Remote Procedure Call Protocol Specification Version 2 // RFC 1831, 18 pages (Aug.), 1995.</p>
   <p>19. <emphasis>Srinivasan R.</emphasis> XDR: External Data Representation Standard //RFC 1832, 24 pages (Aug.), 1995.</p>
   <p>20. <emphasis>Srinivasan R.</emphasis> Binding Protocols foe ONC RPC Version 2 //RFC 1833, 14 pages (Aug.), 1995.</p>
   <p>21. <emphasis>Stevens W. R.</emphasis> Advanced Programming in the UNIX Environment //Addison-Wesley, Reading, Mass, 1992.</p>
   <p>22. <emphasis>Stevens W. R.</emphasis> TCP/IP Illustrated, Volume 1: The Protocols //Addison-Wesley, Reading, Mass, 1994.</p>
   <p>23. <emphasis>Stevens W. R.</emphasis> TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols //Addison-Wesley, Reading, Mass, 1996.</p>
   <p>24. <emphasis>Stevens W. R.</emphasis> UNIX Network Programming, Volume 1, Second Edition, Networking APIs: Sockets and XTI //Prentice Hall, Upper Saddle River, N.J., 1998.</p>
   <p>25. <emphasis>Vahalia U.</emphasis> UNIX Internals: The New Frontiers //Prentice Hall, Upper Saddle River, N.J., 1996.</p>
   <p>26. <emphasis>White J. E.</emphasis> A High-Level Framework for Network-Based Resource Sharing // RFC 707, 27 pages (Dec), 1975.</p>
   <p>http://www.kohala.com/~rstevens/papers.others/rfc707.txt</p>
   <p>27. <emphasis>Wright G. R., Stevens W. R.</emphasis> TCP/IP Illustrated, Volume 2: The Implementation // Addison-Wesley, Reading, Mass, 1995.</p>
  </section>
 </body>
 <body name="notes">
  <title>
   <p>Примечания</p>
  </title>
  <section id="n_1">
   <title>
    <p>1</p>
   </title>
   <p>Все исходные тексты, опубликованные в этой книге, вы можете найти по адресу http://www.piter.com/download.</p>
  </section>
  <section id="n_2">
   <title>
    <p>2</p>
   </title>
   <p>Проблема о порядке байтов в слове сродни проблеме лилипутов из «Путешествий Гулливера» Д. Свифта, которые никак не могли договориться, с какого конца начинать есть яйцо. Именно оттуда англоязычные программисты взяли термины little-endian (остроконечник) и big-endian (тупоконечник), подразумевая «little-end-first» и «big-end-first» (младший или старший байт идет первым). — <emphasis>Примеч. перев.</emphasis></p>
  </section>
 </body>
 <binary id="Any2FbImgLoader0.jpg" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8l
JCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIo
Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAAR
CAJPAaQDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDBnBg1K6TABWVh+tRjc+9nPUVa1gxv4h1B
oWDxmdypHfmq83yxcd68qekgHW6rHFkLj1prEHgZJp8Z2wg45PFNxg5qOoERBpUBYg9qc4yM
UDBAxQA8tjgHmhSQwIOCORimHrT40JOT0pbAXFv77vfXP/f5v8ac2pXxO0XtyP8Ats3+NVGO
elPUEDcR9Km7AfNqd9vAW+ueP+mzf40n9pX54+3XJ/7bN/jVZxluKcowM96pXsBaXUr3gfbb
n/v83+NP+3323/j+ucn/AKbN/jVMc5qZBuUe1S2wHjUr7JH265/7/N/jS/2jfEH/AE65/wC/
zf41WcbWyo60D34p3YFoahfYH+nXP/f5v8aRtQvsY+3XP/f5v8agXoaABnJouwLS6jeoMm9u
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
kfSgALc0U3BPOaKAP//Z</binary>
 <binary id="Any2FbImgLoader9" content-type="image/jpeg">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
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRX/2Q==</binary>
 <binary id="Any2FbImgLoader11" content-type="image/jpeg">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
2Q==</binary>
 <binary id="Any2FbImgLoader40" content-type="image/jpeg">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
a4X8T3VvceIGvrWPT4fLmmxGJH8x1LBT34AyOtT6HBqkfja6t11S8vLa0jP26S4k+R5ZPmRY
0H3dq9T71oePgp8OIHXcpvrXIIyD++St3+zrL/nzg/79L/hUVxpFnJDIIbW2imZCqS+QpKkj
g+9cz4c+FfhnQCk7Wx1C8HJnuhuwfUL0FdmqhVAAwB2FLXB/ErxNrPh82CaZJHbxzrK0lw4X
AZQCqZbjnJ9zjisq11vxdrLrN/ax05Jb+3tPIhtFYxh4g7NlhnvxmqsnibxfYaalyL+a+e5F
0hV7NV+ziKQKJAFGSduTg8Vbg1jxjqdvcr4fvLnU7aCcpBf+VDEZQUU/MHAyFbcMqBWRqbLH
4pmOvnShd+TbeY2o2r3Em7bzsWP5cZ6/nTtKfS7fxdqUt82mxONVkkU3OlyyzlCRgpIOAPTj
in20Bha9mvNPvU0u4sro+Ho2JPkZBLjaBlWYcrnoMiq919jg1uOZraS61BmtNlnPbOs5wqAN
bzrwF7kN6HPWux0Hw9pVr8RdZkh0q3h+zw27wMkeNrMG3EehPfFdzRRRSE4FLRRRRRRRRRSH
igHIyKWiiikoyMZooyPWjI9aMj1oyPWiuZ+Hf/ImW3/Xe4/9HvVnwwCr6yCzMf7Um5b3C9P5
Vq32n2Wp2xtr+1huYW5McyBlP4Gs6fw4qwwwaVqFxo9vCCBBYpEqHJznDIealTw9p8iQNqMM
ep3MHC3V3DG0nXI5CjpV1rC0dJ0a2iZLn/XKUGJOMfN68cc1SfwvoEkplk0WweQ9Xa3Qn88V
cOn2ZSBDbRFLZg0K7BiIgYBX049KcLO1W0NmtvGLcqVMQUbSD1GPfNMttMsbKQyWtrFC7IsZ
aNACVUYVfoO1Un8M6Uk095ZWNtZ6hKrAXkUCeYjH+IZHWqUHhe8uC0Wva22tWTDm1uLOJF3A
ghsqM8Yq7Y+FNA0y6W6stJtYJ0ztkSMZXPXHpS3fhbQb61a1utItJIWlaUqYgPnb7zcdCe/r
RdeFfD97JFJdaNZTPCgSNngUlFHQDjoKvw2lvbzSzRQokkxBkdVAL4GBk9+KxPG6LLocMbHC
tf2uT6fvkroqKTrS0Ux40kGHVWGc4YZpRGozgDnnpRtHpShQvQYHoKTYu7dtGfXHNLj3pNvv
RtGc+lLgUtFFFFFFFFFFFFFFFFFFFFcF488V3+ialDawapb6XGbKW4WWa280XEikARD09fWu
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</binary>
 <binary id="Any2FbImgLoader48" content-type="image/jpeg">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
tFFFFFFFf//Z</binary>
 <binary id="Any2FbImgLoader50" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader58" content-type="image/jpeg">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
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFf/9k=</binary>
 <binary id="Any2FbImgLoader60" content-type="image/jpeg">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
mRrmcKf4mQBQD6HNepgEDk0tFFFFFFFFFFFf/9k=</binary>
 <binary id="Any2FbImgLoader61" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader62" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader64" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader65" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader67" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader72" content-type="image/jpeg">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
PUA9Rmla1ga5W5aGMzopVZCo3KD1APUCv//Z</binary>
 <binary id="Any2FbImgLoader74" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader75" content-type="image/jpeg">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
zMTksSepJNXqKKKK/9k=</binary>
 <binary id="Any2FbImgLoader81" content-type="image/jpeg">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
/9k=</binary>
 <binary id="Any2FbImgLoader85" content-type="image/jpeg">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
9KtqqooVVCgDAAGAKdRX/9k=</binary>
 <binary id="Any2FbImgLoader91" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader96" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader113" content-type="image/jpeg">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
03EmtaloooooooppJ3ClpaKKKKKKKKKKK//Z</binary>
 <binary id="Any2FbImgLoader123" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader129" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader131" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader137" content-type="image/jpeg">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
tk1//9k=</binary>
 <binary id="Any2FbImgLoader147" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8l
JCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/wAALCAF1AeMBAREA/8QAHwAA
AQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR
BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RF
RkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip
qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEB
AAA/APZqKKKKK5vxhrmo6ONMg0uK1e51K8W1U3JbamQTn5eT0rn38eaxBqYikh0prFdSOnvI
kj7tyxh2Ydto6VkWnxX1lrC/uJLOykeJ4DAUVwu2VivTOWxjg8Z9Ku2XxTvZo4Wm0kTM0l1H
IlqrM48pQytsPIBzznoBWhZfE22juY01i3NvDJZWk4lgRnVWmHIY9hnAFcr4h8e6ldWcIlt3
aZormSIWcjx8xylfnweU2KSR6jgjNdjrPijWYtC8NTaaLOO81uSJGM6M0aFo93ABz1rEi+KG
rHS4JhY2DTQ6eb68MspiDqJGTbEOcn5e9WLv4geI9P8A7UmuNN0xoNPggmISWQMwm4jGSMcZ
+b6cVWv/AImaxpNpMktvYX9xbXfkSTWhYwuGiLgjnI2kfN7CvSNLmkuNLtppZYZZJIlZ5IP9
WxIBJXPb0q3RRRRRRRRRRRSHpXnureMtfsvFktpD9gOmwala2TI8bec3mrnIOccYPas+18f+
JdSIazOjobu2nuYYiHd7YQnlZQD95h9MUx/iD4ng021muP7Gill046oWlDosseQBEoz9/qc/
StnQfHV/rPjE6LJbQ2sQHm7pFIZ18pG8tf8AbBYk+wqeSXV4vixaQT6kWsJrGaSO0jG1VClR
lufmbJPPau2ooooooooooooooooopK84/wCE18QJrLbvsMlh/a8+niBIW84iNCwO7djJwB0r
LsPHHirULK5ng1XTZfK0t9Rk8u13fZmU/wCof5upweevFT6n418S6TMsU2o6d5kNlFdhZrcq
1+ZD/q4wDxj7vf1rW8MeMtV1jxpd6ReGG3t7eS4EQ8v5rjawAUHPBUHJ9c1RsdQtpviw1pZa
3O7wySm7W4uTtmJX5YIo+mExktj1r0ylooooooqvc2NpePC9zbxytbv5kRdQTG/94eh96rRe
H9HhQJHplqqrM04AiHEhGC/1I71UXwX4YS3lt10KxWKbHmKIAA2DkZ+hqxbeGtFsxGLbS7WE
RbwgjiA27xhsfUdaifwj4ekuIbh9HtGlgREjZowdir90D6dqsroOkICF021GUeM4iHKucuv0
J5I71PJp1nKIBJbRMLYhocoD5ZAwCvpxxVGfwn4euktkn0aykW0z5CmEYjycnH481Yl0TTJ2
ummsoJDeRrHcbkB81RwAfUDNMt/DujWttFawaXaxwwktHGsQAUkEE/UgkGrttbQ2dulvbRJF
DGoVI0GFUDoAPSpaKKKKKKKKKKKSqcmkafLK0r2UDSNKszMYwSXX7rZ9R2NNi0TS4JriaHT7
aOW6GJ3SFQZR6Mcc0yfw9o9zFbRXGl2ksdpj7Orwqwix/dB6dBUo0fThdC6FlB54kMgl8sbg
5XaWz64AH0FStY2r3iXrW8ZuY0KJMVG5VPUA+lWKKKKKKKKKKKKKKKKKKSq40+0DBhbQhlkM
oPljIc9W+p9aWOwtIhIsdtCgl/1gWMAP9fWiSxtZnjeS3idouY2aMEp9PSlFnbLKJRBEJFJI
cIMgnqc+/eo00vT4rj7THY2yTkkmVYlD5PXnGat0UUUUUUUUlLRRRRRRRRRRRRRRRRRRRRRS
UtFFFFFFFFFFFFFFFFFFFFFFFFFFFFFcveeNBbavPZx6bLLa2k8UF1eeYqrG8mNuFPLYJGfS
t251bTbKXyrvULW3kxnZLMqnHrgmol17RnOF1axY+guUP9aems6VJjZqdm2TgbZ1OT+dXAc0
tMmk8qF5DyEUt+VcPN481K5tbUWuivbXF21vJAJpFYSQvIEJ4+63I4P94GmWnxEurPSftGra
RO5KzPDLCyYuAkoTAXqD8w69cVZHxJtYtdj0e8097e5MiRSKJldo5GXcBtHJHIBbpk0y1+Jl
vdXFxaR6XK92jRrDDHOj+aXYqAWBwhGCSD0ra8I6nfatp11PqMXkzpezReVkHywrYC5HXHrV
C68a3dvFqF3HoE81hZPLF9oE6De6cEbeoBPANQRfEeAa3DpF3pr2900qQzKJ0cxyMMgADlhj
GSOBmq9x8R5ZobiPT9M/0uCSA+W86MDG8ojOdp+Vueh6ZFaGiePbfW9c/s6KykRHMoim3bg2
w4O4AfLnnHPOK6OLUbGYyiK8t5DDnzQkqny8f3uePxpBqmntaG8W/tjbA4MwlXYD6bs4pX1K
wjiilkvbdI5v9W7SqA/0Oeac97ax3KWz3MKzuMrEZAGYew6mhL60lne3juoXmjGXjWQFl+o6
ioJ9VthptxeWtzbTrAjMSJhsyBnBYdK5nw58VPDPiEJEbsWF23BguiF59m6GtjxJrN/pa2Ee
mWcF1PfXHkqZpSiL8jPngEn7prn7f4gahcWkd+NMgFnALZb0+ad6vMQP3Yx8wGQecZzSv4+1
O3MU0+k25tZY5pgY7gl0jilCOWG3GcHPHpTLn4mfZYb25ewU223dp0u5tt2BIUPO3A6ZHsRU
L/FQrJdsNKZoIhN5TjfkmNgDu+XAyMkYJ6c1Zm+J1tHPdlLNpLaGRo4m5V5WESuFCMAcktj8
M1Da/E2a51DT4l0oeROLdZyrMzo8qhgR8u3aNwzkg+1Hi3VdfTxJMlpcTQaVpkMM959ndEdl
ZmzjcpzgL0GO9St8QNTtx59xokX2SZp0tTHc5kkaOQIAwK/Lkn1NPn+IV1p92mm6hpCR6m0x
g8mO43Rs5CGPD44BD8kgYxTJ/ickUslpHpbS3kMU7yIJcIpjbGzdjqRz7ZHrVtvGOr/ajpSa
FG2sI5Lwfah5YjChtwfHUggYx19qqQfExbjVbe3TTCbe5EQVjJiRWePfyMYwOnXPtTV+Kdu9
pDdJpUphukk+zESgtLIirlNuMjLNtz7E9K17vxnFY6XoV/c25SPViu/blzDmMv0AJbpisj/h
ZMrPp8iWUBguPK81RKxkXzHKAgBcKBgH5iM54rX8QeMo/D13cQXNsflgjktycgTszlWUHGBj
g/jWVc+PdXsX1BbvRrZfst0lnGY7lm3yMu8ZATIXbycAnPFLH8ToPsxkubF4JDbGREIY7pBI
0ZXIXgcZBOOtFx8ToLW4aN9OkcQ/aROyNkIYydq5x95tucdga3PC3iWTxDFc+fZ/ZZrZwrAF
ijZGQVLAH68Vv0UUUUUUUUUUUUUUUVyN94PvrjWLuWHUYl07ULiGe6geElwY8cIwPRsDOQa6
O40rTryTzbqwtZ5MY3ywqxx6ZIrmbrRtIX4g2EI0yz2vps7eWLdMZEkfJGPf+ddAfD2iEg/2
PY5UhgfsycEdD0rQAxS1FcxtNayxKQGdCoJ6AkVzOmeAdPtdLjguZruW6EUKNP8AaXLR+WQw
EZP3V3DOKuz+DdHntLe1kjm8u2DiPEpBG9w7f+PKKhvPDfh648SCWeSUXtyDObYTsElKALvK
jqQCB+VQwfDzQrdGWN74N5aIj/am3RKjbk2n+HBzj6mnwaLq+hIbPw6+mxWJYyYvfOllLscs
S27nmoZvDXh579l1I4vLyGSaWFLhxCDhRJIq5wueOaUaL4W1bU4tTgvHY6gxkWOG4IiuWjG0
tgdSB/Klt/h1ottBJDHLfBWjSJc3J/dqjh128cYYDn860NM8JaXpOoG8tftIb5ykT3DtFGWO
WKoTgEmtKPTrGEymKzgjM3+tKRKPM/3uOevekGl6eLQ2gsbYW5OTCIl2E+u3GKSTS9Pmjijl
sbZ44f8AVo0SkJ9Bjj8Ke9hZyXKXT2sLToMJK0YLr9D1FImn2Uc73EdpCk0gw8qxgM31OMmo
J9ItRplzZ2drawCdGXaIRsJIwCyjrXJ+GvhD4a0MLLdwnVLocmS5HyA+ydPzzXZXOnWt29s0
0W42knmQ4JG1tpXt7MRWc3g7w81xBOdLh326COPBIAA6ZGcHGTgnp2pt/wCF7R9JNnpkUFlK
lu9tBMYt/kxuRvABPfH51bi0HT00GLRJLcS2UcKw+U/RlXGM/lmq/wDwh+gfabi4Omxl7kES
gs205OWIXOASQMkAZxUsvhnRp9QOoS2Eb3JcyGRiT8xQJn/vkAVBH4N8Pw3Vtcx6eqyWqoIg
HbaNgwpK5wSB0JBIqTVPCui6zexXmoWfmzRKFB8xlDKDkBgCAwB55zVS48PeGLOztbWe1XyU
3WkKs7tzK2SCc5ySM5POe9LF4L8NJam3Fkrp8+9nmd2O4AMWYnJPyrjJ4wMVDqPgjRbjSpbS
zhitpZhLtmJLHMuPMJ55JAH9Kbf+GPC9nZww3ayxma4+Sb7TJ5zuVwQXzuI2DBycYFZtra/D
+/nF9bjcIXhiChpViUkbIm2cLjjAbGPet+DwX4etrqC5i05Vkt1Kx/OxC5QITjOMlQBnrxV/
+xtP22Ki2ULpxzagEjyvlK8f8BJFZzeCPDZukuP7LRXTbgK7BSVO5SVBwSD0JrXvrG21Kzkt
LuPzYJRh0JIzznt9Kp3fhvSL1LpZ7QH7XKs0rK7KxkUBVYEHKkADkYqOHwpolvbvbw2QSOSD
7O4Dtym4sRnPUsxOevNIfCOgmJom06Mo0ksrKScM0gw5PPORx7dqs6Toen6JHIljE6+awaR5
JWkZyBgZZiScDgVoUUUUUUUUUUUUUUUUUUVztzEzfEWxlC5CaZMCc9MyJ2/CuioooorI8Vw3
Fz4X1CG0+1+c8JC/YyBL/wABzgZ9s89K82GkeKZNLb7Jp15bPFBPHFJlg7RmSI/KrsWQlQ2F
z2ODzTbzSvFradbqg1Y2RluCqLE4lUlVEZK+ZuAyGwWY4zyMVNomnanP4okxa3suqWmo24n1
Iy/uo4liTzYz82CTk8AHOQa7Nba3uPHWqWt/GksV1psPlRyLkMgdw49+SM/UVlQ2c+naJ4Ys
fs5t7xdXYpHjBWPdIW6dB5Z/UV31FFFFFFFFFFFFFFFIc44615fpvhXxFBfS7dONsj3UcrTP
KjPkSFuoPzqM5ywDdqy7bwH4vTTrqL98hZIxcIXi/wBKIl3MVwfm4zy5Gc4NSv4f1SNItLn0
u4vLxrK5NopljU2RaRQkhCtgYJz8ucV3GspPbar4emn2zmNZoSzfdedovlz6ZIYZ965i7stQ
Fh4gvLzTLmzOo28NrDb3MySH7RvIVYcdIwWBA49a9MjDLEiscsFAJ9TT6KKKKKKKKKKKKKKK
KK5a88dWtlqdxbS6fdC2tbkW015lPLRym/pncRj2qF/iDBEYYpNHv0uboxG1t38sNOshIVh8
2B05B5GRVjTfHelX2oR2E5NhcyRl1S5kRcsJGjKDnlgUPSq//Cfo0kXlaJfyxy2sl0sitGB5
aHDHls8HHHvSXHxG0+LShqkVldTWjMVSYNGiOFUFiGZgOCduOpIOK6uKZZ4UmQ5SRQyk8cEZ
FS0ViSAHxzCT201//Ri1t0UUUUlGBWF4vkuotHiNnM8Mr3tsm+POdplUEfiMittYo0LMiKpc
5YgY3H1NIYYmlWUxqZFBCsRyAeoBpGt4XmSZokaSMEI5HKg9cHtnFS0UUUUUUUUUUUUUUUUU
2RtkbNjO0E4qppd1HqenW2oiERm4iDgHkqDzjNW3jSQAOoYAgjIzg9jSNGj7dyK205GRnB9a
fRRRRRRRRRRRRRRRRSUZrDuPCml3T3LTJK4ubtbuVS/BcJsx9Nvaqtt4F0u3mtp5Li+upbR4
zA8824xrGSVQcfd5+p9ain+HejXN0Z5JLv5gyyIJBtcGRpMHjI+Zj0Iq2ng/TI4oog1xiKym
sh8//LOQ5bt144NUbj4daPMkaRzXcCRFjGkbrtTcoVtoKkDO3JI7k+tdRbwLb20UCklYkCAt
1IAxzU9FYUjhfHcClWJbTJPmA4GJE6mt2iiiiiiub8dgHw9GCxUfb7Xkf9dkrpKKKKKKKKKK
KKKKKKKKKKKjn/1En+6f5Vm+Ff8AkVdL/wCvVP5VrUUUUUUUUUUUUUUUUUUVl+JTcjw1qH2P
zvtHkMIzB98Njjb71wl1HrGn6zcWl3d662gxSjMsMkjzbjApUBgNxXfuzjvgGiytPEl5A91d
HWFurSWyiEZneMOu4eado+VjtIyfrU2iw+KNWu5prfUwzaFc/Y4hLO/k3wUtuaTbnJ2snPPK
msqVPGxurQTz6hDJ8vlCJZXUv5z7wcEDG3b9/jbjFXNS/wCE3h0wyk3DqI7swx24k84HzV8s
SHPPGcY7ZpL618b3DtDJLdPPNcPM8UUrwxRKYVIUSLzhWOAB945r0mwEv9n23m7vM8lN+7rn
Azn3q1RWI5A8cRA99Nf/ANGLW3RRRRRRXnXxN8aWWiSQaTqFhdOsksFzHLHt2uqSAsvJ4I2/
qK67wxrcniLRINWaza0juctFG7hmKZ4Y46Z64rXoooooooooooooooooooqOf/USf7p/lWb4
V/5FXS/+vVP5VrUUUUUUUUUUUUUUUUUUh6VxGqeMtSh8YvpUEKwabayQx3V41u0uGfBAyGAX
OQOhx1qxb/EbTJ4XlOnanFHsDwM8A/0nLiMBAGJJLEdcUv8AwsPTVuFsZbK7TUWkaH7EQhk8
wFRtGGwchwc5xgGqUPxE8N6daeRY6fMoSKSd7e3RBsIl2EHBxuJOcelaQ8bxs7Wq6NqDajGW
86xHl74kUKS5O7bjDrjnJJxVa3+J2h3OqGzjjmIK5jlBT95+78zhd27GOM4xnipk+JGgvaC9
K3KWjQvLHO8YCybAu5V5yTlguPUGungnS4t451BCyIHAPXBGaqXmv6ZY6laabPdILy8YrDAO
WOASSR2GB1NaNYTqreO4icErpj49RmVf8K3aKKKQnFA5FLXH/EbwYfGOk2sMO0XNvcqysxx8
hOHGfpz9RXU2cUFvaRW9sFEMKBEC9ABxj9KnoooooooooooooooooooqOf8A495P90/yrN8K
/wDIqaX/ANeqfyrWoooooooooooooooopM0VzeseCrXWL6W5N/eWqXGxriGBwEmdPuMcg4I4
6dcDNRf8K/0z7DZ232m7Bs7byIpVkw4O9ZBJn+8GXP40o+H2jmQXEj3Mt2CzfanlzLvLK2/O
OGGwAe3FU9S+Gunvok1npbG3uJGdvNds5LujMTgdcIAPSrx8CaeR5gvtRS7LOZL1bjE8oYAF
WbGCMKuBjjFQx/DfQ4rzz4nukTgiFZBsBEflgjjP3ffGaW2+HGg2stqyLOyWYbyImkyiMUCF
sY6kAH68109vAlvbxQJkrEgRc9cAYrJ1vSnu9U0i7t7eMtbXgkmkwAwTy3HXqeSOKl1G38QS
XIbTL+xgh2jKXFq0jZ+ocfyrn2tfFX/CXRr/AGppfn/YGIb7E+3b5i8Y8zrnvmtdLXxeJFL6
rpLICNwFi4JHfnzK3gMUtZ+v3U1j4e1G7t22zQWskkZIzhgpI4+orzKXxFqOoW1qZNdkubSG
ezme9SJECyOr74jgYIHB9s85qzpOp6/p3h2ztotTlP2jT7WWJpLdWNuXnWMgcfN8rfxZ5FK3
jHxDY67d2d1exyLaSzRtF5SmRo0iLLLsUbuSAc52nOKq6V471q6ikiutUa3tftMCvqTxxuYE
eN2P3RtGWUAZztzgnNd14AO7wVp7F2fIkO9l2lv3jckds1ycvibW5TNDFrcsOpyXJhksTYhh
ZqZwisGx/dPfOc8YqFvGniGw8Uy6bLMslvaTPAyuEaR41i3edtHzEkjdx8vaqNr4v1LWGRL7
W3ihtr+ylWdURSQxbcrbDtCkgcHkZ5rovA3ijWta1uSDULiJ0aBpZIAButnD4C4CjbxxhiTx
muylTVzqsZhlsxp+P3iujeaTz0Ocenalt11T7VP9pa0Nv/yw8tWD/wDAsnH5VHAutfYZvPaw
N3n9z5av5eP9rJz+VJOuuDT4fIbT/tgb96ZA/l45+7g5z060+ddWN1b/AGZrP7Px9o8wPv8A
fbg46etOT+1BqjeZ9kNht+Xbu87dx17Y6/pUNqdcMF19sWwE2T9lETPtI7b89PwpgPiFtGG4
aampluzSNCFz17MTjtxUk6a4UtPs01gGGPtXmRuQ3TOzB479c1LIuqf2knlvaCxx84ZW83Ps
c49KS3TVhd3JuZLM2/8Ay7iNWDj/AHyTg/hUcaa5/Z8olfTzebv3RVX8vHHXnOetLMut/YYR
bvYC6/5beYr+X/wHBz+dLP8A2wNTt1txZGx2/wCkGQv5oP8AsAcY+tPiGp/2lKJTafYtv7rZ
u83P+12x9KhiGuiyuPPOntdY/wBH2bxHnH8eeevpUV7/AMJANCzANNfUOfMEhkWHbznHU56d
ao6G2sf8I/oP2BLE25t4/tXnM4YLgfcwMHv1rVRtY/tlg6WX9l7flYO/n7vcY24/Gks5Nb8m
4+2wWIkXP2fyZnKv1xuyvHbpnvUcR8QNpYMq6cmoF8YVpGhC5+gJOKnnXV9lt9nay3DH2jzF
fHbOzB+vWnFdV/tMENafYMcghvNzj6460kC6qLi4+0NZ+Rg+QIw+4em7Jx+VRwDXDpbmc6eL
/PybA5hx7559aJhrZtbf7O1gLj/l48wPs/4Bg5/OpJxqo1GAW5s/sRH7/wAzf5uf9nHHp1oi
Op/2hKJltBZ4PllGbzD0xkEY9f0qK0bWza3JvIrAXG4/Z0hlcoV7byRkH6CkZ9cGlIy29gdQ
z86GZxEB7Ntz6dqlnfVFltxbQWjxkf6QZJmUr0+7hTnv1xQH1Qapt8m1NhjiTzW83OP7u3HX
3pbd9TaS4+0QWqIv+oMczMX6/eyox26ZpiSawdPdntrIXgPyRrcMYyPdtuR37Us0mrC0haC2
s2uTjzkedlRfXaQpJ/ECuc+JdxfweEb54lt0hWJSs32h0mWXcNuwBeTnGORWN8O9W+It2sS6
xYRyafx/pF4fKm2+wA+b8R+NemDpXDeJ5fEw1PUBphlFor2WAN+85k+fy8cAY+9ntVXweviA
eLZJb2HUIrWW3l88XHmFRKJBsGWJBO3PKgDHrVHVf7eTW9Yawi1r7IygSqzSDa/mr86kE7l2
ZwI8HbweagtIPEl3pFz9p/twNDa3z2wEssTs+9PJ75PBbAYnvVx08bzTSSxG9iW3nmSCMk/v
i0DYdif4VYKAPU1XfUta06eyu9Ht9e+zLv8AOXUI5J1klMfTYPmHzdyduelenW8ksltFJNH5
UrIC8ec7GI5GfY1PRWGVP/Cdo3GDpjD3/wBatblFFQ3lpDf2U9ncLuhnjaORc4ypGCPyqjfX
uleGtIR7xlt7OHZEvyFueijABJPSsHUfiPo1pD5ttDJcr9je5DBCgASQIUORkMCehHGPetBf
Gvhllin+3IrzymBA0LiQsMZBG3I4IPPY5oj8X+GXs55IryExQ43KIm+fJwpUY+cE8AjIJrnN
e17wlNay6zHPqNxcSQPIsFvNcRqDH8vzqvEfzfLkiu1u7xbHQpb8Ig8m2MuJGOPlXPJwT+PN
ZZ8Y6EXZEurR9QW2MmzdhSQm/Z5hGOnOOuOcU6w8T+Hry5g05J7RbydVJt1GQGKh9u7GCcHI
9a6EKoJIUAnrgdaWiiiiiikpaKKKKKKgvLlbKynunUssMbSEL1IAzxWNYeLtD8QWUiadfxyz
NbmQwjO9Rt7/AEzVnwkjJ4R0hXxuFnFnnP8ACK1qWiiiiiiiiiikpaSiikZFcYZQwznBGadR
RRRRRRRRRWIzA+OYx3GmP/6NWtuiiiuf8YWOo6hpdvFpZVbpL6CRXZdwjCuCWIyMgelYlx8P
bm5ZJpNWRp5hIbwm3+WRnkST5Rn5RmMDvxWtJ4U8/wAQvqkl18jNK3lqnPzxLH19tpP41zlv
8L7y2tJIU1aAMoijhIgYb40bOJDuycjA+UgcVZi+GUljp8lnp+utbi6ikgum+yqd8TsWwoz8
pBJH0NaOs6jqV54dvtKtfDWpvNLbPbozmJUOQVDZ39O/Ss0fD2+bT/7M/tK3j0/ebnyxATIJ
zHtI3Z+7uJbpntWjp3guaz2ebfRyFdTjvgRFjhYhHt69TjOa6+iiiiiiiiiiiiiiiqmqgtpN
2qpG5MDgLIcKflPB9q4XwVqGs3CyxXP9oSWsNvKHkubdY0H3fL8thwf4xxkYAroNJ122s9At
YRDcXEttpcVzIkKAkIV4Hb5jg8exrftbmO8tIbqE7opo1kQ4xkEZFTUUUUUUUUUUUUUUUUUU
UUUVBBeQXM1xDE+57ZxHKMfdYqGx+TCp6KKKKwAT/wALBAJOP7KOB/21Fb9FFFFFYniLxRZ+
G1iN3bXk/mq7AWsPmFVTG5m54AyOaoJq+rPaafcyN5S3uopGIpbUxSJEd2VYFjzwORiupHSi
gEMMggj1FLRRRRRRRRRRRRRRRRVe/lWDT7iVyoWONmJddwAA7juK8z0HTZ2lnlS51HSLu8hN
1DAkCxWUsa43ARAnBIIzkg8g1DrU9mbbTUmubWweHRYXLytMDeIQf3R8thxx0OT83Ar0fw9q
dlq2iWt1YeWIfLVdkZyIiAMp+HStOiiiiiiiiiiiiiiiiiiiq0+oWdtcw2091FFPcEiGN3Aa
Qjrgd6sVy0l3d2Fv4tvLGETXUE/mRRlSQ7C2iIGBzUPgnxTfeIZ7lL2W0/druiWG3ljMi5xv
BfgrnI47iuvpaKKwSu3x6rkj5tLIA+koz/MVvUUUUUVxvj6Gwll0r+1l8vThLILi4+fC5ThG
2/wscZzxxjvVXSGL+FdALq5jh1VVjZt2JE3Oqsob5gpyCAeQK7hZ4WbYsqFvQMCa5G68KahP
rmo6pbzC3vS6S2N55zngKAYZI+mzIJ4/vZ6itnwnYXumeGbKx1EqbuFCJirZBbcTkH8a2aKK
KKKKKKKKKKKKKKrahEJtOuYjsw8TL+8zt5B645xXlPg6zstR1qe2uGsBPZ27fZ1spbkhgMYK
uzkbfVSAenFaF6k9xa6OdOuBp1zBpEc818rvIyRJgEeQoIfvjP4dK7nw69++m7r+a2uMtugu
bddizxEAq5X+EnJ49q1qKKKKKKKKKKKKKKKKKKhu/ONnMLcgTbG8snoGxx+tcF4Mu9TvdeH9
sf2jMDCTbPcrblcgKJD8g3D587T0IHqK9CrmAVM/iu3fePnWVmWTyiFMCjh/4T8h57VhfDe8
X7fd2ouUvNseY5zqq3MmzPR0DEAgn7y4B9BVnxr4j1XQtXiEGrQQWjxgvCliZ50OcbsZAZfX
kEe9dysgZQy9CMin0VhyRo/jqB2UFk0yTae4zIma3KKKKKK4j4hXUllPpNwuo3tmkckrSCxj
DyldmN2GG3aM859eKfBex32gaW63l1eNHq0cUr3aKkqurkFWCgAEe1cf4Hi0208eRC2a1uJX
MkIdbSVchVZvMWRuCzZwR0I6Hiu38W313YanpkltDJfApODYRXHlPIdo+f0IUZ/MY5rS8HSy
zeFbCWa4W4Z49wdZTJ8pJ2gseSQMAk9xW3RRRRRRRRRRRRRRRRUN3j7JLuKgbDkscADHc9hX
nPgu6vZ9dkW+1KS5jW1kFkssc8YMfGTGWAEg6fMcnGKo6tfm2tNAit5zZTPpyCef7b9n8yM5
wvQ5AIJJ6qG969K0B4JPD2mvawtDA1rEY42OSi7RgH6CtCiiiiiiiiiiiiiiiiiiq9+VGn3J
fdtETFtn3sYPT3rz7wH5N7qGmOdXhnWxtGW0t4tPaFwjAZ8xyNrEe3BPNdD4m8ajw3fLa/2X
PeZiWVnjljQIGfYM7iP4iPzplre+Xd+Ir68T7EFt4JJA+1/K/dEnOODj64OKyPAN439rXNvM
08clwsk4imsYoSxDAMQyMemV+U/3qq/EK4lXXooLW7miaS3AnhgtpZPPjyx2OVYADAYjGDgN
XoseDGm0KV2jGDgYxXLXuta/aeLbWz8+xlhubjYtjFGWlWDHMzvn5cHHGMHOK6+sZv8Akd4v
+wa//oxa2qKKKKK4b4nxQTabZpK6tJ5zeXbKsvm3HHKI0fK59wR0zVbT72JbHTtHOh3ejzW9
7bzmG4fzN4d2+bf3JIOc81iaM80mv6JdaVHAI5rh0EEup+cEwjnLIq5DKm5RzxkZrofiBftZ
6ppAsri4tdQlLRi4ilRQsTMisCHBDfMVPtjNbvgg2zeErFrQSCMq2fMkDsX3HeSw4OWycit+
iiiiiiiiiiiiiiiiq2otEumXRmQSRCFy6E43Lg5H5Vw3g+yu5LiG8upTNbw2LLaK+oJMbdWA
ONoQEnAAySelZOrwve6Xolvc2OqXNvDpyTWx0+ySb9/yPnLg8YA4+ue1egeFtVn1fQbae7tL
i1uVRUmSeHyiXAG4gf3c9K2KKKKKKKKKKKKKKKKKKKr34JsLgAISYm4c4U8d/avN/hre+I7r
Uwk8l9JpkKMpeYRmDG1dojK+jbsY424q58SI7mW/tXW1tPJgiLm5n083JALBXHHAABDYxk9u
lP0BpbLwxrF4bRrh00+3P2ZgSH224+XHUf7v+NY/geOK18X20OmX2nolzaNPcLEsjyYBH7r9
6xK/ezwO1WviBbWdz4gma4ns7VrazSX/AEm4ljN1y+FQIwGRyM8n5ulekRMBEgEZUbR8p6jj
pWBB4GsrbxFPrsGpamlzcS+bMgnGyT0UjHKj0zV/UfDVhql0bm4kvVkKhcQ3ksS4HsrAVzv/
AAiGl/8ACZrb+dqG06cXP+nzbs+YB97dnHtW5B4P0u3njmSXUS0bBlDahMwyPUFsGt2iiiiu
E+JU8Nv/AGW14lpPZmSTzLa6u2gWVsDbyoJJHPHTmquh3GoyeHNKW5ghW0XU4jbTRXTTbkMj
YX5lBAUYAJznFYXh+KLVvH0cWqNcTiKR5LO4j0sWqScEkM4CtkYz1IP411HxIWwkisU1C5ng
i3MR5elrdgnjqSDtP861Ph/FdR+ErY3c0zu5YqksKxeWu4hQEAG0YAOPeumooooooooooooo
ooorE8Vz6laaQLnTYHuHimQywxpvaSPowA79a4rwPYg6wl9b2t4P9ClW9N1YLbLDKdvyx7QM
9+OeBnNdz4V/5FXS/wDr1T+Va2KWiiiiiiiiiiiiiiiiiiobuTyrOaQlV2IWywyBgd/avMdB
0ia61aG5ebU9Kv79PPtbiBYorWZFwSDChPVT/Hzz7VreOZYbfVopri/thGbUhbSTVnsnLbj8
644bjjn0qv4Bjji8LavNHbtbSbEWXexXcy26kvlcnncTuHXg0eAlvdT12e68QQF721hAs3uN
3mLCTwygoBz3bO71Ap3jkSvrhaQSOLe2WSw8vUYbfyp8tlmVyCf4ecEYyMV2VjeXtxZRS3Gm
y28rD5ozKhwfqCRz1/GtKisDP/FwgO39kn/0bW/RRRRRXCfFK+tbXSraLULl4LKd3WVoo45J
cgDaUVucg91ORmiwmmfwf4dNxdG7dtSiXzTMsrbQ7bQzLwSAADjvWH4Jtr9PHEjT3MEtqqyG
3gGHa2HORs3nyCeD0OenHStn4iva295pk95bwajEElUafMzjcxx+9AVW+705H8XFdH4OieHw
ppyPdpdkQgiWNiykHkAE8kAYGTzxW3RRRRRRRRRRRRRRRRSEZ60yfAgkP+wf5Vm+FgR4V0wE
YP2VP5VrUUUUUUUUUUUUUUUUUUUVDdqrWcysVClCCW6AY7+1eQeArDR9V8SmyupNOneyUvAt
nHMFZQRhlcvx7qR+ddB8THslvLJb68Nmqrvt5oreOWUSg8AEkFQfU/L64q3pl4TpWr20+ox2
t5fFY4JyUC+YbRDkFfl4AJ4444qr8PmtpdXmexihs44rNUmgS5aU3Dlv9b8wGBwRkdc1S+I2
0+IrZjPbWl1FCGs3exEz3LEnMeSwGOnDDHJINelorbF3AA4GcetTUVz/APzUMf8AYJ/9q10F
FFFFFcV8Q5o4EsHu5plsN8nnxW1ykMrnA24LEZA5yAc8iobRpW8KeHfOuDIzaogSQSpIwXc+
0My/KWC4BI71Y0PwVe6bqllLcXFibfTd/kPb2/lzz7hg+a3Q9c4HUgGoPG815F4g00aYbiO9
+zTEvFdRQjy9yZB8wEHnBxW14L0y60zQYori6llDDcsUjRv5WSSRvQANknOa6Ciiiiiiiiii
iiiiiiiorlgtrKx6BCf0rN8KEN4T0th0NrGf/HRWvRRRRRRRRRRRRRRRRRRRUN2VFpMWKhQh
yX6AY7+1eeeBVnHiNHvL24mjNuy6etxbSxL5XH+qLMQw6csN2Mdqt+O7VNS1qC08qKWS3tGu
VE1ysCoQ2AynaSzD0Pyjv1ql9mtNc8H6pqFzcSWi27R3aTxwruX/AERAcoPlOQzDHvxirngp
L8axGuvtcG/WwAsi5i2m33DPCfxZ29fw71F44tI7jW3M9rIzi0X7H5Wmx3PnyZbKOWUkAfLx
kDknNd8hYRqCqqdoyAeBxU1Fc/Hz8QpvbSo8e2ZWz/IV0FFFFFFee+MNQ+36zHDp1o15f2Dy
Qm0exS4VgVjYuNzqFwCoz15NPjvJLnS/B0hSCMy6mRLHBD5aAhJeNnYgjn3zzXfDpVHUdD0n
V2jbUtNtbwxZ8szxK+3PXGelWbW1t7K2jtrWFIIYl2pHGoVVHoAKmooooqlNqtnFqcWmGYfb
JlLrEoJIUfxHHQcY561BaXeryfazd6XFD5ZP2YJdB/OHOM8Daenr1pkl9rf9lPPFo8X20Phb
Z7wBSvrvC8fTFOubzV44rNrfSo5nlI+0qboL5HHOCR8/P0qZ7rUBqawLp260Iy1156jafTZj
J/8Ar1HaXOsy3t1Hdafbw20YP2eVLku0vpldo2/mahgvNffSZp59JtY75T+6tlvdyOOOr7OO
/Y0XN5r6aZbTW2k20t65/f27Xm1Yh7PtO78hUlzdaymo20VtpkE1o4HnztdbGiOecJt+b8xT
4bnVG1aeCawijsVXMNytxudzxwUxx37npUVtea5JZXb3OlW8NzGT9miW73rNxxlto2/kaQ3u
urpMU/8AY8DXzPiS2F78qrnqH28nGOMd6mubvU42tlt9MWYSY85jchfJ6Z7fN36elV9Wu9Qj
hvIhYgWq20h+1/aBlTsJ+5jPWq/hm4v18O2yNpQhSGzj+zgXKv53y8DoNvbr61dW/wBWOlG5
OikXYbAtPtSZI9d/T8KLi/1aO2tZINFM0sv+ui+1IvkfifvfhUr3eoDVY7dNNLWjLl7vz1Gw
4PGzqecD8aZbXWrvfXUdzpsMVrGD9nlS63NN9V2jb+ZqGC9199Jnmm0e2ivlbENsL3ckg45L
7eO/Y9KS4vfECaXbzQaNbS3rnE9u17tWMez7fm7dhU9xc6smo2sUGmxS2kgzcTtc7WiPoFx8
35iiC61Z9Xmgm06GOwUfurkXO53PHVNvHfvUdle63Ja3T3ukQwTRn9xHHeBxKPc7Rt/Whr7W
RpazjR4zel8G1+2DaB679v04xUt1eanCbUQaX9o83HnsLhVEPTPX73fp6U77VfnVfs/9mn7H
jP2vz1646bOvXim297qckt2k2kGFIgfIf7Sref1xwPu59/Wo4r/V20yS4fRGju1bCWv2pDvH
HO/oO/5Us9/q0dlbyw6KZp5DiaD7Ui+T/wACPDfhUlxeX8Wow28WlvNbuMvdCZAsfrlTyfwp
YbvUJNTlt5dMMVqgyl156tvPHGwcjv19KNPvrudZP7Q09rBlfbGHmRxIOxBH8qvg5papaxIk
Oi30skYlSO3kZkJxuAUnGe1cL8Oo47nUEuRf2N5HDahYIk1N7mW0Bx8oUqABjgnrwBXdaho2
masEGo6fbXYjOU8+IPt+ma52V54NF8UmytlnlS4dI4dm4EeTGAu3uAO1Y3wvtbi0vdQWexeF
dgAaS0MRVQxCKCSTgrhsdiazvE9zp19rEusLYWesQSW8Ui+ck+63jxjazKNqAkE8/U8V6wFA
AAAAFLRWBHn/AIWDcen9lRf+jXrfooooorm9X8CaJrWqf2nOLqC7Iw0trcvEW4xzg+nFcp4j
8YeHfC2q6XoT295Zx6PciVkSPcsieU20qc85ZhnPfNeh6TetqOl2169u9sbiMSCKQgsoPIBx
3xVyiiiikJwCT2rGW/fxFp0x0e7lsx5mxbt4M71H3jGG6+gYjGfWtaKFY1H8bhQpdgNzY9TT
8D0oxRRiiijA9KKMCjAowKMVzfjfxDp2h6HPFqEjQi9gmiik2Erv2HCkjoTnj6GpPCPibS/E
Vhs0uR5ks4445JPLKpu29AT1x3roKKKMD0owPSjAowKMUYowPSjAooooxRRiq2oadbapZyWl
3EJIZByMkEHsQRyCD0IqKO4ng1GOxa0meAxApdbwwyOqv3B6YPOeav1z/jCTVYNLjutKSaaS
CYNLBEoYyxlWBGD1AJBwPSsLwZpt0muRXsmm6jARZFLqbUQmWlJU4j28gcHPbpXY6retpulX
N8sD3Bt4zJ5SH5nAGSB74rzCy8e6R4jt9d0y2S9gW+aS4kuWjG23i8tQSwByTkY2jrmun8Gy
T3Wt3lzqFuLK9+yxRi2W0eEPGCdrncTk9sdsYp6/Dm0iurlrfV9St7O7P7+yjkXy3XJJXpnH
JHXODiuxoorAjX/iv7h+w0uIf+RXrfoooooorgvHvgI+KfEOh6ggXy4JvLvBkAmLO7PvyCMf
7Vd4AAAAABjgCloopK8/8U/FC08P+MrTRgplhQH7ayYJDMPkUEkAc4JPauuisp7jVU1RtRn+
ziICKzXAjBI5ZiPvn07CtLFLRRRRRRRRRTWdUGWYAe5xSg5pa5vx7oC+JPCF9YBQ0+3zLf18
xeVA+vT8aPAPh3/hGfCFlYOm2cp5txxz5jckH6cD8K6SiimpIrlgrAlTggHOD706iiiiiiii
iiiiimuiyIyMAQwwQe4rIj2eGbG3tUjvbu284oH/ANY0Ck/KD3Kjpnkgda2ByM4opGUMpUgE
Hgg1wnhT4bWeiz+IEuo1kg1GQxwqGORb9cZHQ5P/AI6K6TRPDVrok0s6XV7eTyqEM15cGVgg
JIUZ6DmtmiuTk8T6nbeL7fSbqztI7e7maOACVjMUCk+YeNoGR0znmtO68XaDY3j2dzqcMU8Z
2sjZ4P5VhReLfD//AAmVzeHVoBCNOjjzk8nzHJ4xz2/Ot+y8V6FqM6QWmpwSyyHCoCQSfoRW
vRWb4ivZtN8OajfW2POt7Z5I9wyNwUkZFecaP461vU1S3vNXtNPjedQdQMMbKgMO/ZwSmSwx
yc496e/jvXBLZXCajaET2snm2nkBWjZYndXwTuwxUH+6BweaTT/Hes3LRWl5rNjYl7qNXu5I
UYKjQs+Mq2zO4euR3ptx8RtZRtPkS4t+fI8+PyFVZVeQrvUs247lG4BQcZ5NOu/iRLBp06jW
bYXsdjKwB25E6z7QpXHXZ2+pplx491uLxBeCyvUu4UFyqWrRINvloWQgD5+3UnDdhVnTvE/i
fULVRHrNouLu1hWYQxSllm4+YI2ARjI6E55AqW78bavaW1/cNrGmrPA88K6fNBtlUxkDfkHq
Rk4OByADXQ+BNS1XUbLUU1aS5M9vdeWouY0SVVKKwDBPl71Vg+EvhNbqS7vLWfULiVy7yXU7
HcxOScDArrrKyt9Os4rO0iWGCFQsca9FA7Cp6KKKKKKKKK5rxxqEmnafYuupSadFNfRxTXEY
BZUIbOMg+g7Vwd7Nf6ncRtNql75txDAltKYQvmot7gS7ccNtCt+PpWmdV8Utc31vb6lcu2lJ
eNGPs6E3hjZRGH4/2j93GcVQh8Z6r/Yx8/V5tr3EKLcxtGSCyMzo0pQKnIHG0kZxUE3iTU9W
02zTVtXktpmNm0NosAAvcy4dicZyCB0xjHTmvSfGGoXel+Grm7smMciFAZgm/wAlCwDSbe+1
STj2rzzXfG15p0CrpfiWe88hHlinkgjjW5w+AMkfvcDI+QD1zV+fxH4ktXa/jv2uBczX8Mdo
0ClIxCrFCMDcTle5ORVLVfF+rxRwxab4l+320m9vtphSH94EUiIPtKtyScBc8Yz1rqvA1xcs
2u3uoQvFcSTQyzKEOM/Z4ydo6+vFbMPijT59Hl1ZEu/s0TbWBtJBJnjohXceo6CnXXiWws9P
tr6Vbow3JAj8u1kZvxUDK/iKsTaxaQajDYSeaJp13R4hYqf+BAYB+poh1i0n1CewTzRPBy4a
F1UjAOQxGD17Go7XX9Pu7Se6ieXyrfPm74JFK/gRk/hmlbX9OXTl1AyyfZmbaG8iTOf93bn9
Kkn1iytnt0ld1N1/qsRO2enXA46jrinf2paf2iNOLv8AaSu4L5bYx/vYx+tNg1mxuXuUikct
a580GJxjGemRz0PTNRJ4g02TTZNSWZ/ssR2u5hcEH/dxnv6Us+vadb2lvdyzOsN0QImELktn
pwBkfjUkus2MGpRadJPi6mG6OPa3zD1zjHakh1mwuNQn0+KZmubcZkTy2AX8SMH8DUVv4i0u
6tbm6huS0Np/rn8pxt/Mc/hmuN8VfFJfDWqWE0dst/pV9CWBQGOVGViGxu6jp1A+tdX4a8V6
X4tsPtelySFVOHWSMqyH0Pb8iabqbSeHrfVNbN3NPbLCZfsbnIWQDqrHlQeMjp3rn7zxjr1m
81vLBpX2iB7ZSyySNG/nttUAj+IHJPqMYqpf/FGbTrrUtPksInvLS9SCNVZtsiHG9/UY/wDZ
hTo/iTqDtcSnRwLUJM0LFXBzG4XBJGGJBP3ehwDT7z4j33nzwWOjuZEuJI0WeOTftSNHO5By
CS/0A5q3Z+P5Lm6it30qaFpp7aNTtLIglRWIZxwGGTj14ruK5t/CDTazHeT61ezWkV19risn
2lUk56Njdt5Py5xXR1ixD/it7o4HGnQjOOf9ZJW1S0U1lDqVYAgjBBGQayNYvtB0OzjXVTbQ
W8r4RHh3B2AzwoByeKw9R8d+GbTUSrwxSiMQK94EBQRyhsEHBJAA6e9Sz6h4IvZNMVryxCgv
c20SgKj4VlYsMYwBu64wRVp/E3g6WxXVXvdPeBX8lZmQEggZ2gYz05+lVdY8T+FEto4ClrfN
f+UqxRx53pM20EsBgcEnkgnFbmoy22iad9pS3gAjKIN7BAASEGWwfWs5vEfh2JLyLTpLC5nt
JFaaCJ0TDFwu7PTIJ6+vFTWeqeF9W1We1tZtPub9RiZAqmTCnvxzgj8K3VRUyVUAsckgdadR
RRRRRRRRRRVa7sLe+e3a4TcbaUTR84w4BAP6mrGBnNZuseINN0JI21CcxmYkRqsbSM2BknCg
nAHJNZY8YaNGlz9r2wpFdNGgWMyGUKquZNqjgDeMk9PWrM/ifw+bxrSW9jMqoSXEbFVyu/Ac
DG7aN2M54qj4Z/sTULt7jTNb1O+MSAmO6uJSu1xw21wMg84PTiquo+MhZ6ZHqcegJNYK8irM
86RjYr7AEBHLMckKOw610Om6lDf397ZG3EM9i6kqcHKuuVcemeQfcGtFYIkVVSNFCnIAUDB9
akoooooooooooooorn9X8FaLr+sxapq1ubx4I/LihkP7tBkknA6k57+lbkMEVtEsUESRRqMK
iKFA+gFLNDHcQvDNGskcilXRhkMD1BFZlt4X0O0tGtLfTLeOB5VmZAnBdcFW+owMU+Xw5o88
sksum2zvKWLsYxliSCc/iqn8KYvhfQ1ubi5Gl23nXP8Arn8vl+QT9MkA8elF74Y0TUhIL3TL
efzZfNcsvLPt25z9AB9KnGi6aowtlCo8xJcKuBvQAKfwAAH0q/RRWJHx43uMj7+mxYP0kfP8
xW3RRRXM+LbLVrjUNDn0iOJpbe7cs0yFkjVomG5sEHHb6kVm2XgGe0vrWQ30MsEBtpHUwYZn
iLnjsAd/A7Yof4emU6nuvgBf2k9vkR/cMkxkB69s4rLbwLq9taqH1a0t57m6VWQSTbZFEZVQ
HJ37upwCB26VdtPh7qFhYw2Nvq8Jtd1u9yHtiXdoWBG054BwPX9an8Qa3ea5pjabaeG9dimk
ni2yyWyqihZFYnO7jgGqw+H+pGKCzkvrQWmnrItm0cTCVw7hj5h9gO3U8mtfQvCk+l3NjNNL
BK9tJdu7qhDHznDDH0xzXVUUUUUUUUUUUUUUVzvi7wzL4kt4Y4buO3aFmOXh39RjIIIZWHUE
H65rFvPhsbl1m/tJZZ8ybnuoPMDh0RSSAR82Uznpz0pk/wANUhuLma2mt5IpFMipJBiQSCLY
oDA4VcgHpketanhDw9qGnwQ3msXCy3f2CK0WOOPYIY152nk7myevtVBfCOrXPh2LQjdw21tA
slq6TQCYSJuykqHOQ4U4575rc0XTp4df1S7lSVI/LgtYC+P3iRqSW465ZyMn0reooooooooo
oooooooooooooooopKxEbPjeRcYxpqf+jDW5RRRRRRWL4j/1uj/9hKP/ANBetqiiiiiiiiii
iiiiiiiiiiobtmSzmdThljYg+hxVbQp5brw/p1xO5eWW1jd2PVmKgk1foooooooooooooooo
oooooooooooorn1JX4guP7+lKfpiU/410FFFFFFFYfiZxG2jsf8AoKQgD6hh/Wtulooooooo
ooooooooooooqG7XdaTL6xsP0qh4Ybd4W0s4xi0jH5KBWrRRRRRRRRRRRRRRRRRRRRRRRRRR
RRWEF/4rwvgcaWBnP/TX/wCtW7RRRRRRWB4rGf7F/wCwtB/7NW/RRRRRRRRRRRRRRRRRRRRU
N2dtnM3pGx/Ss/wsMeFNK4AzaRnAOf4RWtRRRRRRRRRRRRRRRRRRRRRRRRRRSZBpaxAD/wAJ
uxzx/Zi8f9tDW3RRRRRVPUtX07RrYXOpXkNpCWCCSVtoJPauXn1r/hILiyeD7JLYRaxEsFzb
XIk8zCsSGGPlI49a7OloooooooooooooooooopOlQ3v/AB4z/wDXJv5Gqfhr/kV9K/684f8A
0AVp0UUUUUUUUUUUUUUUUUUUUUUUUUV5voGt6pf/ABFik1G31O1W4t51is5bcpHCqsu1s5+Y
kDJPQEgCuovtb162vJYbXwpc3kKHCTpeQoHHqAxBH41hjXvEP/CVtL/wh115v2EL5X22DIG8
/Nndj2rcsdc165vYobrwnc2cLth52vIXCD1wrZP4V0FFFFFcx45SOax0+AzSQTS38aQzKExG
SGBLb+MbS3Hc4xWJow8ixs9PFw86afry2yM5RjtWM4+ZQA3B7jI6HpXoOa5zW4vF0mrxR6Ne
WdvYyRHfLLb+Y0cgPQjcMhge3THvWvpUepRWKpq09vPdDO6S3jKKw7cEnmrtFFFFFFFFFFFF
FFFFU9WMi6PeGFtkogfY27GG2nBz25rlfDfiG51ezaObWdNvF+xMwjgt5I5CRwSSzEHB64Hc
V0fhv/kV9K/684f/AEAVp0UUUUUUUUUUUUUUUUUUUUUUUUUU0xoWDFBuAwDjkClxWGmP+E5l
4Of7MT6f61q3MCloooorkfiJcJbaNayTT2sNt9sX7Q13H5kRTa3BQctzjAH17VT02e2m0nSF
tLmwnij1hVH2G2MCJ8rEgqSTnnPvkViaReXlv8Qfsl9qn2ki6dPKXV8klmZlIiHVVXClTj1r
t/FGpXelDT7iIT/ZftOLr7PEJJCu04AXry2M4yaXwfqV1q+gJeXRd1eR/IlkQI8sW47GZR0J
H8s963aKKKKKKKKKKKKKKKKralGk2mXUUmzY8TK29tq4IPU9h715b4U1PS7G5u5L2e/nkRWg
iu8ieyVpNowsiqOWKoPm9Ku6j4iutD03TbWSa4WLUNJhhshbzxRlJ8DLHeQR/Dz0616PZfaP
sNv9rKm58pfO29N+Pmx7ZzU9FFFFFFFFFFFFFFFFFFFFFFFFFFFc/GP+LgTn/qFx/wDo166C
iiiiiuN+J1gl94WO6aCExShxJLcCHAwQQpIwSQSMGuf8N6rpJttH06GW/F9NqSTuNQh8t5sR
ldyYG0qAqjis2NWj8Rw3elaZfzwDVWRJWgijSRhK52+bnI+YuMkcjArtPiBcmys9Nv4Ti+tr
nfbobfzlJ2EMWGRgBSTnParngSHyNAdWmEkxu5jMqw+UsUm87kCZOAD/ADz3rpKKKKSgDApa
KKKKKKKKKKp6v5n9jXvklRJ9nfYWxgHacZzx+deZeHNVuUu0s7ay1G5tJLRhdRz38FwqScYk
VQ3yqPmzj1GBxSaxAbPT7O+upobWyvdHt7Y3dxYrcJG4BGD8wZfvdgR+Vd/4QMn/AAjlqr6p
b6mI0CLcW6bVIHAGMnkY5zW3RRRRRRRRRRRRRRRRRRRRRRRRRRRWCiEePJX3cNpaDHpiVv8A
Gt6iiiiiuU8fmQaTaMA7Qi8Tz1hljjl2YP3GfgHOOhBx3rndI1e51CbToZ7C+aGLWB9lvLmS
KYrHsPyM6sTuzn8Mc1QI0+98fPozzafp8wu/Ot7jTPMEkhySVY5Kq/XOV+ldf8QbOzvNFtre
9urGBDMAsl7I6c7T91kIOfXtjNRfDTzP7DuVE1pJbR3ckURtg7ByCdzl2JLbic+1dlRRRRRR
RRRRRRRRRRVXUmZNMunRFdlhcqrYwxweDnjH1rzT4eyILvUorS/tbi0+yOzQw2YgFtLxlFyx
Y9yQMqOOakvJ1sI9MuJLCea4m0aGPTZobRZ9s23Jzu6Y47dCea9F0y2+z2aM9tFb3E4EtwkQ
+XzSBuPvzVyiiiiiiiiiiiiiiiiiiiiiiiiiiiufj/5KFcD/AKhUf/o166CiiiiiuV+Ia20n
hvyryKBrV5gJpZ4TKsK4Pz4BBGPUcisLwwrJ4c0ZdySRDWF8mdLZYPPTY2HKqTyfU4JAHFUd
NbVv+FghJlb+xPtshtuZNpmycnON3XOA3yZzg8V03xFuI7PSLS6vPObToZ83UcFwIpJBtIUA
kgn5scA5NXvBDXL+G45LgYSSR3twZFdvJLfJuZeGbHf8+a6Giiiiiiiiiiiiiiiiqmqic6Td
i2jSScwv5aOMqzbTgEema8/8I2L2+oTvb2tyI/7PcXj3lhHbsk3GFjKqCR97PUcDmsjxBas8
ek3EZinCaPELhZLOWb7NGYmXflOADuJx1ygr1jTI0h0u0iSc3CJAirMTnzAFHzfj1q1RRRRR
RRRRRRRRRRRRRRRRRRRRRRXPx/8AJQrj/sFRf+jXroKKKKKK5bx7bm60eCKSMm1Nyv2qVLZZ
3hjwfmVSDznAzg4BNYmhJ5Gk6ZGlu6Wx1wfZpXtRA8sexsO6gDBzkZwMgCn2nhLVo/FS3j2V
ouy9a4bVxcN58sZJPlFMYxgheuMCtfxtvV9Iktmn+1x3DtAkNotwWPltnKsy44yc5qPwHY6v
Z2Nwb5wlvNM8sdu9oYJImZiWyNxG30xXXUUUUUUUUUUUUUUUUVleIbu2g0qWC4nWD7YrW8bs
DgMyNjOOgwDXB+B2tIbm8SLQ7KyYaczC5hiljeZOOQHA3KeuR04z1robHwlaaxoun3b3+o2r
z6ZDBKtrceWroE6EY9zXRaTpaaPYJZR3NxcRx8K1w+5gOwzgcCr1FFFFFFFFFFFFFFFFFFFF
FFFFFZo8Q6QdT/ssalbG+DbTbiQbwcZxj6Vo5rAj/wCShXH/AGCov/Rr1v0tFFFFcN8Rbm1n
toLTNtPc2lxHM1nceYBOHDqoGwEk5BOB6c1U8PXENxoWl+Tp8Fh5euBJIoHcruCtk4cBgfYj
tXodZuteH9O8QQwxajHI4gfzIzHM8bK2MZypB6GrGmabDpNmtpbvO8ak7fOmaRh7bmJOKt0U
UUUUUUUUUUUUUUVma9oVt4h002VzJNENwdJYWCujDIyCQexI/Gsuy8NR+H7O5vLnVr7UZIbR
4o5LtwRDHjJCgAddoyevArU8N/8AIsaV/wBecP8A6AK06KKKKKKKKKKKKKKKKKKKKKKKKKK8
6t9O1C28ZtLYW2swzTakz3huArWbwEHLKQOpG3HcGutm0jU3nkki8RXcKOxKxiCEhB6Alc1g
DRdYbxheCLxLcpMNPi2ym1hbgyPxjGO361v2WmarBerLc6/cXcA/5YPbRKD9WUA1sUUUUVzm
v+DbfXNUttUTUb2wvLfG2S2ZecZxkMD03N+Zqje6Kuiy6NHFPNdPc60Jrme4cb3cxuM4AA7A
YA4FdgOlLRRRRRRRRRRRRRRRRRRRVHWio0O/LY2i2kJz0+6aj8Oo0fhrS42xuWziBwcj7grS
oooooooooooooooooooooooooooorFh/5Ha7/wCwdB/6MlraoooooornPFUm3UvDabVO/VVG
SORiKQ8V0VLRRRRRRRRRRRRRRRRRRRWd4hGfDepj/pzl/wDQDUmjxLBoljCn3Y7aNR9Aoq7R
RRRRRRRRRRRRRRRRRRRRRRRRRRRXP2cpfx9qaEqRHp9vgDqMvIea6CiiiiiiuZ8WD/ibeGD6
aqP/AETJXS0tFFFFFFFFFFFFFFFFFFFZ3iH/AJFvU/8Arzl/9ANWNN/5Bdp/1xT/ANBFWaKK
KKKKKKKKKKKKKKKKKKKKKKKKKK5y2TyfiHfYJIm0yBiD22yOOPzro6KKKKKKxPES4u9ElBOU
1FRgHAOY3HP51tdqWiiiiiiiiiiiiiiiiiiiuM+J+oaxpPhSe/01o2iUGK6hkTIaNxt3A9QQ
SPzNR/C7Wtc8Q6A+o6t5KQFhFaxxR7flQYLE98n+VdvRRRRRRRRRRRRRRRRRRRRRRRRRRRRX
Px/8lCuP+wVH/wCjXroKKKKKKK4fxb4z0Kz1OysLnUFtrmy1GKSZJUYYTYTuHHIww6V1ul6l
b6vpsOoWhZredd0bMu0svY49+tW6KKKKKKKKKKKKKKKKKSlqrqenwarplzp9yu6G5iaNx7EY
qPRdKg0TRrTTLb/VWsQjU4xnHU/Unmr1FFFFFFFFFFFFFFFFFFFFFFFFFFFFYkOP+E3u/X+z
of8A0ZJW3RRRRRRXmPxP8BSeJNd0a9tI2zLKLW7dR92POQx+nzD8RXpNtbxWltFbwIEiiQIi
jsAMAVLRRRRRRRRRRRRRRRRWR4n1W50bQp72zhimuFaNI0lYhSWcLyR9a46fx/rJ1K602Swj
VITJaSzwh/kmERYurHjbnoOuOaTTfiHqANvHLaJLaxqkEs0m5XL+SHaQvjaFyenXHNNh+I+t
Sw3IXTraWWMwOjxpLt8uTdk7Dhnxt6jrnOKlj+J88t7bJBZQz2/+jrcyQl2G6U4+Q4wAv+1g
nkVra14ivtP8VGws2imkmht44opmKxxu7yfO2Bnovb2qra+N9YvJ2gh0/T1exUm/M12UQkSt
H+6bGMZUnLeoFS/DzxPfeIbSaK65azyskkpxJKxdsMABjZgYB7kH0rtaKKKKKKKKKKKKKKKK
KKKKKKK5Kx8dwah4nk0eCyZo0meDzxcJu3JncfLzuCggjdXRnUrBWKte24YHBBlXI/WsaHUb
IeM7x2u7cL/Z8IB81f78nvW7HeW0rBYriJ2YZAVwSR61NRXL+NPGJ8JrZ7bIXb3bOAGm8sKF
XceQpyfQYrOh+IxuYlv4tJf+zPOit5JzcKHWWRVIATuBuAJyOvtVGf4qzW8ciyaIqXUV0beS
Jrz5VwhfO4KcngjGMZ7mtCy+Ict7Kk0eiuNOzbrLctcrlGmAKgLjnBYA81XtfijDPczQSaYR
tMZjMVyJNytKsXzEDAILA4BP1rSuvG/2RpRJZoEiN4NzThR+42gZJHG4tj2rFb4qulkP+JYj
3bXRgRUaUxsBGHJ/1e/uB9336Vdi+IlyU+0yaBMtobH7aHFwu/bnaV2EDndx196k1Tx/caHB
H/auhPZ3EnmFUlvIxGQqhuH7k5xjGcg119lcpe2MF3H9yeNZF5zwRn+tR6hqthpNs1zqF5Da
wqMl5XCj/wCvWf4c8Wab4qjuptKMskFtL5RldNqu2Mnb3x0/OtrPtRn2oz7UZozRmkDgk+1L
n2oz7UZoLBVLE4AGSTWXJqugajp0s0l9Y3FlGwMrmZGjQg5GTnA5H6VE9l4ZudRW9eHTpLye
MlZTsLyLjBIPcYyM+lVzYeEPO/tQQ6UTGnk+fuTaoxjaTnH3ePXFR/8ACP8AgtbRLP7Hpix3
m1kUOoMuD8pU5ycZOMHvU50Lwv8AaLa6Nlp4ksk/cv8AKPLVTj6fKfXoamvtO8PavNcW15FZ
3E8karMhYeZtU5XODkYJJz71Sk0rwWYrF3i0sR2RK2xMqhVIOSOvPPPOeeauWkHh7TJDJamy
ge2tyrFJQCkRO7nn7uTnJ9fetGw1Gy1S3+02F3DdQk48yFw659MirNFFFFFFFFFFFFFFFFFF
FFFFcPa+AZ7fW0m+02f2KLUn1BGSAi53NuOwvnBXLfkMV0knhjw/LI0kmh6c7sSWZrVCSe5J
xXP2nhrQz431CJ9H04w/YYGjj+yrhTvkBOMYzwOa6O18P6NY3K3NnpVnbzKCBJFAqsAevIFa
NFZGu+GdM8RNbNqMcrG1YtEYpmjIyMEZUjgiqP8AwgHhsXKTLpqqqKF8kSMImIG1WKZwWA4y
eahb4ceHWtxD5NyNsgkWUXcnmAhSoAbOdoU4xUVn8ONIttbmv3DPB+5+zWiuyxReWuBkZw5z
yCelSD4b+GlikjFtcBZE8sD7VJ8i7w4C8/KAy5GPes+Xwh4LXVbazaOSKcyvEY5pZWF2WiJd
cscHjDEjutbSeBPDiI6rp5HmSCRn+0Sb9wBGd27I4OOtWT4U0dofI+yDyfshs/L3tt8rOcde
ue/WqFt8PtAh3eZBPdEq6lrq4aUneoUnnuFGAewrorW2isrSK1gXZFCgjjX0UDAFc34u+Hui
eMcS3yyxXaLtS4iflR6YPBHNUvBvgE+HdF1HQ9SlivrK4uBLGy7kYjA4YA8HKjoa6S58PaXd
2NvY3Ftvt7bBiTzHG3HuDk/jTrnQ9Pu9Rt9Qnt91zbDET+Yw2/gDg/iKWDQ7C21KbUYoSLqf
/WOZGOfwJwOnYUyPw/psNpcWscDCG6GJV85zu/EnI/Ck/wCEe006UumeS/2VTuCee+Qf97Of
1p11oNheS20s0cha0AEJWd1249QDz075pw0PTRq51f7MBekYMu5umMdM46e1Nt9A0y0e6eC2
2NeZ88+Yx35znqeOp6UyPw1pMWlyaYlpizkbc8XmOcnjvnPYd6dceHtLurW2tZ7bfDa/6lfM
cbfxByfxq5dwtNYzwpjdJGyrnpkjFeW6N8PPEGnxw3M1vYTPa+Rizmn3rOYw4PzBQFHz5AIP
I61ak8Ba00mnbbXTomgkadpYpMCMkufKxjJUbgFII6nINZdp4K13Q0s5prC3uGa7tEWzModZ
DGj7mZgoCrzxkH3NWbr4f+Jmht4447J9ioyEShRARM0hTO0llG4BcFasah4b8UpZ30UWk20i
NbXUKut2NzCSbzQdu3rgYx61C3gnxHqOoXN6scFoL5bgrIJAuxZY8KCu3du7Nkn2FWtP+Hd0
tvm6061DG+tJPLlmEu2OPhyMIByOMY5AGadqPgrVrqC80+DRtNXfJKY9TE22Uq7hlG0DouOQ
cghQBius8I6DceH7W+t7m5FyZrxpll2qpYFVHIUAA5B6V0FFFFFFFFFFFFFFFFFFFFFFFFMk
DmNvLID4O3d0z2zXj+j/ABB8Q33xCOlnR7ZL+XZZzZZikSxsxd8deh457V7HRRRRRWZ4ktr2
98OX9rpspivJoHSFw23DEcc9vrXmsHhHxK+l3FvaQ3dpLLcRSW0k8yxm12xkSNhGP3+F985N
alr4X1Aa3pOpS6GI4be7iY25mV2gX7OEJznna4B9TjNekUtFFFJS0UUUUUUUUUUlFFFFGKKK
WiiiiiiiiiiiiiiiiiiiiiiiiiuSsfC9jafEfUNdQAzz2kfy7fusSQzfUhB+tdbRRRRRRSUU
tFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFf/Z</binary>
 <binary id="Any2FbImgLoader152" content-type="image/jpeg">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
6VXZ16OAoCn8sVmCw8Lo8TLHpyndLHGQ6jJk5kUc9T3FSXGk+Hb6X+z57ezlkjhRPILDekan
KDGcgA8iqui2PheDxDdf2Ta263yxCSWSI7lUOxBAOSASUOQMVmy2+manq09mt3OlrqF8Hkia
H93PLABvRXz0bC59fLbFamp614f07WZ5dRQR31pabld4yWeJjysf947sAgc5IqykmjeF/DLX
Ji+w6dAhmMbgkx7udoBzzk4wPoKuaOlkmlQNp0IhtZV82NQMcP8ANnHvmr1FFFITiloooooo
oooooooooooooooooooooooooooooooooooorL8RHWBo040GOB9QYARee2FXnlvqO1chb+H/
ABDY2q3FtpFubya3ntbpJ77eXMhDeeX2jJ3A5XHTGK6zTbK5s9DGlOgYW1skEUxk3GXCAEkY
45+tcJffDq+WxsI7Wxt3xpotJ4UlWMJLnJkyVOc9yMNwOaJ/Auv3OuNcFYIh50p+0xyjlHhM
anG3eWBOTlsegro/CGh32natdXdzpVlp0b2cFuqWsgbeyFtznAHXI/DGazNOtpXttA0QrKbz
TdWlkndlI2qm8ls9MMJFA/3var3iTw3q+u60moxPBbPpIEmmZAbzpeC3mccLxtAHrmrPi3w1
qHirR7dUuxZTwo7tbMiyxySFCACT6EnB/HtW1oFncadoNjZXcqyz28CRu6jAJAA4/lWjRRRR
RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRWV4lYR6FcSPqp0uNNplugBuRMjcF9
CRwPc1yFzceJYPBq3sV9cW0f25WQXa7rprdpECKTxtJyTzzggV305lFtIbcI0wU7A54LY4B9
s157cfE+8ks0m07S1kPmw2su5XYpcMGZ0CqMttC9ueaYfilqEr2gtND8wGONrsYc7CzlCMgY
TG0/e+lXJ/HOsQRT3TWNj9l2XjQDe2/Fu+0lu3PPSmWPxMmub+aSTSpI9Jjk2C4WN5HwY90b
FVGcNzg/Sqdl8VNQvbuxC6KfszmBbllRztMo6q33QBkcHk8+lWm+KBFvbyPp5izCZbiSVHWN
QJUTKMR8wwxJI9qgvPijf5aKx0NmmaeUQrIjsWiRFYMVUZBbePYDrXe6LqP9raLZ6iYWgNzC
shjY5K5GcVeooooooooooooooooooooooooooooooooooooooooooooooqnqek2Gs2bWepWs
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</binary>
 <binary id="Any2FbImgLoader153" content-type="image/jpeg">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
iiiiiiiiiiiiiiiimkfMKdRRRRRRRX//2Q==</binary>
 <binary id="Any2FbImgLoader154" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader157" content-type="image/jpeg">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
UUUUUUUUUUUV/9k=</binary>
 <binary id="Any2FbImgLoader159" content-type="image/jpeg">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
FGKMc5paKKKKKKKKKKKK/9k=</binary>
 <binary id="Any2FbImgLoader161" content-type="image/jpeg">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
2Q==</binary>
 <binary id="Any2FbImgLoader163" content-type="image/jpeg">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
RSYGMUYFLX//2Q==</binary>
 <binary id="Any2FbImgLoader164" content-type="image/jpeg">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
Fkxmv//Z</binary>
 <binary id="Any2FbImgLoader165" content-type="image/jpeg">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
2Q==</binary>
 <binary id="Any2FbImgLoader167" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader168" content-type="image/jpeg">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
JPJr/9k=</binary>
 <binary id="Any2FbImgLoader169" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader173" content-type="image/jpeg">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
0HSu9paKKKKKKKKKKKKKKKKKKKKKKKKKKKKK/9k=</binary>
 <binary id="Any2FbImgLoader174" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader177" content-type="image/jpeg">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
KKKKKKKKK//Z</binary>
 <binary id="Any2FbImgLoader179" content-type="image/jpeg">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
</binary>
 <binary id="Any2FbImgLoader180" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader183" content-type="image/jpeg">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
uO44GMn1NSUUUUUUUUUV/9k=</binary>
 <binary id="Any2FbImgLoader189" content-type="image/jpeg">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
NWn8X+GL2HwzBK2oWkkTKs21PvE9ycfd3V//2Q==</binary>
 <binary id="Any2FbImgLoader193" content-type="image/jpeg">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
ZaVaW04UqJIoVVsHqMgVpUUUUUUUUV//2Q==</binary>
 <binary id="Any2FbImgLoader194" content-type="image/jpeg">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
UV//2Q==</binary>
 <binary id="Any2FbImgLoader195" content-type="image/jpeg">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
PHy/Wv/Z</binary>
 <binary id="Any2FbImgLoader197" content-type="image/jpeg">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
XSv+QdH9W/8AQjX/2Q==</binary>
 <binary id="Any2FbImgLoader200" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader202" content-type="image/jpeg">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
iv/Z</binary>
 <binary id="Any2FbImgLoader204" content-type="image/jpeg">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
WJwOB1r/2Q==</binary>
 <binary id="Any2FbImgLoader206" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader207" content-type="image/jpeg">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
K3EUNxE8aeUu1GweQMcH3rpx0Ff/2Q==</binary>
 <binary id="Any2FbImgLoader211" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader215" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader220" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader223" content-type="image/jpeg">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
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUlf/2Q==</binary>
 <binary id="Any2FbImgLoader225" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader228" content-type="image/jpeg">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
a0jLFIIUjUsckgAAZ9+K/9k=</binary>
 <binary id="Any2FbImgLoader230" content-type="image/jpeg">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
X//Z</binary>
 <binary id="Any2FbImgLoader233" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader234" content-type="image/jpeg">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
KKKKKKK//9k=</binary>
 <binary id="Any2FbImgLoader239" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader241" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8l
JCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/wAALCAE2ALwBAREA/8QAHwAA
AQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR
BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RF
RkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ip
qrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/9oACAEB
AAA/APZqKKKKKKK828U+MdSs/Emo6Q1zbw2PkPHGUXMm8wlhkhso2enGMd81Xt/F2v6ba2Ol
XF5ZtNdQWbRX0kLCO2WRWz5mW+Y/JwcjJNNuPFnijVdN1CKyu9OtzY2M8s90kbN5+x2UNEc/
KCBnPODXo2ju8uj2ckk6XDtAhaVOjnA5HJq7RRRRRRRRRRRRRRRRRRRVWTTbGa4NxJaW7zFd
pkaJSxHTGcZxSvp1nKhjktIHRlCFWjUgqOgxjoO1KthaImxLaFV2eXgRgDZ/d+ntT7e3htYE
gt41iijUKiIMKo9AKlrlo/FmsXsS3Gm+EL25tXGUle6hj3D1wWzinf8ACReJ/wDoSLr/AMGF
v/8AFUf8JF4n/wChIuv/AAYW/wD8VUq+INeO3d4OvVyPmxdwHB9Pvc1P/bup9P8AhFtR/wC/
sH/xymN4i1JMZ8KaqcjPyvAf/alM/wCEm1H/AKFLV/zg/wDjlH/CTaj/ANClrH5wf/HKP+Em
1D/oUtY/OD/45TB4i19pvl8G3vkk8O13AGx/u7v61Nb+KonaaK60+6s54HCPFIUY8qrZBViM
YYVvUUUUUUUVxk3i+/t9f1LTLXTm1K4S4K28IkWIJGsUbOSx934781HZfEqLULhHtdJmawEk
EUt00qgxvLjaNnU4PBq9oPjRta1KC2bSZrWG8t3ubSdpVYSxqwGSBypOQceldTTJn8uGR842
qTn8KxfBLiXwZpMgOQ9srdMda3aKKKKKKKK4XU/+Rg1P/rsn/omOu6ooooooorE1Pwho+rSS
TTwyxzySeYZ4J3jkztCHBB4BVQCOhxSx+EtFgjaOC08pGkgkKoxxmHGz8sD61i+FfA0+ha9J
qd1erKEheG3hi3hEVm3HhiQvQcLxXTrrOlvqJ05dRtmvAOYBKpcfhnNT3XNpN/1zb+VcR4U8
Q6jZ+EtJt7fwtql4iWqDzozEqtx2DODitYeKtWyP+KM1fHc74OP/AB+pk8Tag0gV/CmropXJ
b90cH0xv/Wnr4kvCfm8Mauo3Y+7EePX7/wDnNPHiOcjP/CO6xz/0yj/+LqM+KJVYr/wjet5H
pboR+e+k/wCErk/6FrXf/AZf/i6P+Erf/oWtd/8AAVf/AIuj/hK3/wCha13/AMBV/wDi6Yvi
nUGlIHhLWBH2ciIE/hvyKwZLlr3V9SmktprQm4UeVcABhiKPngkfrXoNFFFFNO7cMDjvTqKK
KQnFc74Jt4G8NW935atLcvLO8jKNzM0jEkmt284sp/8Arm38qy/B0bR+D9IRjkizi5K7f4R2
raoooooorP12a+ttEu5tN8n7VHEWjM+dgwMknHXjPFcbfarrM/h/Qry21qVNSvbKJ4LK3hQt
czsoLM+RxGAecYx69KlujJJruq+auHWeMHHQnyIun513tFFFFFFFFFI3SsHwMCPBmmggg+Ue
v+8a2Lz/AI8p/wDrm38q47w/4sktvDumwx+G9fuglrGplW2XBIUdCWGR71o/8Jncf9Cj4i/8
Bo//AIuo/wDhOWNytt/wjOvLMyb/ACzapnbnG77/AEzU8Xi6aQnf4Z16LHdrRTn8mqT/AISr
by2h63jGTixJ/Dg1Fb+OLK7gW4ttK1qaJ87XTT3IOCQf1BqT/hMIf+gJrv8A4LpKiufHVjZQ
Ge60rWoYgQC76e4GScAfiSBTpfFdtPE8Umha6yOpVh/Z0nIPBrn7uLQb1rYS+AtemWzhWC3k
EJTbGOgH7wHH1pRdrfapqcqQXFsBcIvlXCbHXEMfavQ6KKKKKKKKKQ1z3gSOSLwlarKcnzJi
vOcKZXKj8sV0DKGQqcEEY5Gax/B/HhLTR2EAFYfgvxRq+oNa2mq28bLcrcPb3aS5aQRybSGT
Ax1HQnpW3OT/AMJzZjgA6dNnnk/vI/8AP51T8YeL28MPaQw2Ju5roSMq7ioCoAW6AnJzgcfW
tvSdQTVdJtdQjR40uYlkCPwy5GcGszwWCPDaBhjFzc4HTA898VKl5cHxtLYmU/Zl05JRH23m
RgT+QFM8akr4Q1BgMkIpH/fQ5rcHSsjw7dXF3BfPcSGTZfzxxk9kVyAPwxXIa7dta+JtURHZ
A0qMduOf3MfNej0ySRIY2kkYKiAsxPYDqa5NviNpU8VrJpsN1eLPeR2xxCy4VycSDI+ZflPT
0qQ/ETQ/MMgnYWaRF2maCQEkOqDaNvzDLYyDUs/xB0GG2SZGu52ZnVoYrWQyJsALllIyoAI6
+tXbnxXo1nodtrNxeeXaXYUwNsJaQsMqAoGST6VRvPFl1CNKePQ7xItQulgd7kCPyFLYBYZJ
yew/PFVb7xhqumayba80dBbSLObcR3G6dhEpbey4wEbGAc8ZGai0P4iJqFhdXl1Yu0Vs8e+X
TybhEV13AngNlejYB5rq9N1Oy1eyjvdPuUubeQZSWM5B9ayPFfiK50GGEW9i0guGKNdyEiC1
9GkIBOPw/EVpaHp6aVotnYxzecsMSr5v/PQ9S34nJ/Gr9cN4c8XwWXhyxtv7J1m6aOPaz2+n
u6ggnv0P4VJZ67o1gYDa+EteiNsrrERpknyBzuYDnueajk8XQP4ss7k6PrSYspo/KbTn8zl4
znH93jr/AI1LrmpaDr0cKanoGuSeWzbGSxmjZOORuXBw2MY7960LTxTpFpYQxQafqcEEaBUj
/s2b5AOMfd7Vl+FfFun22gossOosWubhgVsJmBzM56hfcfStAeJ9CGotqAs9T+0tEIS/9mz/
AHASQPu+pNZ/i7xfp1z4WvoYodQV3QAGTT5lX7w6krgVsr410okDyNTGe502f/4moLbxTpls
8kdpo2sCOSUu0iabLtdmOWbpnr14rjdWvF1PxDqdzFFPCpmVQtxEYm4iQZ2nnFes1HNH5sTx
7iu5Su5eoz3FcRZfDaSxDyQa5Ilz9pinR1t1VB5eeqDgswY5PGat3PgBLnTbKyOouotbYQbh
GPm/epJnr/sY/Gs3xJ4P1tLu5vNAlLXV9JOZJTKqeWkiouwhgQy/JnPBHauqs/Dtivhmz0W+
tYbqG3gSMpIu5cqMZGfx5pj+GbVdMstPt5ZYobO6juIw7mQ/K27bljnHb2rJbwFPPqWp3N3r
0txDqitHPE1ugYRkEKiv1ULnt1xzT7H4f2yJONWvpdQaYRoQi/Z0McYOxSseN3U5z149K6e0
tLaxtktrSCOCGMYWONQqr9AKkkiSaNo5FDo4KspGQQeoNYfgiRJPCNisblliVoRntsdlx+GM
VvVh+F5hD4MsZmDMI7bcQoyTjPQetZ/hzxZqGrX9nBe2EEEWoWRvLZ4JzIQoIG1xgYPzDp71
pzj/AIray/7B8/8A6MirUu7qCxs5ru5fZDAheRsE4UDJPFPikSaJJYzlHAZT6g1ieCwR4cTJ
B/0m5PH/AF3et6sDxz/yJuo/7i/+hrVvxBrA0HSjqLwmWKORBMd+3y0LAF/oM5rF8MePIPFO
om1s7SRBGsjzM5OUUMBGen8YOR9KxvEBkHiXUfLgZx5iZOAf+WSV6PRRRSYopaKKKK5n4ef8
ifB/18XP/o+Sul7VxPhvxhpVp4fsrRkvpHih2uYbGV1BGeMhcE1Y0u98IaRczz6dYTWss3Ej
pp043DOcD5eBnsOKjuPFWlDxjaTmW5Ea2EykGymByXjPTbntWlP4v8PSQtHcPO0TjayvYzEM
D2I2fWgeOPDoAVbmcAcACym4/wDHKxvCXjHQ7TQVhmuZg/2m4bAtZW4MzkchfQitoeOfDxOB
dT/+Ac3/AMRWR4y8VaLd+Er+GG6dnZVwDBIM/Mvqtat94j8NajZS2V3cGWC4QpIjW8uGU8Ef
dqtp+r+EdLmllsIpI3eOOOR4rKY5VBtQZ29hxXOXmoW2p63qV1aQSTxNMgDtGyHIij4wQDXp
1FFFFFFFFFFc74D8seErYRDA82fPJ+95z5/XNdDWF4ZnW18E2dxICUitS7BRk4GTxVHwz4sv
tYvreG9s7WGO+s/ttqbecyMqZA2yAgYPzDpx1rQmZv8AhPLNc/L/AGbMR9fMj/8ArVe1rU49
F0W81OVDIlrC0hQEAtgdAT607S7u5vtOhubqyaylkGTA0iuVHbkcdKzvBhU+G49v/PxcZ+vn
PmrK6nMfFUmlbU8lbJbgN/FuLlcfTAqr43bZ4O1E/wCwo/8AHhWveXcNhZT3lw22G3jaSQgZ
wqjJ/lWD4d8T3Wua7fWsmnT2VvDbQzRLcqBI+/dk8EjHA9+DXM+Ilc+KNSIaUAyR/c6f6pK9
Loooooooooorn9MsNZ0vUJbdBZS6VJcSTK5dhMm8liuMYOGJ79K3+1cV4a8ZeHbLw5ZWt1qs
CTRR7HQbjtIJ4OB1p2l638P9Fnnm024s7WS4OZWjjfLe3Tgew4qKXxr4dbxnbXI1aMwpp8qE
7WwGMkZHbrgH8qvaj4u8Happ09hdavGYLhCkgXepIPvip08d+FIkWMaxCABhRtb/AArJ8HeM
fDsGhJBLq0CSm5uG2tkHBmdh29CDV1fFHg8a7Jqg8Q2vnG3W2ZTINuAxYfjyapeMvGXhu78K
X1vb63ZyyyKoVFlBJ+cVqX3i7wfqFjPZ3GvWJhuI2icCYDIYYP6GsrRNY8G6FdT3I8UNe3Fw
iRNLPIX+RM7VXauOM9qz57qHXdX1K+0q8E9s06qHRiBkRR5r0uiiuU1fxhc6fqV9FBp0c1rp
axPeyvPtfEh42LjnA55I9Kz5vH99ap9putNtIrWcXItXN0dzNE2PmG3gH2yenrUOn/EDVdTb
7Db6ZapqBnkQefI8UZVIw54I3AndjGPep7D4gz3Omy3c2nxR+W1ku0Sk588jdjjnHOMdcU7w
r8QJfEetrZPprQW9xHJJby7XHCNjDEgAkjn5ScdKqXk+tz2up3FrrN4Zor+5WKyhaMSSLHgK
E3DhRnc3XOB0rV8Ianeajqcz3F89zHNp1pchSAFR3DhtoxkA7Rwa66ik7VxMWuT6F4I0NrVb
YSXbpAJbpysMWdx3MRz2x9SKzJfihdC1FwlvpqLb25muFluSDORIUIgP8X3c8+orqZH3+PrN
h0bSZSP+/kdYs3xBuYvGMujfYrdoo5XiCCQ+edsXmb8Y27T065FW/AvjSfxa1yJre2QQxxSK
0EjMBvB+RtwB3DHOOOav+EEkTwsNgUSG4uSm4cZM0mM+1ZVrrviS4Os7otFSHS3CNdESiJmA
3SD1+UfrUOq3l/q3wrur/VbKC3nnjWRI4QcbN6lSc85I5xUkt7LDeyI8JlBOUYLgj6+/vS3V
neebahUDRKXy8bbCnp0444rNs42gu9QiZHVlnUHc27P7mPnNek0UVl3vhrRtRv47+90+Ge5i
27ZHHPByM9jg+tZ+m+BdDsLW4iltI7yS6aTzpp1yzh3LEegHIHGOgqdvBXhtrB7IaRbLDIwd
gq4JYDAbPXOD1qOw8EaHZwaestnHdT6fEkcNxKvz4Q5U8cZBq9Y+HNH02+kvrLT4YLiXO+RV
55OTj0yeTjrWcvgrTZ3vF1NV1CGa7e6hSWPaYGcfMAw5INXdN0JdO1m8vkmHlTwxQRW6xBFh
SPdgDHX7xrXppdFIDOoJ6ZNKelef2up+Hrvwbp2nXXiO3sJolViBJGeQT8rIwII9iPSq01h4
FmtLWzPiqH7NCuJY2mibzvn3k5IypJJztxkcVqP4q8OHxpb3K6zZeUmnSxmTzRtyZEOM+uAa
oXFj4Pvr2Vp/FkUljcXD3X2ITRhfNZSpYPjdjnpnrWh4e/4R3RbqS7k8VW99cNClujySRJsi
TO1cLjP1PWpvC/iXQLfQY45dYso3EszFXnUEZlcjgn3qISeEF8N3Ohr4mtlhunkeWUXce8l3
LNz+OPpSeMvE3h+XwffwW2s2Lv5ahUS4Uk4YdAD6VXl8b+HDMFXWrMhlyXaZTj3pl9408PhV
mi1q0O0lSVfdnIB6Y9e9V7G/t9UuL65tZUmiM6qGjORxFHxXpFFFFFFFFFFFcpZaTp2s+Jda
uNRtUuprS6jihMoyIlESMAvp8zE11R4Un2rB8IW1u3hTTm8mPLQgk7Bknmtr7NB/zxj/AO+B
R9mg/wCeMf8A3wKPstv/AM8I/wDvgU37Ha5z9niyf9gUh0+zYktaQEnqTGv+FN/s2w/58rf/
AL9L/hS/2bYf8+Vv/wB+l/wo/s6x/wCfO3/79L/hWD4rvr3QbH7Zp1jpgtYI3luJLo7Rxjai
hf4mJwD0rFeUzahdztB9maVopGhPBQmCMkH6dK9BopO1YVx4y0a21ZtNlnkEqv5bOIWMSyYz
sL4xux2qrD8QdBuLOa6ikumESq4Q2rq8iscBkBHzLnv0pj/EXQlsUu0F5KrLI7pHbMzQqjbW
ZwOgB4zWifFelKiu8zKrXQtctGRiQpv59Bt5zTdB8W6V4jkkTT5XLxqHKSIVLIfuuPVTioof
GWn3txcRaZb3mpLahvNltYd0asB9wMSMt7DNXtG8Qabr0cjWM5Z4SFmhdCkkLHsynkGrGpap
Y6PZteajdxWtupAMkrYGT0FZXhieLULnVdVtlJtL24VreUrjzlWNV3DPOMg49cV0Fcn4Q13S
IPDFlDNqdnDKA2YnuFDL87cEE5rbXxBorDK6vYkeouU/xpf7f0b/AKC9j/4Ep/jSf8JDon/Q
YsP/AAJT/Gj/AISHRP8AoMWH/gSn+NOGu6OemrWX/gQn+NO/tnS/+gladcf69evp1p39q6cR
kaha/wDf5f8AGj+1dNH/ADELX/v8v+Nc14qsNJ8RTWZk8UxWP2JzKsaSxMGbjDMrZBxjj61z
OuyJNrM5hvVvQixo1wrKfMYRqCTt4yfavVqKK5O78FvLfXEsWpSiwmuPtr2OxfnuMcHf1C5A
O31HWsu0+Hd7f6Daw67q8j3cVvFEgSFNkKKQxjYciQZABJ64FLN8N5LDQrqDR9WuI7uSCeNs
RRhZlf5thGMKM9CMYBNXX8AR3k6SXmo3BtWcTyWIVdnm+V5ZO7GcY7VY8JeBbTwpczTw3LTv
LCkP+pSMBV6E7QMt6k9avTeDtGku5ruKGW0luEZJjaTNCJQepYKQCffrV7StF03RLcwabaR2
6Ny20fM59WY8sfc1ant4bmIxXEKSxnqsihgfwNYnhu3isb7WbG2UR2sN0pihXhY90aMQo7DJ
Jx71vVwGnW72/gCyvLCz08TEM9xPPaGZgu5skIo3O3QdaqXXiG5h0TSdbXSdH+yXYiWWMWrM
S7Ptf5x8sYA/vZ54roJ9L01vHdshsLUq2mTEoYFx/rI+elZraxoJ8XSaauj6UmmW0EzXF28C
f62PaWC+yhuTjr06Va8Jy6b4iOovP4e063SC5CQJ9nQuYyisrN6E56dulZHh7w7o93YXCXOm
6e5kvp9rGBfmCyvjqOBxirdr4P0M3hU6HprRgH71uvPX/P8AnjC8W+HtJs9OD2+jWcDxzwBZ
IbcDGZV4J/P/AD16O88OaMh2xaLY7nJyVtlwRj6VLHoukR2ASTTbMEbtyi3XPXPpXJzW0Nlq
uoQ2sSRRecrBUQIvMSdAMfnXsFFFFFFFFFFFcqmuafofifU7bUpHt2vZY5LdjE5SQbFThgMZ
BHQ11NcVo1hZah4O0dZ9UexuLcNJFNbzhHUksCOeCMHBBFObwf4cMMFsurzJapGkc1uLtdlw
FcuC49dxJJGM5q893aN4+tnW6gKLpcqkiVeD5qe9EvhHwpPqa6h9ist4SRZFAXbJ5mMlvU/4
mreieHdD8PT3c2lww2/2twzqhAAwMAD0Hf6k1y/haZBp8wFyi77y4DszDj98/v0wauQ3kkty
qCVVZdwA3jkd+n+en45PjCUR6I8ZK83FuSM7i371Oc/4V0OoXe1I5VdSN7BhuAyCOM1UubyI
Wp23MEDEhWBkUbj9D61zUkbTalfMjo4EqDcHBBPlJ05r1yiiiiiiiiiiufl1HWbzXbmw0qOz
WCy8sTy3QclmYbsKFPZcdfWt/tXGeDvCnhyfwzaXUuiWUs06l5JJoFdmbccnJFbn/CIeGv8A
oX9M/wDARP8ACkbwf4ZbGdA07g5GLVBz+VRzeCfC06lZNAsCDnpAo6/Som+H/hF2LN4fssng
/u6b/wAK78H/APQvWXP/AEzpP+Fd+Dv+hesv++KD8O/B/wD0L1l/3xXONb/DaPz3l8PpHBCJ
Ck7Wp2T7DhhGc/MQePftUyTeCraBbe28Hb7sSmM2LWCecuFDlju4xtIOc98Vj3cthHqNxJpE
C21nP5U0aQjyxhoYznaOh5r1qiiiiiiiiiisXRv+Q5r3/X1H/wCiUrZPSsTwcQPCenAkA+Tn
9TW2CGGQcj2ozjrRS0hOBmgHNBrzlvAGozX12XhtxbItybaFruVopGlOQQnWLHfBPPIpp8B6
w1nJcZRr6e5MhE2oSmSJPL2DEygE+pGMEcds1RmhbQLltKAim+yRQRFypOSsEYP8s/jXq9FF
FFFFFFFFYujf8hzXv+vqP/0SlbNcR4Q8IaFdeGbK6udNilnlDO7uzEklj78D26Vtt4L8OHAG
j24A6AAj+RqFvh/4Wd1dtJTcuMYlkA49t2DTD8OvChJJ0kc/9PEv/wAVR/wrnwn/ANAn/wAm
Jf8A4qgfDrwoOmlf+TEv/wAVU8fgfw9C5eKykRiMFlupgcf99VHJ4E8PyXH2hra4EvQOLybI
+h3Vzn27waLi8jmg1e3js0lbznuZtkwjba+zDknB45AqpN/whTWf2mTw9qc1355ga3ubh1m3
Km85LSYxtwevfFUHg0+C8nOkRC2s5vKmjRmYnDwxtznJzzXsFFFJVG71zS7G9hsrq/t4bm4O
IonkAZz2wKztJ8ceH9WsJLuPUYIvIj8y4jkkAaAZx81STeNfDUFjHeya1ZiCUMY3EoO/HUD3
5FNm8WWh8P2OsWNvLfR6hJHHBHGVDFn4AOTgYOc89qhvvG1ha3Oq20FvNeTaTbLPcpCV4yeV
BJ6gcmuhhlE0EcqggOoYA+4pxrC8OSrdahrl3GQYZL7y42HRtkaKx/76BH4Vu1i+Dcf8Ijp2
Fx+66Yx3NbdFFFFFIa81Hw81b7VqLRmygeaOdDeK7mS9Ejbgsq9FAHGRSp8N7uSzUtZ6XCn2
lpjpLvI9qmYwm4MOS3GemOarz2H9nXktjOY5pLZIImkbcNxWCMZ+nFepUUUlcX4g8G6hqni+
DV7O4trVVWIPNl/NwjEldv3WBz1PSqlz8Obo2tiLa9tklsrQxbWhOyV/OWUFv9klcH61PY+B
r067/bOpTWQnlE5kgtoz5aM6Ig2564CnJ4yTT7yxv9G8H6DbXcIuJdNvLcSfYI2fKISAwXGc
4wT75rNvfBTeHbLWb2zv9Qvbe402SFLZlEkjSuzHoqgkZb68nNeg2SlbC3VgQwiUEHscVT8Q
aKmv6U+nveXNorkHzLaTa3HY+qnuO9VfCc5/s2XT5IIIJtNna1kS3j2RnGCrKvYMrKfqTW5X
E+HfBukaj4ZsJrr7bI7xluL6ZQuScgBWAA9qv/8ACu/Dv9y//wDBlcf/ABdH/Cu/Dv8Acv8A
/wAGVx/8XUtv4E0S1k8y3bUY3xjK6lcdP++6sHwpYEf8fWqf+DKf/wCLoPhSx/5+9VH/AHE5
/wD4uj/hFLH/AJ+9V/8ABnP/APF1GfCFlu3f2jrHPb+05sf+hVzMk/h+K+uLFrnxb9qgRpPK
8653SKpwSnPIqm8nhCeym1KSw8U3McLsk8plud0ZVQTu+cYx0/CkgjsbWe4/s5JRbTmKZBci
SSQBoYzgliT36dq9SoooooopKKWisTRQq69r4AAJuY2Pv+5Tn9K2qx/CH/IqacO4hwfrk1s0
UUUUUVz9ppt/b6lrmqvGkl3ckJZqW4EaJ8gJ7ZYsTVEeFr4+DdP0QyoZGmjk1J2Y/vQW3ygH
uS3H0rH10OniTUsPDGpkjwHYqceVHXo1FFFFFFFFFFYWjjHibxBz1lg75/5ZCt2uH0Dwja6l
olvcT6pq6l2kIjhv3jRPnbgBSOK0V8B6erBl1XXAR/1FJj/M1Mng+GMYi1rW0yef9Pds/nmn
v4UVumu62n0vT/UUz/hEf+pi17/wN/8AsaP+ER/6mLXv/A3/AOxo/wCER/6mLXv/AAN/+xo/
4RH/AKmLXv8AwN/+xrH2aH9vmsf+Ez1kTwBzIGvSFXaMt8xXBIzyM8VUkl8NyWX27/hKvEVw
iTCJUSeXeXI3ABAoJ456dKxNXt4hqs0ltqF5cwzLHLHLNLuZlaNSOSM9K9foooooooooornd
OuYbTxdrcNxKkTTiCaLewXeuzaceuCpz9RXRVi+Ef+RZtP8Agf8A6G1bNLRRSZooNeSzeCfE
EsepadBBcRGc3bS3D3AaC4VzujVEz8rZ6nA75zSzeCtWuIoLttNv7iyt7jKaXcahi4x5WxmE
oPA3YIGeg98U2/t7mznitr05uobaBJstu+YRIDz3+teuUUUUUUUUUUVz2taho41OKyvNJl1K
5VBIBFY+f5Kk4BJx8uSD+VdAOg7Vx/hvQri60O3m/t7U4UZnIihaNVUb24Hyk1of8Ivd4/5G
nWf+/kX/AMRR/wAItd5/5GrWv+/kX/xFH/CL3f8A0NWtf99xf/EUf8Ivef8AQ1az/wB9xf8A
xFOXw1eKQf8AhKNXODnlov8A4in/APCP33bxLqY/CL/4imN4d1IgbfFWpgjqdkJz/wCOUP4d
1Mn5PFepqPTZCf8A2Ss3U7e30iSBdV8eahayXB2xh5IU3fhs/WuZ1y2ew1y7gku5r45Q+dcE
FuUXj5QBivV6KKKKKKKKKKwNG2t4q8Qvgble3TPsIgQPzY/nW/WL4R/5Fm0/4H/6G1bNFGaK
KWiiuL+IFpc3llJaW2kXk0lzbPGl5ZKjOrZ4ifdyI27kHtXO68kyaxItwFE6xQiUL0DeUmQP
bNerUUUUUUUUUUVhaL/yMniDK4/fQ856/ulrdri/Dujavc6JBLF4mu7WJmcpDFbQkIN7cZZS
TWn/AMI/rf8A0N+of+A1v/8AEUh8P6528YagP+3a3/8AiKcuh62p/wCRsvGHfdawf/E0j6J4
gP3fFtwuT3soT/SkfRtfjTcfGEyqq8lrKD8STisWXVXh0+O/b4hM1vLK0Mbx6fE+9lzuwApJ
AweRxSrqbyX9tYp8Qt890qvEq2ERBDDK5O3AJHQHk1PdTXlk94lz4+aNrCJZbkGwh/dK33Sf
l74qk+tRCyS9f4gXrRSOyKYtOj52jLHb5ZOACMnpWLqayRaxeebqD6lvaN0uJFVSymJCOFAH
6V63RRRUNxdQWqq08qxh3VFLHGWJwB9SalzRkUZo3CilrD0UZ8QeIG3A/wCkRDAHTEK/41uV
i+Ef+RYtP+B/+htW1RRRUc8MdxA8MqLJHICrowyGB6g1wEuka/pfh9bLStDRZpb26/ewGLfa
QO5wYwzAZYEY54xzVbUtD1VpNJ0/SdBurM2clvLBPJMjQEKBn7SAcsy44xnrxVePwX4itW1w
6jBDqUV9BC0zWkhjluXEpY4LHhgO2MEYAxUc/hfX7xY737Bqstuv2mO0tJL9Y7i2Vwmws+7l
dysduTgEdaNVimg1aeC6kD3ESQJM6jhnEEeT+desUUUVg+LbO9vrC0jsELSpfQSEg42BWyWP
sK4GHR/Eslp5McOtQzPAE1OSWdsSymdPmiOeMLv5GABRrsFzok09rez6qdLja6NlFHdkS7ti
FX3FgSikt1Jwe1dbLpeua54C0q3sdZewu2toWmmIJMo2DcpYfMM+o5rOk8J69NHYRafHFoU0
Abzb2G+lmP3iSAjcPu6/P0zXeQI8cEaSSGR1UBnIALHucCqOvzaxBpUkmh20FxegjbHO21SO
/wCPtxVDwX5D6TNcLNNNdz3DtetPH5cgm6FSv8OAAAPQDrXQ1xOg6Z4kudEt3s/EcVlBmTZE
LBZCBvbqS3P6Vpx6P4rRSG8WROfU6Yg/k1OGk+Kcf8jRAf8AuGL/APF0v9leKP8AoaIP/Bav
/wAXR/ZXij/oaIP/AAWr/wDF02TTfE0aM7+KrdVUZLHTVAA/77qo668IYrpfGumfZXODKbJN
pPYKd+OtLcWfi6IRInirTVkm4XzbADceuFw/NQqnjBzIq+K9DYx8uBZE7AOuf3nFPaXWoo0a
78baRbtJnYEtECsB3G6TJrk9TW4TXL8Xl6l/IZEInjjEaspiQjABP55r1uiiikxRgelVb7S9
P1NFS/sre6VGDKs0YcKfUZq0AFAAAAHQCloorC0M48Q+IUCgAXMTZHcmFP8ACt2sXwj/AMix
af8AA/8A0Nq2qKKKx/FktjB4W1CXUraW6tFizLBFndIMj5ePU4rzUf2Hc+Gp7y4iEM1/cuYx
Fpry21hIYwoTyyBuYqMbsfeJqSCDxKNe8JT6jok32S18uC1UTAhMxHe7r1DAgHnAAXHestra
VdJvrPSybhZIlk1O6k0oRTW/78F0bHMmQSSuTwvXmtvTdIg1XwvFpkenQvaX2rtGt4ln5Za2
A3s4Uj93u27eMDvUniG3SDxJfxQoscSNEqKOAFEMYAH5V6nRRRRRRRRRRWDo8yt4q8QRZOUe
3bGOOY//AK1b1cV4bt/FUujR/ZdS0y3tleQRKbV5HI3t947wM/StT7D4w/6Dmmf+C9v/AI5Q
bLxhjjW9L/8ABe//AMcpfsXi/H/Ia0wH/rwf/wCOU57XxaUbZqulBscZsX9P+ulVGXx1FEXl
vPDoCjLM0MwA9/vVDDeeMLm1N1b6p4Xltxk+aiSlBjryHxSSXnjCKZIJNU8LJLJjZGyyhmz0
wN/NI1/4uQSM+r+FFETbZCRKNh9D8/BpraprcduLi78V+G7ZGcRjZCWTceg3GQc+1c5q11/Z
2u30Wt3zS3TyI4e0t2VCvloBx82Dwe9erUUUUUUUUUUVh6QCPEuv5OcyQHr/ANMhW5WL4QAH
hi0wMff/APQ2raooorN8QC3OhXX2uwkv4NmZLaNdzSLkZAHf1x3xXl1zpOuXvhvV4dLs5J9L
ubmW4kbYbSW5/drtAjxwoYEYAG7b71fube8j8UQXkNtdf2rKLVBaS2iyQeWE+ZlmxldvzHOR
z2NUvC1vLpNnffaNLbUJLbTXa5W40/BScPlYwcfvcnJzye+eaXxH4Vk0rRdLtore4TNpcGea
zsxMZbmUKSjJj5FOCA3bGOK20WSO4mSeDypVWAPHnOxvs8WVyeuDXotFFFFFFFFFFYt7oV1L
q/8AaWn6vNYPIipPGsSSJKFJK5DDg8kZHatmuJ8MHxbLoMBtTo8Vtl/K81ZXcjeeWwQAfpmt
dU8Z/wAU+hnntDN0/wC+qWQeMAhMZ0RmA4VhMAT9c8flUDSeOw3yW/h5h6maYf8AstLI/joO
RFB4fdexaWZT+W003zPH3/Pr4d/7/wA//wATR5nj7/n18O/9/wCf/wCJpDL4+GP9E8OnP/Te
b/4mn+Z458wH7JoGzPI+0TZx352Uqv43PzGPQUJfBTfMcL67scn2wK59jf8A9ran/aiWv2j7
Qv8Ax7sdhXyo8fe5zXolFFJXMvp/9ueJdRjvLy8WCxESwwQTtEuWXcxO0gsfrXQ29ulrapbx
lyka7QXcs2Pcnk15jJrHi9fGF9E0tyoWScLbCFygt1jJRwdu3OcYO7JJxipU1XxBocls93fa
jcWIWyuryWaEyNGHDiVflXO3heMZFVJNX8VX2kzahDqeoW5itnmiVLcDzCbpkXIK54jxx9DX
deFW1BH1Wzv7q4u1tbzy4J7hQGdCiN2ABGSea6CikrF8G/8AIp2B4+ZC3HbLE4rbopKKWiii
uc8ewSz+DtQaK/lsvKiMheMgbgB90n0PfFYV8IzrN+WCsd8fJH/TGOo7jx9cwW80Sz2j38Oo
3cBtsfP5UayFCVzn+Fee9U08Va2PsMeoyQ3cki2d8hgjaLAk35jIB+b7o/wpp8e67stYYL3S
r2bUFt2WWOM7LNpJAhjkG7JPPHQ8Gur03V9cfw1eTfZYNS1S0uJYAkTeSk5RsZGc447eopPB
lxcX/wDad9fp5Goy3Kpc2m3H2bai7Vz/ABcHO7vmuopKWiiiikrhvCMni3/hGrRLS00mO3VW
8priaQu67jyQq8frWzu8af8APLQv+/k3+FRef45CuxsdDLL91RcSjd+O3imPdePFOBpWiScA
5F3Iv1H3P1oN747zxoejAY7379f+/dKL7x1jnQtHz/2EH/8AjdH2/wAdf9ALR/8AwYP/APG6
Pt/jr/oBaP8A+DB//jdH2/x1/wBALR//AAYP/wDG6ck3jS4UrPp2hwoRja9zJJn1HC1gxvqE
mpak2rQQW9z9oUGO3kLoF8qPHJA7e1d3/Z1n9oa5+ywec3DS+Uu4/U4zTxaW+5W8iPKABTsH
ygdMemKjTTbGPd5dnbpuYO22JRlhyCeOvvU6RJGGCIq7iScDGSe9c3bappum+KtbS9v7W1eQ
wMonlVCw8vGRk89K6SGaK4hSaGRJY3G5XRsqw9QR1rgNS1XVl8c3el6Xcw2cl1dQxGeSIzbV
Fuzn5SwGeAOMUvgnXtT1nxQ8l/fJsl0uKRbZRhWYO6s6jPH3cn6j0r0GiiikrG8HnPhPTv8A
riP5mtqiiiiikIzXnV79g0ePxT/b+p6hc2a3Ns7HzMPIWUERjbjCk8Y4471h6imkjwcFN1B9
rf7RNZoZHnhtslT5EbKceaBtx15JxXQyO01/dSyI8buYWZH+8pMEfB969Boooqnd6TpuoOr3
un2tyyjCtNCrkD8RViGGK3hWGGNY40GFRFACj0AHSkNvCZfN8pPMznftGc4x1+nFNjsrWGRZ
I7eJHVSoZUAIBOSAfTPap6KKKSuG8Oar4hTTEsLXTtNZbIeUXlvJAX684EXFacmq+K442c6b
o+FGTi9l/wDjVQL4l8RDYH0nTCWh87i+k6Z6f6rryKzj8QtXzkaFZY751B//AI1Sn4havtON
Css9s6g//wAapB8QtX76FZfhqD//ABqnf8LC1b/oA2f/AIMG/wDjVH/CwtW/6ANn/wCDBv8A
41Ub+O9QkBD+HbBg3JDXzHP/AJBq5F4k1d9Oe8tdD0tLdCcI124OR34ix1o0/TNT1eW91C8F
pBJNccRwyM4AVEXqVHPyntX/2Q==</binary>
 <binary id="Any2FbImgLoader243" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader244" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader245" content-type="image/jpeg">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
NXqWiiiiiiv/2Q==</binary>
 <binary id="Any2FbImgLoader246" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader247" content-type="image/jpeg">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
RRRRRRRX/9k=</binary>
 <binary id="Any2FbImgLoader248" content-type="image/jpeg">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
AMnNOoooooooooooooooooor/9k=</binary>
 <binary id="Any2FbImgLoader249" content-type="image/jpeg">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
JOe9dTRRRRRRRRRRRRRRRRRRRX//2Q==</binary>
 <binary id="Any2FbImgLoader250" content-type="image/jpeg">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
2Q==</binary>
 <binary id="Any2FbImgLoader252" content-type="image/jpeg">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
VbS7RNRtGvRb7VuJ5pFEgG7BlYjODjpiv//Z</binary>
 <binary id="Any2FbImgLoader253" content-type="image/jpeg">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</binary>
 <binary id="Any2FbImgLoader263" content-type="image/jpeg">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
KKKKKKKKK//Z</binary>
 <binary id="Any2FbImgLoader264" content-type="image/jpeg">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
iiv/2Q==</binary>
 <binary id="_.jpg" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEAYABgAAD/4QBmRXhpZgAASUkqAAgAAAAEABoBBQABAAAAPgAAABsB
BQABAAAARgAAACgBAwABAAAAAgAAADEBAgAQAAAATgAAAAAAAABgAAAAAQAAAGAAAAABAAAA
UGFpbnQuTkVUIHYzLjM1AP/bAEMADwoLDQsJDw0MDREQDxEWJRgWFBQWLSAiGyU1Lzg3NC80
MztCVUg7P1A/MzRKZEtQV1pfYF85R2hvZ1xuVV1fW//bAEMBEBERFhMWKxgYK1s9ND1bW1tb
W1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW//AABEIAVAB
8wMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMD
AgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZ
GiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImK
kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp
6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIE
BAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXx
FxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeI
iYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo
6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/APRKKKKACiiigCvf3ElraPLDbvcSDG2NOpJrn7vx
eLUeTJbxJdec0RDTAR8AEndj3A6da3dUgubnT5YbO4FvM4wspXO31rGHhmZIbby57ZZ7Utsb
yCVYMMNuGeTnnNABJ4qcHzI7EtbwrG1y/mD5N/TGOGx1zXSVzCeEWiiFtDeAWsqRrcK0eS5Q
54OeM1tXulxXsqySTXMZUYAimZB+QoAu0VixWn9n61aRw3Fy6TJIXWWZnBIAx1raoAKKKKAC
iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooo
oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoopsn+rb6GgCp/a+m5x/aFrn085
f8ai1S9uI7VJdPa2ZCx8yaV/kjUDrx1qPQrK1fRLNmtoizQrklBk8Ums6BFqlrDbJO1rDE+8
pEi4Y9sgjFAGK3jK5aSBVgiiOxHl8wNghmIyCB8oxzk+taNprl3NqEBeOH7FdTyQRbc7wVzy
e2DtNOufDAuWDPqFwC6LHcYVR5yqSQDgcde1TW3h2G21FLlbiZooneSK3JGxGYYJHf1/OgDY
ooooAKKKKACiiigAoqtqD3SWjGyWNpsgDzDhQM8k/QVz0/imWDSJpVWGe5EjpCyfKkiryX57
Dp7mgDqqbIxWNmVS7AEhQcZ9q525128SR54lhNtamFZ1IO59+MkHtjNdHkDqRQBhQXdzdeI7
YXNi9qFgkK73Vs8r0xW9WZMyt4jtcEHFvJ0+q1p0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUU
AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABR
RRQAUUUUAFFFFABRRVC81WOCX7Pbo1zdEcQx9vdj0UfWgC5LIkMbSSuqIoyWY4ArA1a5vNa0
+eHSS8EO3LXjZXdjnCDqc+tW49JkvHWbWJFnKnKW6cRJ/wDFH3P5VqSKBAygADaQB+FAGN4T
hvI9FsjPcpLEYFKr5eGH1OefyrcrA0PWtPi0azje5VWSJQ2VPBx64qbWL7dp6XVpqcdvbgnf
Mih2Y9lUHgkmgDZorkLjxNdQ3Gl2kzxRTM0f2wtgEBs4AH6n0q1p2pX76haST3AeC+lmQQbA
PKCZxz1J45zQB0tFFFABRRRQAUUUUAUtX0/+1NOkszcSwCTALxEZx6fjVAeFrKTThaXha62q
UjkdVDRg9lwOK3KKAMVvDNp5yGOWaOEeXvgQgI5T7pPGfT8qvXOlWN3MZbi1jkkPBZhzVymy
b/Lby8b8Hbu6Z96AMIWVtp/iiyW0gSISwS79o64K1v1zqjUB4psft5tyPJl2eSG/2eua6KgA
ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
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
GgC5TXdY0LuwVVGSScACqWNRuoom3JZHcS6gCRiOwz0H61IunW4uJpnDyPMMMJHLLj0APAFA
DG1WJlha1ilu1mOA8ABUepJzikaPU5jcK0sFvGwxC0YLOOepzx+FXlVUUKihVHAAGAKWgDNm
0O0u4Y01ENesild0p6574HFXLO0gsbVLa1jWKGMYVF6CpqKACiiigAooooAKKKKACiiigAoo
ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKOlFF
AGN4ZvbWXSraCO5ieYKcorgsOT2rYZQwwwBHoayPDNtbpo9tMkEayFSC4UAnk961pHWNGd2C
qoySTgAUALtBxwOOlLVZ9Rs43hR7qJWnAMQLj5/pVmgAooooAKKKKACiiigArn/GUt6NLaC1
gmaKRGM0kONyKB05Pf8AlXQUhGRg9KAPPrm4EsJe5WWO7Nnbmx3nnd3249T19q7K91Ga1mEc
em3VyNoO+Lbj6ckVeKISpKrlfu8dPpTqAOf/ALQnutf01X0+5tVHm5abbhvl6DBNdBWRqVxB
DrenNPLHGqrK2WYDBwB/U1bOoIbtIIoppd67vMRD5YHb5ulAFyms6oMswUe5qh5eo3cGJZRY
tv8A+WOJCV9MkYBqcada/bReNFuuAu0SMSSB7DoKAIjq9vJb+dZK96N+zFvg4P1JAqTF9JcO
CYorYphSMmQHH5DH41aVQowoAHoKWgChHpFuYkS7L3rI5dXuMMQfyxV4ADoKWigAooooAKKK
KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
ooooAKKKKACiiigAooooAKKKKACiikJwCT2oA5vRU1w6arwXNjs3vtR4W/vnuGpfEFnrl9o4
t9trJu3G4WJmTcAPlAznv1+lWfC1/b3OmRRRlzJhmbMbAZLEnkjHetugDhJLe8jtPInsJWnu
rKCKAopYRsvUE/w44NdygIRQxyQOTTqKACiiigAooooAKKKKACobm7t7RA9zPHCpOAXYAE1N
WF4puI7aO2P2Rp52ZljfymdYcjliADQBqvfWiSRI9zErzDMalxlx7etTkBlIIyDwa4Z7EQwN
bR29xOZ4bcWkphIwVPOTj5cHnBrqrybVUuNtnZ28sWB88kxU578YNAGRf+HNMbxHpjrbhNod
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
ada+SsjSMzs7yP1Zick1boAKKKKACiiigD//2Q==</binary>
</FictionBook>
