2010-08-23 3 views
2
 fSuccess = ReadFile( 
     hPipe, // pipe handle 
     chBuf, // buffer to receive reply 
     BUFSIZE*sizeof(TCHAR), // size of buffer 
     &cbRead, // number of bytes read 
     NULL); // not overlapped 

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

+0

Что небезопасно - это чтение/письмо TCHARS. Поскольку другой процесс находится на другой стороне, он может быть скомпилирован с помощью unicode вкл или выкл. –

ответ

3

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

+0

Что делать, если другая сторона уже ушла, когда вы пишете трубку? – Alan

+0

@Alan, то вы получите код ошибки. – JaredPar

+0

Что делать, если другая сторона слишком медленно читает трубку, а буфер заполнен, когда вы пишете трубку? – wamp

0

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

+0

Что делать, если другая сторона слишком медленно читает трубку, а буфер заполнен, когда вы пишете трубку? – wamp

+0

@wamp: если память обслуживается, ядро ​​расширяет буфер - вплоть до точки. Если буфер заполнен и он уже имеет максимальный размер, я думаю, что попытка написать только блоки, хотя я не помню наверняка. –

Смежные вопросы