gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 23:26:56 25 4
gpt4 key购买 nike

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

谢谢!

最佳答案

通常 TIOCSWINSZ由 tty 主控(例如 xterm、Linux 控制台本身等)用来告诉内核驱动程序终端实际有多大。在 tty 从站上运行的程序(即应用程序本身)使用 TIOCGWINSZ查询终端的大小。大多数 tty 驱动程序不支持以其他方式插入它;你不能一般打电话TIOCSWINSZ在应用程序的 tty 从站上,并让主站更改其大小。

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

如果您希望应用程序强制终端的大小,那么可移植地没有办法做到这一点。不可移植的是,您可以应用一些特殊技巧,例如尝试 TIOCSWINSZ或发送 xterm转义序列。

关于terminal - 无法更改 pty/N 上的终端大小(适用于 ttyN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11483141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com