Есть ли встроенный механизм, чтобы байты, записанные в канал, могли перезаписывать более ранние байты, если буфера недостаточно? - PullRequest
0 голосов
/ 09 сентября 2010

Очень похоже на очередь, когда очередь заполнена, и в нее хочет войти новый участник, просто удалите первого члена в начале очереди.

Есть ли такой механизм по умолчанию в windows?

Если да, как я могу это сделать в c / c ++?

Ответы [ 2 ]

1 голос
/ 09 сентября 2010

Нет. После записи байты должны быть прочитаны на дальнем конце, прежде чем байты, записанные позже на стороне отправителя, могут быть прочитаны. В противном случае это было бы не так уж много. Любое отклонение должно быть осуществлено на принимающей стороне. Или создайте очередь записи на стороне отправки и отмените ее, если необходимо, если вы заблокированы при записи.

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

На операцию WriteFile влияет режим ожидания дескриптора канала, когда в буфере канала недостаточно места.При использовании дескриптора ожидания блокировки операция записи не может быть успешной, пока в буфере не будет создано достаточно места для чтения потока с другого конца канала.С дескриптором без блокировки ожидания операция записи возвращает ненулевое значение немедленно, без записи каких-либо байтов (для канала типа сообщения) или после записи столько байтов, сколько буфер содержит (для канала байтового типа).

см.

...