Есть ли способ до последней позиции канала кроме чтения, пока ничего не осталось? - PullRequest
1 голос
/ 24 ноября 2011

Текущий путь:

while(read(pipe, input, sizeof(input))>0);

Есть ли лучший с поиском?

Ответы [ 4 ]

2 голосов
/ 24 ноября 2011

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

2 голосов
/ 24 ноября 2011

Нет, вы не можете искать в трубах. Вам придется прочитать его.

Ваш код должен обрабатывать случаи, когда read возвращает -1, а не просто предполагать, что он правильно расположен, когда цикл заканчивается.

1 голос
/ 24 ноября 2011

Вы можете разделить (2) на / dev / null, чтобы использовать все данные, но это жесткий аргумент, что это "лучше".

0 голосов
/ 24 ноября 2011

Вы также можете преждевременно закрыть читаемый конец трубы. Но если код конца записи не обрабатывает этот случай (например, вызывая poll или select перед записью), он получит сигнал SIGPIPE.

...