如何创build一个读取输出和写入input的伪tty

我正在使用fork()和execvp()来产生一个必须相信它连接到交互式terminal以使其正常工作的进程。

一旦产生,我想要捕获进程中的所有输出,以及能够将input发送到进程。

我怀疑psuedo-ttys可能会在这里帮助。 有没有人有如何做到这一点片段?

你想调用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()来创建在伪终端中运行的新进程。 伪终端的主端的文件描述符在主服务器中返回,如果从服务器的名字不是NULL,则从服务器的文件名将被返回。 termp和winp参数(如果不是NULL)将决定伪终端的从属端的属性和窗口大小。

你的父进程通过从文件描述符中读取和写入forkload在“amaster”中存储 – 这被称为主伪终端设备。 这个孩子刚刚和stdin和stdout交谈,这些stdin和stdout都连接到从属伪终端设备。

期望已经被提及通过Tcl使用,但是它也可以在没有Tcl的情况下使用,把它当作一个C库并且调用API

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

http://expect.nist.gov