我正在使用 fork() 和 execvp() 来生成一个必须相信它已连接到交互式终端才能正常运行的进程。
一旦产生,我想捕获进程的所有输出,以及能够将输入发送到进程。
我怀疑 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() 来创建一个在伪终端中运行的新进程。伪终端主机端的文件描述符在 amaster 中返回,如果它不为 NULL,则在 name 中返回从机的文件名。termp 和 winp 参数,如果不为 NULL,将决定伪终端从端的终端属性和窗口大小。
您的父进程通过读取和写入 forkpty 存储在“amaster”中的文件描述符来与子进程对话 - 这称为主伪终端设备。孩子只是与连接到从伪终端设备的标准输入和标准输出对话。
您应该使用一个名为“expect”的包。它使用一种称为 tcl(发音为 tickle)的脚本语言。