безопасно ли читать канал, когда другая сторона пишет в него? - PullRequest
2 голосов
/ 23 августа 2010
      fSuccess = ReadFile( 
         hPipe,    // pipe handle 
         chBuf,    // buffer to receive reply 
         BUFSIZE*sizeof(TCHAR),  // size of buffer 
         &cbRead,  // number of bytes read 
         NULL);    // not overlapped 

Если это не безопасно, как я могу убедиться, что другая сторона не пишет при чтении канала в Windows?

Ответы [ 2 ]

3 голосов
/ 23 августа 2010

Да, это совершенно законная операция на трубе. Один конец канала может читать и записывать в канал независимо от того, что происходит с другим концом.

0 голосов
/ 23 августа 2010

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

...