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



我使用next来更改终端大小:
rc = ioctl(fd, TIOCSWINSZ, &ws);
当我在linux文本终端下运行它时(通过Alt-Ctrl-F1切换),结果是我期望看到的。我的全部输入和输出都在ioctl系统调用给定的范围内
但是,当我通过SSH连接到localhost并运行相同的程序时,它只能部分工作。我的意思是,我不能输入比ioctl设置的终端大小更宽的命令,但输出可以跨越ioctl给定的终端的边界,并且输入可以占用ioctl设定的更多行。此外,在那之后没有自动回车和换行
当我直接运行程序时,我看到的唯一区别是它在终端/dev/ttyN上运行,它的主要编号是5,当我通过SSH运行程序时它使用/dev/pts/N作为终端,主要编号是136。所以,正如我所理解的,这是由于终端的差异
我的问题:
1.对吗?原因在终端驱动程序中吗
2.我该怎么修?我需要像在本地tty终端中一样通过SSH进行相同的行为

谢谢

通常TIOCSWINSZ被tty主机(如xterm、Linux控制台本身等)用来告诉内核驱动程序终端实际有多大。在tty从机上运行的程序(即应用程序本身)使用TIOCGWINSZ来查询终端的大小。大多数tty驱动程序不支持以另一种方式推动它;一般情况下,您不能从应用程序中调用tty从机上的TIOCSWINSZ并让master更改其大小。

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

如果你想让应用程序强制调整终端的大小,那么便携是没有办法做到这一点的。不方便的是,您可以应用一些特殊的技巧,如尝试TIOCSWINSZ或发送xterm转义序列。

相关内容

最新更新