【发布时间】:2009-07-29 23:32:25
【问题描述】:
我正在使用 fork() 和 execvp() 来生成一个进程,该进程必须相信它已连接到交互式终端才能正常运行。
一旦生成,我想捕获进程的所有输出,并能够将输入发送到进程。
我怀疑 psuedo-ttys 在这里可能会有所帮助。有没有人知道如何做到这一点?
【问题讨论】:
-
这确实是伪 tty 的用途。我经常希望 Windows 内置类似的功能。
我正在使用 fork() 和 execvp() 来生成一个进程,该进程必须相信它已连接到交互式终端才能正常运行。
一旦生成,我想捕获进程的所有输出,并能够将输入发送到进程。
我怀疑 psuedo-ttys 在这里可能会有所帮助。有没有人知道如何做到这一点?
【问题讨论】:
你想调用 forkpty()。从手册页:
#include
/* 用于 openpty 和 forkpty */ pid_t forkpty(int *amaster, char *name, struct termios *termp, struct winsize *winp);
与 -lutil 链接。
forkpty() 函数结合了 openpty()、fork() 和 login_tty() 来 创建一个在伪终端中运行的新进程。文件描述- 伪终端主机端的tor在amaster中返回, 如果不为 NULL,则为 name 中从站的文件名。期限和 winp参数,如果不为NULL,将决定终端属性 和伪终端从端的窗口大小。
您的父进程通过读取和写入 forkpty 存储在“amaster”中的文件描述符来与子进程对话 - 这称为主伪终端设备。孩子只是与连接到从伪终端设备的标准输入和标准输出对话。
【讨论】:
Expect 已经提到通过 Tcl 使用,但它也可以在没有 Tcl 的情况下使用,将其视为 C 库并调用 API documented here
【讨论】:
您应该使用一个名为“expect”的包。它使用一种称为 tcl(发音为 tickle)的脚本语言。
【讨论】: