xterm
не выполняет свой ввод с оболочкой и утилитами через pipe(7)
s. Вместо этого используется каркас Unix PTY (см. pty(7)
, openpty(3)
, forkpty(3)
, posix_openpt(3)
, pts(4)
manaages для некоторой информации). Структура PTY позволяет любому процессу служить терминальным «ведущим» (например, telnetd(8)
, sshd(8)
, xterm(1)
и т. Д.), И любой процесс может подключаться к ведомому терминалу, чтобы обеспечить интерактивную среду, например, сидя на консоли.
Advanced Programming in the Unix Environment, 2nd edition книга Stevens and Rago имеет отличную главу по использованию псевдо-терминальное устройства для управления ведомыми программ - в то числе отличной маленького pty
программы, которая позволяет управлять «интерактивной» программой в манере, аналогичной expect(1)
, но и в C, а не tcl
.
... Вау, я действительно забываю, как сломанный unix - это когда все остальное еще хуже. +1, надеюсь, избиение pty в интерфейсе полуработающей трубы не будет слишком тяжелым. –