Составители:
мера буфера выигрывают те программы, которые часто отправляют сообщения или тре-
буют периодического дублирования буфера.
Параметр dwTimeout имеет значение только в том случае, если для установки со-
единения клиент вызывает функцию WaitNamedPipe(), которая изменяет период паузы,
заданный по умолчанию. По умолчанию принимается значение, установленное сервером
в качестве параметра dwTimeout функции CreateNamedPipe(), однако с помощью функ-
ции WaitNamedPipe() клиент может задать другое значение.
Параметр lpsa представляет собой указатель на структуру SECURI-
TY_ATTRIBUTES, которая вам уже знакома. Значения переменных этой структуры оп-
ределяют, какие операции можно выполнять с объектом, доступ к которому осуществля-
ется посредством нового дескриптора, и может ли новый дескриптор наследоваться
дочерним процессом. Как обычно, если в этом поле будет оставлено значение NULL,
результирующий дескриптор предоставит привилегии полного доступа и не станет на-
следоваться.
Следует отметить, что анонимные каналы имеют характеристики, которые описы-
вают состояние именованных каналов, заданное по умолчанию, а именно:
PIPE_TYPE_BYTE, PIPE_READMODE_BYTE, PIPE_WAIT, запрет асинхронного вво-
да/вывода и разрешение буферизации данных в сети.
При успешном выполнении функция CreateNamedPipe() возвращает соответст-
вующий дескриптор, при наличии ошибки – дескриптор 0xFFFFFFFF (т.е.
INVALID_HANDLE_VALUE). В приложениях, скомпилированных в среде Windows 98,
функция CreateNamedPipe() всегда возвращает сообщение об ошибке
(INVALID_HANDLE_VALUE).
Сервер, открывший именованный канал, должен ожидать, пока этот канал не будет
открыт на другом конце программой-клиентом. Клиент может открыть свой конец кана-
ла несколькими различными способами, однако чаще всего для этой цели используется
функция CreateFile(). Эта же функция применяется и для открытия файлов на диске. Она
также работает с именованными каналами, устройствами связи и буферами вво-
да/вывода символьного консольного окна. С указанным набором объектов работают ко-
манды ReadFile() и WriteFile(). Применение унифицированного набора API-функций
значительно упрощает задачу программирования. Описание данных функций нами было
рассмотрено ранее, но поскольку для работы в каналах используется определенный на-
бор флагов, рассмотрим функцию CreateFile() еще раз:
HANDLE CreateFile( LPCTSTR lpszName, //имя канала (или файла)
DWORD fdwAccess, //доступ для чтения/записи (должен
// соответствовать атрибутам канала)
DWORD fdwShareMode, //для каналов обычно значение этой
//переменной равно 0 (совместное
//использование не допускается)
LPSECURITY_ATTRIBUTES lpsa, //привилегии доступа
DWORD fdwCreate, //для каналов эта переменная должна иметь
//значение OPEN_EXISTING
DWORD fdwAttrsAndFlags, //режимы сквозной записи и перекрытия
HANDLE hTemplateFile ); //игнорируется при наличии флага
//OPEN_EXISTING
Имя канала должно соответствовать строковому значению, переданному сервером
функции CreateNamedPipe(). Если соединение между программой-сервером и програм-
мой-клиентом устанавливается по сети, в этой строке вместо точки (.) указывается сете-
вое имя серверного компьютера.
181
мера буфера выигрывают те программы, которые часто отправляют сообщения или тре- буют периодического дублирования буфера. Параметр dwTimeout имеет значение только в том случае, если для установки со- единения клиент вызывает функцию WaitNamedPipe(), которая изменяет период паузы, заданный по умолчанию. По умолчанию принимается значение, установленное сервером в качестве параметра dwTimeout функции CreateNamedPipe(), однако с помощью функ- ции WaitNamedPipe() клиент может задать другое значение. Параметр lpsa представляет собой указатель на структуру SECURI- TY_ATTRIBUTES, которая вам уже знакома. Значения переменных этой структуры оп- ределяют, какие операции можно выполнять с объектом, доступ к которому осуществля- ется посредством нового дескриптора, и может ли новый дескриптор наследоваться дочерним процессом. Как обычно, если в этом поле будет оставлено значение NULL, результирующий дескриптор предоставит привилегии полного доступа и не станет на- следоваться. Следует отметить, что анонимные каналы имеют характеристики, которые описы- вают состояние именованных каналов, заданное по умолчанию, а именно: PIPE_TYPE_BYTE, PIPE_READMODE_BYTE, PIPE_WAIT, запрет асинхронного вво- да/вывода и разрешение буферизации данных в сети. При успешном выполнении функция CreateNamedPipe() возвращает соответст- вующий дескриптор, при наличии ошибки – дескриптор 0xFFFFFFFF (т.е. INVALID_HANDLE_VALUE). В приложениях, скомпилированных в среде Windows 98, функция CreateNamedPipe() всегда возвращает сообщение об ошибке (INVALID_HANDLE_VALUE). Сервер, открывший именованный канал, должен ожидать, пока этот канал не будет открыт на другом конце программой-клиентом. Клиент может открыть свой конец кана- ла несколькими различными способами, однако чаще всего для этой цели используется функция CreateFile(). Эта же функция применяется и для открытия файлов на диске. Она также работает с именованными каналами, устройствами связи и буферами вво- да/вывода символьного консольного окна. С указанным набором объектов работают ко- манды ReadFile() и WriteFile(). Применение унифицированного набора API-функций значительно упрощает задачу программирования. Описание данных функций нами было рассмотрено ранее, но поскольку для работы в каналах используется определенный на- бор флагов, рассмотрим функцию CreateFile() еще раз: HANDLE CreateFile( LPCTSTR lpszName, //имя канала (или файла) DWORD fdwAccess, //доступ для чтения/записи (должен // соответствовать атрибутам канала) DWORD fdwShareMode, //для каналов обычно значение этой //переменной равно 0 (совместное //использование не допускается) LPSECURITY_ATTRIBUTES lpsa, //привилегии доступа DWORD fdwCreate, //для каналов эта переменная должна иметь //значение OPEN_EXISTING DWORD fdwAttrsAndFlags, //режимы сквозной записи и перекрытия HANDLE hTemplateFile ); //игнорируется при наличии флага //OPEN_EXISTING Имя канала должно соответствовать строковому значению, переданному сервером функции CreateNamedPipe(). Если соединение между программой-сервером и програм- мой-клиентом устанавливается по сети, в этой строке вместо точки (.) указывается сете- вое имя серверного компьютера. 181
Страницы
- « первая
- ‹ предыдущая
- …
- 177
- 178
- 179
- 180
- 181
- …
- следующая ›
- последняя »