无法在pty / N上更改终端大小(适用于ttyN)

时间:2012-07-14 10:51:03

标签: terminal ioctl tty pty

我用下一个来改变终端尺寸:
rc = ioctl(fd, TIOCSWINSZ, &ws);
当我在linux文本终端下运行它(通过Alt-Ctrl-F1切换)时,结果是我希望看到的。整个我的输入和输出在ioctl系统调用给出的范围内 但是当我通过SSH连接到localhost并运行相同的程序时,它只能部分工作。我的意思是我不能输入比ioctl设置的终端大小更宽的命令,但是输出可以跨越ioctl给出的终端的边界,输入可以占用ioctl设置的更多行。此后也没有自动回车和新线路 我直接运行程序时看到的唯一区别是它在终端/ dev / ttyN上运行,它的主要数字是5,当我通过SSH运行程序时,它使用/ dev / pts / N作为终端,主要编号为136 。 所以,据我所知,这是由于终端的不同而发生的 我的问题:
这是对的吗?终端司机的原因是什么? 2.我该如何解决?我需要通过SSH在本地tty终端中使用相同的行为
谢谢!

1 个答案:

答案 0 :(得分:7)

tty master(例如TIOCSWINSZ,Linux控制台本身等)通常使用xterm来告诉内核驱动程序终端实际有多大。在tty从站上运行的程序(即应用程序本身)使用TIOCGWINSZ来查询终端的大小。大多数tty司机都不支持以其他方式推动它;你通常不能从应用程序调用tty slave上的TIOCSWINSZ并让master改变它的大小。

某些终端(例如xterm)支持转义序列以请求它们调整大小,但这只是一个字节转义序列,而不是ioctl()命令。

如果您希望应用程序强制终端的大小,那么便携式无法执行此操作。不可思议的是,您可以应用一些特殊技巧,例如尝试TIOCSWINSZ或发送xterm转义序列。