关于Windows中的管道行为

时间:2010-09-07 12:25:01

标签: c++ named-pipes

    hPipe = CreateNamedPipe( 
          lpszPipename,             // pipe name 
          PIPE_ACCESS_DUPLEX,       // read/write access 
          PIPE_TYPE_MESSAGE |       // message type pipe 
          PIPE_READMODE_MESSAGE |   // message-read mode 
          PIPE_WAIT,                // blocking mode 
          PIPE_UNLIMITED_INSTANCES, // max. instances  
          BUFSIZE,                  // output buffer size 
          BUFSIZE,                  // input buffer size 
          0,       

我有两个问题:

  1. 如果以上代码运行两次,将创建多少个管道,12怎么办?
  2. 如果2,假设其中一个管道通过 A 连接,则 B 尝试连接lpszPipename,是否保证< strong> B 会连接到没人连接的那个吗?

2 个答案:

答案 0 :(得分:0)

如果使用FILE_FLAG_FIRST_PIPE_INSTANCE标志,则使用相同名称对CreateNamedPipe的第二次调用失败,或者如果未使用此标志,则连接到同一管道。在第二个CreateNamedPipe调用成功的情况下,它返回另一个句柄到同一个内核对象。

答案 1 :(得分:0)

CreateNamedPipe函数的第四个参数中,您可以限制可以创建的命名管道实例的数量。如果您在示例中将其设置为PIPE_UNLIMITED_INSTANCE并使用相同参数调用CreateNamedPipe函数两次,则将创建两个实例(它们将共享相同的管道名称),并且两个客户端将能够连接到您的命名管道服务器(每个管道服务器到一个命名管道实例)。

有关详细信息,请查看http://msdn.microsoft.com/en-us/library/aa365594%28v=VS.85%29.aspx