metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-06-27 09:53 am

Мучающий меня 10 лет вопрос

Люди, а скажите мне - через | (пайп) БИНАРНЫЕ данные проходят?
Особо интересует - на линуксе и на винде. Про первое я знаю, что проходят, т.к. arecord | aplay работает, а вот про второе уже 10 лет мучаюсь, но никак руки не дойдут проверить :)

[identity profile] trueblacker.livejournal.com 2012-06-27 12:33 pm (UTC)(link)
а чем 0 круче EOF'а ?

[identity profile] metaclass.livejournal.com 2012-06-27 12:42 pm (UTC)(link)
read возвращает число прочитанных байт.

[identity profile] trueblacker.livejournal.com 2012-06-27 12:45 pm (UTC)(link)
"возвращает" - растяжимое понятие. Я задал вопрос для уточнения.
Ок. Пусть это будет количество байт. Это не означает, что данные закончились. Потоком может быть и консоль, т.е. чел может просто нажимать кнопки медленнее, чем программа их обрабатывает.

Поэтому, пока он не нажмёт ^Z нужно игнорировать нулевое чтение и читать снова.

[identity profile] metaclass.livejournal.com 2012-06-27 12:54 pm (UTC)(link)
В консоли обычно ждет Enter а потом возвращает.
Можно этот режим выключить и читать побайтно, с таймаутами, использовать select/epoll и тому подобное.

[identity profile] trueblacker.livejournal.com 2012-06-27 12:59 pm (UTC)(link)
какая разница, какой кнопки ждать? Ну enter... Что это меняет? "Не нажата ни одна клавиша" и "не нажата клавиша enter" всё равно не "данные закончились".

[personal profile] ex0_planet 2012-06-27 01:36 pm (UTC)(link)
консоль тупо блокируется, пока не будет достаточно данных. достаточно - понятие растяжимое.

[personal profile] ex0_planet 2012-06-27 01:34 pm (UTC)(link)
тем что не в потоке, а out-of-band