2010-09-07 24 views
0
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,  

我對這個兩個問題管行爲:有關Windows

  1. 什麼,如果上面的代碼運行兩次,多少管道將生成,12
  2. 如果2,假設管一送由連接,然後嘗試連接lpszPipename,是保證將連接到,沒有人連接一個?
+0

二。我非常懷疑它。嘗試一下。 – 2010-09-07 12:40:18

回答

0

如果使用FILE_FLAG_FIRST_PIPE_INSTANCE標誌,則對同名的CreateNamedPipe的第二次調用將失敗,或者如果未使用此標誌,則連接到同一管道。在第二個CreateNamedPipe調用成功的情況下,它會向同一個內核對象返回另一個句柄。

0

CreateNamedPipe函數的第四個參數中,可以限制可以創建多少個命名管道實例。如果將其設置爲PIPE_UNLIMITED_INSTANCE,並使用相同的參數兩次調用CreateNamedPipe函數,則會創建兩個實例(它們將共享相同的管道名稱),並且兩個客戶端將能夠連接到您的命名管道服務器(他們中的每一個到一個命名管道實例)。

欲瞭解更多信息,請看http://msdn.microsoft.com/en-us/library/aa365594%28v=VS.85%29.aspx