Операционные системы. Учебное пособие. Марапулец Ю.В. - 179 стр.

UptoLike

Составители: 

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