MSDN says:
A pipe is a section of shared memory that processes use for communication. Monitor what?

解决方案 »

  1.   

    在Windows环境下,不同进程之间可以使用管道进行通讯。所谓管道,顾名思义,就好像花园里浇水的管子一样,将数据从一面放进去,再从另一面取出来。在Windows系统下支持两种管道:匿名管道和命名管道。其中匿名管道只能在本地进程之间使用,命名管道可以在局域网内不同主机之间通讯。1. 匿名管道:
    匿名管道CreatePipe()函数创建,该函数在创建匿名管道的同时返回两个句柄:管道读句柄和管道写句柄。
    通过这两个句柄,管道两端的两个进程可以进行数据的单项传递,匿名管道并不支持异步读、写操作,这也就意味着不能在匿名管道中使用ReadFileEx()和WriteFileEx(),而且ReadFile()和WriteFile()中的lpOverLapped参数也将被忽略。匿名管道将在读、写句柄都被关闭后退出,也可以在进程中调用CloseHandle()函数来关闭此句柄。
    此外,匿名管道的另外一个用途是当作环状缓冲区使用,即便在一个进程之内,不同线程也可以通过匿名管道互相交换数据。
    2. 命名管道:
    命名管道的功能比匿名管道强大,程序在创建一个命名管道时会给该命名管道指定一个名字,然后与该主机处于同一个局域网内的其他主机就可以通过特定的API与该主机连接从而获得命名管道的相关句柄,并对该命名管道进行读写。命名管道负责维护数据传输的可靠性。
    匿名管道支持异步IO,并且由于其具有独立的名称,容易被其他进程获得相关句柄。
    命名管道有两种基本通信模式:字节模式和消息模式。在字节模式中,数据是以字节流的形式在管道种传输,数据之间没有边界,在管道写入和读出操作中是以字节流即数据块为基本单位操作的,这适合传输大容量数据;在消息模式中,数据是以一条条不连续的消息为基本传输单元,消息和消息之间有边界,在管道写入和读出操作中也是以消息为单位进行操作的,这种方式适合传输量小的数据。