我想在Linux中创建一个新的pty会话,就像gnome-terminal xterm和其他人一样。我的一半任务正在工作,我用openpty创建了一个pty会话,fork() - 一个进程,child使用slave FD,剩下的进程终端连接到网络套接字。
通过网络,我可以连接到“远程终端”,但它无法正常工作。没有回音,按下回车后不会发送字符(因此我无法在nano,mc等中导航)。
使用cfmakeraw(struct termios)
设置termios结构。
问题:默认会话中的默认termios设置是什么,例如gnome-terminal和其他人。
答案 0 :(得分:2)
将NULL
作为struct termios *
参数传递给openpty()
(或forkpty()
,您应该查看!),并且对于交互式终端,结果默认值应合理
答案 1 :(得分:0)
如果您的标准输入,标准输出或标准错误发送到您的终端并且是理智的,您可以使用tcgetattr()
和tcsetattr()
将设置从您的终端复制到您的pty。
struct termios ttyset;
if (tcgetattr(FILE_STDERR, &ttyset) != 0)
...handle error - maybe try stdout or stdin...
if (tcsetattr(pty_fd, TCSANOW, &ttyset) != 0)
...handle error...
基本上,这假设您有一组良好的终端设置,并将设置从FILE_STDERR
复制到pty_fd
(假设它是伪的从属端的文件描述符) -tty)。
当然,您可以在使用它们初始化伪tty之前捕获设置相当长的时间,即使它们在上面的代码片段中显示为相邻操作。