CreatePipe 函数创建匿名管道并返回两个句柄:管道的读取句柄和管道的写入句柄。 读取句柄对管道具有只读访问权限,写入句柄对管道具有仅写访问权限。 若要使用管道进行通信,管道服务器必须将管道句柄传递给另一个进程。 通常,这是通过继承完成的;也就是说,进程允许子进程继承句柄。 该进程还可以使用 DuplicateHandle 函数复制管道句柄,并使用某种形式的进程间通信(如 DDE 或共享内存)将其发送到不相关的进程。
管道服务器可以将读取句柄或写入句柄发送到管道客户端,具体取决于客户端是应使用匿名管道发送信息还是接收信息。 若要从管道读取,请在调用 ReadFile 函数时使用管道的读取句柄。 当另一个进程写入管道时,ReadFile 调用返回。 如果管道的所有写入句柄都已关闭,或者读取作完成之前发生错误,则 readFile 调用也可以返回该。
若要写入管道,请在调用 WriteFile 函数时使用管道的写入句柄。 在将指定字节数写入管道或发生错误之前,WriteFile 调用才会返回。 如果管道缓冲区已满且写入的字节数更多,则 WriteFile 在管道中读取其他进程之前不会返回,从而使更多的缓冲区空间可用。 管道服务器在调用 createPipe 时指定管道的缓冲区大小。
匿名管道不支持异步(重叠)读取和写入作。 这意味着不能将 ReadFileEx 和 WriteFileEx 函数与匿名管道一起使用。 此外,当这些函数与匿名管道一起使用时,将忽略 ReadFile 和 WriteFile 的 lpOverlapped 参数。
匿名管道存在,直到所有管道句柄(读取和写入)都已关闭。 进程可以使用 CloseHandle 函数关闭其管道句柄。 进程终止时,所有管道句柄也会关闭。
匿名管道是使用具有唯一名称的命名管道实现的。 因此,通常可以将句柄传递给匿名管道,该函数需要命名管道的句柄。