簡體   English   中英

關於Windows中的管道行為

[英]About pipe behavior in windows

    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 ,是否可以確保B會連接到沒有人連接的那個管道?

如果使用了FILE_FLAG_FIRST_PIPE_INSTANCE標志,則對具有相同名稱的CreateNamedPipe的第二次調用失敗,或者如果不使用此標志,則第二次調用將失敗。 如果第二個CreateNamedPipe調用成功,它將向同一內核對象返回另一個句柄。

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

有關更多信息,請參見http://msdn.microsoft.com/zh-cn/library/aa365594%28v=VS.85%29.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM