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

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

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

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

最佳答案
你想调用forkpty().从手册页:

#include <pty.h> /* for openpty and forkpty */

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

Link with -lutil.

The forkpty() function combines openpty(), fork(), and login_tty() to
create a new process operating in a pseudo-terminal. The file descrip‐
tor of the master side of the pseudo-terminal is returned in amaster,
and the filename of the slave in name if it is not NULL. The termp and
winp parameters, if not NULL, will determine the terminal attributes
and window size of the slave side of the pseudo-terminal.

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

转载注明原文:unix – 如何创建用于读取输出和写入输入的伪tty - 代码日志