О поведении трубы в окнах - PullRequest
0 голосов
/ 07 сентября 2010
    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. что если приведенный выше код будет выполнен дважды, сколько каналов будет создано, 1 или 2?
  2. если 2, предположим, что один из каналов подключен A , тогда B пытается подключиться lpszPipename, гарантируется ли, что B подключится к тому, кого никто не подключил?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2010

В четвертом параметре функции CreateNamedPipe вы можете ограничить количество создаваемых экземпляров именованных каналов. Если вы установите для него значение PIPE_UNLIMITED_INSTANCE, как в вашем примере, и дважды вызовете функцию CreateNamedPipe с одинаковыми параметрами, будут созданы два экземпляра (они будут иметь одно и то же имя канала), и два клиента смогут подключиться на ваш сервер именованных каналов (каждый из них - в один экземпляр именованного канала).

Для получения дополнительной информации смотрите http://msdn.microsoft.com/en-us/library/aa365594%28v=VS.85%29.aspx

0 голосов
/ 07 сентября 2010

Второй вызов CreateNamedPipe с тем же именем завершается неудачно, если используется флаг FILE_FLAG_FIRST_PIPE_INSTANCE, или подключается к тому же каналу, если этот флаг не используется.В случае успешного второго вызова CreateNamedPipe он возвращает другой дескриптор для того же объекта ядра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...