Составители:
флаг ожидания. Флаги режима чтения и режима ввода тесно связаны друг с другом - бо-
лее удобно было бы назвать их соответственно флагом чтения и флагом записи. Они со-
вместно определяют принципы организации и интерпретации данных, передаваемых по
каналу. Оба флага допускают выбор между байтовым режимом и режимом сообщений.
К флагам ввода (режим записи) относятся PIPE_TYPE_BYTE и
PIPE_TYPE_MESSAGE, а к флагам режима чтения - PIPE_READMODE_BYTE и
PIPE_READMODE_MESSAGE.
В каналах, работающих в байтовом режиме, информация записывается и читается в
обычном двоичном виде и воспринимается просто как последовательность байтов.
Однако иногда бывает удобным разбить передаваемую по каналу информацию на
дискретные сообщения, в которых результат каждой операции записи соответствует от-
дельному сообщению. Каналы, работающие в режиме сообщений, автоматически и не-
заметно для пользователя предваряют каждое новое сообщение невидимым заголовком,
задающим длину сообщения. Заголовок обеспечивает автоматическую остановку опера-
ции чтения при достижении конца сообщения. Получатель читает сообщения одно за
другим точно в том виде, в котором они записывались в канал.
Так, если одна программа посылает другой длинную последовательность целых
чисел, ей целесообразно выбрать байтовый режим канала, поскольку для получателя не
имеет значения, сколько целых чисел будет передано в канал в течение одной операции
записи. Он просто поочередно читает целые числа из канала. Однако если Программа
посылает команды, написанные на языке сценариев, адресат должен получать эти ко-
манды целиком, в том виде, в котором они были записаны, чтобы правильно произвести
их Синтаксический анализ. Поскольку разные команды могут иметь различную длину,
обе программы должны использовать канал, работающий в режиме сообщений.
Режимы записи и чтения назначаются независимо друг от друга, однако не все
комбинации являются допустимыми. В частности, нельзя одновременно использовать
флаги PIPE_TYPE_BYTE и PIPE_READMODE_MESSAGE. Канал байтового типа осу-
ществляет запись информации, не разделяя сообщения заголовками, поэтому на прием-
ном конце канала эта информация не может быть разбита на отдельные сообщения. С
другой стороны, комбинация флагов PIPE_TYPE_MESSAGE и
PIPE_READMODE_BYTE является вполне допустимой. В этом случае программа-
отправитель записывает в канал сообщения, сопровождая их заголовками, однако полу-
чатель игнорирует эти заголовки, принимая данные в виде последовательности неразде-
ленных байтов (иными словами, получатель не воспринимает невидимые заголовки со-
общений).
Наряду с флагами режимов записи и чтения параметр fdwPipeMode может содер-
жать еще один флаг, устанавливающий для канала режим ожидания. Режим ожидания
определяет, что произойдет с каналом, если какие-то условия временно воспрепятству-
ют завершению команды. Например, при попытке прочитать информацию из пустого
канала некоторые команды должны забыть о незавершенной операции чтения и перейти
к выполнению следующих операторов, в то время как другие программы, прежде чем
продолжить работу, должны дождаться поступления считываемого сообщения.
По умолчанию каналы заставляют читающие потоки блокироваться и ожидать по-
ступления сообщения, однако вы можете предотвратить их блокировку, добавив в пара-
метр fdwPipeMode флаг PIPE_NOWAIT. По умолчанию указанный параметр содержит
флаг PIPE_WAIT. Режим ожидания влияет как на команды записи, так и на команды
чтения. Программа, пытающаяся записать информацию при заполненном буфере канала,
обычно блокируется до тех пор, пока другая программа не освободит место в буфере,
прочитав сообщение на другом конце канала. Режим ожидания также влияет и на работу
сервера, который пытается соединиться с клиентом. Если функция ConnectNamedPipe()
не обнаруживает клиента, готового к соединению, режим ожидания канала определяет,
179
флаг ожидания. Флаги режима чтения и режима ввода тесно связаны друг с другом - бо- лее удобно было бы назвать их соответственно флагом чтения и флагом записи. Они со- вместно определяют принципы организации и интерпретации данных, передаваемых по каналу. Оба флага допускают выбор между байтовым режимом и режимом сообщений. К флагам ввода (режим записи) относятся PIPE_TYPE_BYTE и PIPE_TYPE_MESSAGE, а к флагам режима чтения - PIPE_READMODE_BYTE и PIPE_READMODE_MESSAGE. В каналах, работающих в байтовом режиме, информация записывается и читается в обычном двоичном виде и воспринимается просто как последовательность байтов. Однако иногда бывает удобным разбить передаваемую по каналу информацию на дискретные сообщения, в которых результат каждой операции записи соответствует от- дельному сообщению. Каналы, работающие в режиме сообщений, автоматически и не- заметно для пользователя предваряют каждое новое сообщение невидимым заголовком, задающим длину сообщения. Заголовок обеспечивает автоматическую остановку опера- ции чтения при достижении конца сообщения. Получатель читает сообщения одно за другим точно в том виде, в котором они записывались в канал. Так, если одна программа посылает другой длинную последовательность целых чисел, ей целесообразно выбрать байтовый режим канала, поскольку для получателя не имеет значения, сколько целых чисел будет передано в канал в течение одной операции записи. Он просто поочередно читает целые числа из канала. Однако если Программа посылает команды, написанные на языке сценариев, адресат должен получать эти ко- манды целиком, в том виде, в котором они были записаны, чтобы правильно произвести их Синтаксический анализ. Поскольку разные команды могут иметь различную длину, обе программы должны использовать канал, работающий в режиме сообщений. Режимы записи и чтения назначаются независимо друг от друга, однако не все комбинации являются допустимыми. В частности, нельзя одновременно использовать флаги PIPE_TYPE_BYTE и PIPE_READMODE_MESSAGE. Канал байтового типа осу- ществляет запись информации, не разделяя сообщения заголовками, поэтому на прием- ном конце канала эта информация не может быть разбита на отдельные сообщения. С другой стороны, комбинация флагов PIPE_TYPE_MESSAGE и PIPE_READMODE_BYTE является вполне допустимой. В этом случае программа- отправитель записывает в канал сообщения, сопровождая их заголовками, однако полу- чатель игнорирует эти заголовки, принимая данные в виде последовательности неразде- ленных байтов (иными словами, получатель не воспринимает невидимые заголовки со- общений). Наряду с флагами режимов записи и чтения параметр fdwPipeMode может содер- жать еще один флаг, устанавливающий для канала режим ожидания. Режим ожидания определяет, что произойдет с каналом, если какие-то условия временно воспрепятству- ют завершению команды. Например, при попытке прочитать информацию из пустого канала некоторые команды должны забыть о незавершенной операции чтения и перейти к выполнению следующих операторов, в то время как другие программы, прежде чем продолжить работу, должны дождаться поступления считываемого сообщения. По умолчанию каналы заставляют читающие потоки блокироваться и ожидать по- ступления сообщения, однако вы можете предотвратить их блокировку, добавив в пара- метр fdwPipeMode флаг PIPE_NOWAIT. По умолчанию указанный параметр содержит флаг PIPE_WAIT. Режим ожидания влияет как на команды записи, так и на команды чтения. Программа, пытающаяся записать информацию при заполненном буфере канала, обычно блокируется до тех пор, пока другая программа не освободит место в буфере, прочитав сообщение на другом конце канала. Режим ожидания также влияет и на работу сервера, который пытается соединиться с клиентом. Если функция ConnectNamedPipe() не обнаруживает клиента, готового к соединению, режим ожидания канала определяет, 179
Страницы
- « первая
- ‹ предыдущая
- …
- 175
- 176
- 177
- 178
- 179
- …
- следующая ›
- последняя »