如何创建一个用于读取输出和写入输入的伪tty

时间:2009-07-29 23:32:26

标签: unix stdout stdin tty

我正在使用fork()和execvp()来生成一个进程,该进程必须认为它已连接到交互式终端才能正常运行。

一旦产生,我想捕获流程的所有输出,并且能够将输入发送到流程。

我怀疑psuedo-ttys可能对此有所帮助。有没有人有关于如何做到这一点的片段?

3 个答案:

答案 0 :(得分:6)

你想调用forkpty()。从手册页:

  

#include< pty.h> / *表示openpty和forkpty * /

     

pid_t forkpty(int * amaster,char * name,struct termios * termp,struct     winsize * winp);

     

与-lutil链接。

     

forkpty()函数将openpty(),fork()和login_tty()组合在一起     创建一个在伪终端中运行的新进程。文件描述 -     伪终端主机的tor在amaster中返回,     如果它不是NULL,则为名称中的slave的文件名。特朗普和     winp参数,如果不是NULL,将确定终端属性     和伪终端从属端的窗口大小。

您的父进程通过读取和写入forkpty存储在“amaster”中的文件描述符来与子进行通信 - 这称为主伪终端设备。孩子只是与stdin和stdout对话,它们连接到奴隶伪终端设备。

答案 1 :(得分:1)

你应该使用一个名为“expect”的软件包。它使用一种名为tcl(发音为tickle)的脚本语言。

http://expect.nist.gov

答案 2 :(得分:1)

Expect已被提及通过Tcl使用,但它也可以在没有Tcl的情况下使用,将其视为C库并调用API documented here