Возможно, вы не понимаете, что делает драйвер tinytty
из книги Linux Device Drivers
. Из книги:
Этот крошечный tty драйвер не подключается к реальному оборудованию, поэтому его функция записи
Он просто записывает в журнал отладки ядра, какие данные должны были быть записаны.
Это не какой-то петлевой драйвер TTY, фактически он отправляет постоянный символ ('t'
) каждые две секунды всему, что читает с устройства (см. Функцию tiny_timer
).
Теперь перейдем к вашим проблемам с трубами. Из вашего кода я вижу, что вы по сути создали канал. Затем в дочернем процессе вы закрываете конец чтения канала и отбрасываете конец записи, заменяя его дескриптором файла на ваше устройство tiny tty
(что является плохой практикой, поскольку вы в основном утекли дескриптор открытого файла) , Затем в родительском процессе вы закрываете конец записи канала и отбрасываете конец чтения (все еще плохая практика, т. Е. «Утечка дескрипторов открытого файла»). Наконец, в том же родительском процессе вы пытаетесь прочитать то, что вы называете pipe
, который больше не является каналом, поскольку вы закрыли один конец и заменили другой дескриптором на устройство tiny tty
. Более того, таймер в драйвере (который срабатывает каждые две секунды), вероятно, не сработал, а это значит, что вам нечего читать. Я считаю, что это объясняет вашу проблему.
Для всех, кто интересуется, упомянутая здесь книга доступна на условиях лицензии Creative Commons Attribution-ShareAlike 2.0 от LWN.net , а пример драйверов / кода доступен по O'Reilly .