Почему запись на ведущее устройство PTY вызывает событие ввода, когда ведомое устройство не подключено, но не тогда, когLinux

Ответить Пред. темаСлед. тема
Anonymous
 Почему запись на ведущее устройство PTY вызывает событие ввода, когда ведомое устройство не подключено, но не тогда, ког

Сообщение Anonymous »

Я работаю над приложением для Linux, в котором взаимодействую с псевдотерминалом (PTY). В частности, я реализовал следующее:
  • Я создаю подчиненное устройство 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 между этими сценариями или о том, как добиться желаемого поведения.
Примечание: я пробовал отслеживать входные события на мастере PTY, используя такие механизмы, как epoll().
Я ожидал, что получать событие ввода только тогда, когда фактические входные символы были доступны от подчиненного устройства PTY, независимо от того, было ли подчиненное устройство picocom или вообще ничем. Однако в сценарии № 1 (ведомая программа не запущена) запись на ведущее устройство PTY неожиданно вызвала входное событие, чего не происходит в сценарии № 2 (когда picocom работает).

Подробнее здесь: https://stackoverflow.com/questions/792 ... is-attache
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»