Составители:
мера буфера выигрывают те программы, которые часто отправляют сообщения или тре-
буют периодического дублирования буфера. 
Параметр 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
- …
- следующая ›
- последняя »
