当前位置首页 > 百科> 正文

PeekNamedPipe

2019-09-11 10:02:33 百科

PeekNamedPipe

预览一个管道中的数据,或取得与管道中的数据有关的信息。

基本介绍

  • 中文名:PeekNamedPipe
  • 预览一个:管道中的数据
  • 会设定:GetLastError.
  • Long:非零表示成功
  • :失败

返回值

BooL,非零表示成功,零表示失败。会设定GetLastError.

VB声明

Declare Function PeekNamedPipe Lib "kernel32" Alias "PeekNamedPipe" (ByVal hNamedPipe As Long, lpBuffer As Any, ByVal nBufferSize As Long, lpBytesRead As Long, lpTotalBytesAvail As Long, lpBytesLeftThisMessage As Long) As Long

参数表

参数
类型及说明
hNamedPipe
Long,指定一个管道的句柄。这并不一定是某个命名管道的句柄——匿名管道同样适用
lpBuffer
Any,指定要装载数据的一个缓冲区的头一个字元。可以为零(使用ByVal 0&)
nBufferSize
Long,lpBuffer缓冲区长度
lpBytesRead
Long,保存装载到缓冲区的字元数量
lpTotalBytesAvail
Long,保存管道中可用的字元数量
lpBytesLeftThisMessage
Long,保存这次读操作后仍然保留在讯息中的字元数。只能为那些基于讯息的命名管道设定

注释

由这个函式读入的数据实际并不能从管道中删除。如果要对一个管道进行轮询,了解是否有可读数据,那幺使用这个函式特别理想.

VC++声明

函式原型:
BOOL WINAPI PeekNamedPipe(
__in HANDLE hNamedPipe, //管道句柄
__out_opt LPVOID lpBuffer, //读取输出缓冲区,可选
__in DWORD nBufferSize, //缓冲区大小
__out_opt LPDWORD lpBytesRead, //接收从管道中读取数据的变数的指针,可选
__out_opt LPDWORD lpTotalBytesAvail, //接收从管道读取的位元组总数
__out_opt LPDWORD lpBytesLeftThisMessage
);

注释

参数
hNamedPipe [in]
管道句柄。这个参数可以是一个命名管道实例句柄,返回,由CreateNamedPipe或CreateFile函式,或者它可以是一个匿名管道的读端句柄,返回由CREATEPIPE功能。句柄必须有GENERIC_READ许可权的管道。
lpBuffer [out, optional]
接收从管道读取数据的缓冲区的指针。如果没有数据要读取,此参数可以为NULL。
nBufferSize [in]
lpBuffer参数以位元组为单位,由指定的缓冲区大小。如果lpBuffer是NULL,则忽略此参数。
lpBytesRead [out, optional]
接收从管道中读取的位元组数的变数的指针。此参数可以为NULL,如果没有数据要读取。
lpTotalBytesAvail [out, optional]
一个指针变数,接收从管道读取的位元组总数。此参数可以为NULL,如果没有数据要读取。
lpBytesLeftThisMessage [out, optional]
指向剩余的位元组数的变数的指针讯息。此参数将是零位元组类型的命名管道或匿名管道。此参数可以为NULL,如果没有数据要读取。

返回值

如果函式成功,返回值为非零。
如果函式失败,返回值是零。为了获得更多错误信息,调用GetLastError。

备注

PeekNamedPipe功能是类似ReadFile函式,有以下例外:
数据读取与CreateNamedPipe指定的模式。例如,与PIPE_TYPE_MESSAGE创建一个管道| PIPE_READMODE_MESSAGE。如果你改变模式与SetNamedPipeHandleState PIPE_READMODE_BYTE的,ReadFile函式将读取的位元组模式,但PeekNamedPipe将继续在讯息模式读取。
从管道读取数据不会被删除,从管道的缓冲区。
函式可以返回有关管内容的其他信息。
该函式总是返回立即在单执行绪应用程式,即使是在管道中没有数据。等待一个命名管道句柄(阻塞或非阻塞)模式,在功能上没有影响。
注意的PeekNamedPipe功能可以阻止执行绪执行任何I / O功能可以称为同步处理时,在一个多执行绪的应用程式相同的方式。为了避免这种情况,使用异步I / O创建一个管道句柄
如果指定的句柄是一个位元组的唯读模式命名管道句柄,函式读取所有可用的位元组在nBufferSize指定的大小。为命名管道句柄讯息唯读模式,函式读取管道中的下一个讯息。如果讯息是较大比nBufferSize,该函式返回TRUE读取指定的位元组数。在这种情况下,lpBytesLeftThisMessage将收到的讯息中剩余的位元组数。
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net