Функции API
Ф. CreateNamedPipe (IpName:Pchar;dwOpenMode, dwPipeMode, nMaxInstances, NOutBufferSize, NinBufferSize, NdefaultTimeOut, lpsa: PSecurityAttributes):Thandle;
Dwopenmode- режим открытия. Флаги:
Pipe_access_duplex – двунаправленный обмен данными,
Pipe_access_inbound -только от клиента к серверу,
Pipe_acces_outbound – только от сервера к клиенту,
File_flag_write_through – запись данных, миную кэш,
File_flag_overlaped – режим отложенной операции ввода / вывода
Dwpipemode –режим работы канала. Флаги:
Pipe_type_byte – запись в режиме потока байт,
Pipe_type_message – запись в режиме потока сообщений,
Pipe_readmode_byte – чтение в режиме потока байт,
Pipe_readmode_message – чтение в режиме потока сообщений,
Pipe_wait -режим ожидания,
Pipe_nowait – режим без ожидания.
NMaxInstause – максимальное количество открываемых экземпляров канала (от 1 до pipe_unlimited_instances).
NOutBufferSize – размер буфера для записи.
NInBufferSize – размер буфера для чтения.
NdefaultTimeOut – время ожидания конца операции ввода / вывода в канале (в мс),
lpsa – указатель на структуру с атрибутами безопасности.
Функция возвращает дескриптор канала.
Флаги комбинируются с помощью операции or.
Пример:
Var hpipe: thandle;
Hpipe:=createnamedpipe(pchar(‘\\ . \pipe\p1’), Pipe_access_duplex, Pipe_type_message or Pipe_readmode_message or Pipe_wait, pipe_unlimited_instances,10000,10000,10000,nil);
Ф СоnnectNamedPipe (hpipe:Thandle; Lpo: povelapped):bool;
Hpipe- это дескриптор существующего канала Lpo- указатель на запись Overlapped- для отложенного режима.
Ф discоnnectNamedPipe (hpipe:Thandle):bool;
Ф PeekNamedPipe (hpipe:Thandle; Lpbuffer:pointer; nbuffersize : cardinal; lpbyteread, lptotalbytesavail, lpbytesleftthismessage: pointer): bool.
Читаеn данные из канала оставив их там для последующего чтения. Позволяет определить количество принятых байтов и длину в байтах первого сообщения.
lpbuffer – указатель на буфер куда будут прочитаны данные;
nbuffersize – размер буфера;
lpbytesread – указатель на количество байтов которые нужно считать;
lptotalbytesavail – указатель на общее количество принятых данных;
lpbytesleftthismessage – указатель на длину первого сообщения.
Пример:
Var nr, ntotal, nmessage: cardinal;
Res:bool; …
Nr:=0;
Res:=peeknamedpipe(hpipe,nil,0,@nr,@ntotal,@nmessage);
Создание клиентской стороны канала
Функция createfile должна быть вызвана после вызова функции connectnamedpipe на серве-ре.
Пример:
Var hpipe:thandle;
. . . . .
hpipe:=createfile(pchar(‘\\k7\pipe\p1’), generic_read or generic_write, 0, nil, open_existing, 0, 0);
Ф.TransactNamedPipe(hpipe:thandle; lpinbuffer:pointer; ninbuffersize:cardinal; lpoutbuffer:pointer; noutbuffersize:cardinal; var lpbytesread:cardinal; lpoverlapped: poverlapped): bool;
Inbuffer- буфер с передаваемыми данными;
Outbuffer – буфер для принятых данных;
Ф.CallnamedPipe(lpname:pchar;lpinbuffer:pointer;ninbuffersize:cardinal;lpoutbuffer:pointer;noutbuffersize:cardinal;var lpbyteread:cardinal; ntimeout:cardinal):bool;
Похожие записи
No user прокомментировали сообщение
Оставить комментарий