Как я могу прочитать копию данных, поступающих в главный конец PTY? - PullRequest
2 голосов
/ 27 декабря 2011

У меня есть файловый дескриптор главного конца pty. Этот pty используется библиотекой (libvte) для порождения и запуска подпроцессов.

  • Я могу опрашивать и читать из файлового дескриптора или его дубликата, но тогда данные никогда не попадут в библиотеку.

  • Я могу опрашивать и читать из файлового дескриптора, затем записывать его обратно в мастер, но затем я попадаю в неприятный цикл, считывающий мои собственные данные, и снова ничего не попадает в базовую библиотеку. *

Есть ли какое-либо решение, позволяющее мне читать копию данных, не вмешиваясь в базовую функциональность pty?

Я использую Python, но я не думаю, что это действительно имеет значение на этом уровне.

1 Ответ

1 голос
/ 27 декабря 2011

Ознакомьтесь с моей pypty программой - это повторная реализация Python / usr / bin / script с небольшим дополнительным функционалом, поэтому он демонстрирует оба конца связи PTY в Python:

Кстати, остерегайтесь сигналов с (относительно) скрытыми системными вызовами - они могут возвращаться, когда только частично завершены.В частности, посмотрите функцию Maybe_restarted_syscall.И просто изменение размера окна будет вызывать доставку сигналов при использовании PTY.

...