匿名管道作

CreatePipe 函数创建匿名管道并返回两个句柄:管道的读取句柄和管道的写入句柄。 读取句柄对管道具有只读访问权限,写入句柄对管道具有仅写访问权限。 若要使用管道进行通信,管道服务器必须将管道句柄传递给另一个进程。 通常,这是通过继承完成的;也就是说,进程允许子进程继承句柄。 该进程还可以使用 DuplicateHandle 函数复制管道句柄,并使用某种形式的进程间通信(如 DDE 或共享内存)将其发送到不相关的进程。

管道服务器可以将读取句柄或写入句柄发送到管道客户端,具体取决于客户端是应使用匿名管道发送信息还是接收信息。 若要从管道读取,请在调用 ReadFile 函数时使用管道的读取句柄。 当另一个进程写入管道时,ReadFile 调用返回。 如果管道的所有写入句柄都已关闭,或者读取作完成之前发生错误,则 readFile 调用也可以返回该

若要写入管道,请在调用 WriteFile 函数时使用管道的写入句柄。 在将指定字节数写入管道或发生错误之前,WriteFile 调用才会返回。 如果管道缓冲区已满且写入的字节数更多,则 WriteFile 在管道中读取其他进程之前不会返回,从而使更多的缓冲区空间可用。 管道服务器在调用 createPipe 时指定管道的缓冲区大小。

匿名管道不支持异步(重叠)读取和写入作。 这意味着不能将 ReadFileExWriteFileEx 函数与匿名管道一起使用。 此外,当这些函数与匿名管道一起使用时,将忽略 ReadFileWriteFilelpOverlapped 参数。

匿名管道存在,直到所有管道句柄(读取和写入)都已关闭。 进程可以使用 CloseHandle 函数关闭其管道句柄。 进程终止时,所有管道句柄也会关闭。

匿名管道是使用具有唯一名称的命名管道实现的。 因此,通常可以将句柄传递给匿名管道,该函数需要命名管道的句柄。