termios默认为标准终端会话

时间:2013-05-27 23:49:46

标签: debian terminal c

我想在Linux中创建一个新的pty会话,就像gnome-terminal xterm和其他人一样。我的一半任务正在工作,我用openpty创建了一个pty会话,fork() - 一个进程,child使用slave FD,剩下的进程终端连接到网络套接字。

通过网络,我可以连接到“远程终端”,但它无法正常工作。没有回音,按下回车后不会发送字符(因此我无法在nano,mc等中导航)。

使用cfmakeraw(struct termios)设置termios结构。

问题:默认会话中的默认termios设置是什么,例如gnome-terminal和其他人。

2 个答案:

答案 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之前捕获设置相当长的时间,即使它们在上面的代码片段中显示为相邻操作。