2013-05-27 40 views
0

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

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

termios结构的设置与cfmakeraw(struct termios)

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

回答

1

NULLstruct termios *参数openpty()(或forkpty(),你应该看看!),并将得到的默认值应该为一个交互式终端是合理的。

+0

真正的问题是: 网络套接字缓冲数据,直到行尾字符,ech也工作,但只有线路发回后才回显。但这是设置终端最简单的方法,谢谢:) –

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

+0

这也是一个很好的解决方案,复制工作终端的设置: struct termios def; memset(&def,0,sizeof(termios)); tcgetattr(2,&def); 对(INT I = 0; I <4;我++) 的std :: COUT << *(((无符号整数*)&DEF)+ I)<< “\ n” 个; 瓦莱斯: def.c_iflag = 27906; def.c_oflag = 5; def.c_cflag = 1215; def.c_lflag = 35387; 感谢帮助:) –