- Я создаю подчиненное устройство PTY и отслеживаю операции записи и чтения на главном обработчике PTY.
- При записи на ведущее устройство PTY содержимое отображается на ведомом устройстве (например, при использовании picocom на ведомой стороне).
- События ввода обрабатываются путем мониторинга ведущего устройства PTY и чтение из него, когда данные доступны (например, записываю некоторые данные в picocom).
Когда я пытаюсь для записи в главный PTY в двух разных сценариях я наблюдаю разное поведение:
Сценарий № 1 (ведомая программа не работает, только PTY):
Запись в мастер PTY вызывает событие ввода на стороне мастера. Например, операция записи заставляет механизм мониторинга ввода (например, epoll()) указать, что данные доступны для чтения.
Сценарий № 2 (работает подчиненная программа picocom) :
Запись в мастер PTY не вызывает событие ввода. Хотя данные правильно отображаются на псевдотерминале picocom, мой механизм мониторинга ввода на главной стороне не обнаруживает никаких событий и не указывает на то, что данные доступны для чтения.
Мой Цель
Я хочу, чтобы мастер PTY получал события ввода только тогда, когда фактические входные символы доступны для чтения (как в сценарии № 2). Однако я не понимаю, почему поведение различается в зависимости от того, запущена ли ведомая программа, такая как picocom.
Вопросы
- Почему запись на ведущее устройство PTY вызывает событие ввода, когда ведомое устройство не подключено (сценарий № 1)?
- Почему это поведение меняется, когда программа типа picocom подключен к подчиненному устройству PTY (сценарий №2)?
- Как я могу гарантировать, что событие ввода на главном устройстве PTY инициируется только тогда, когда доступны фактические входные символы (поведение Сценария № 2)?
Примечание: я пробовал отслеживать входные события на мастере PTY, используя такие механизмы, как epoll().
Я ожидал, что получать событие ввода только тогда, когда фактические входные символы были доступны от подчиненного устройства PTY, независимо от того, было ли подчиненное устройство picocom или вообще ничем. Однако в сценарии № 1 (ведомая программа не запущена) запись на ведущее устройство PTY неожиданно вызвала входное событие, чего не происходит в сценарии № 2 (когда picocom работает).
Подробнее здесь: https://stackoverflow.com/questions/792 ... is-attache