gpt4 book ai didi

linux - terminfo 延迟/填充如何在 TTY 中实现?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:26 25 4
gpt4 key购买 nike

我一直在查看 terminfo,它有延迟,例如$<5> , 在功能字符串中。我试图通过运行来查看 tputstrace 下延迟是如何实现的,即是否由nanosleep实现或者通过插入 NUL或其他角色。这是我尝试运行和跟踪的命令:

TERM=ansi77 strace -o log.txt tput dl1

我选择了dl1ansi77因为它被定义为 dl1=\E[M$<5*/> .然而,我在跟踪中看到的只是写入了 3 个字节:

write(1, "\33[M", 3)                    = 3
  1. 那么,我的问题是,延迟实际是如何实现的?填充字符还是简单的进程/线程休眠?
  2. 我可以在终端模拟器中观察它还是需要真正的硬件终端才能看到它?
  3. 尝试用 tput 重现它有什么缺陷吗? ?

最佳答案

同意@cliffordheath 的观点,即填充是通过添加填充字符来完成的,引用可用文档会有所帮助。

硬件终端并没有不复存在,它们还在supported by ncurses .如果没有填充,这些旧终端将无法正常工作(丢失或损坏您的输出)。 vt100 条目使用了填充,而 xterm 则没有。

填充字符的terminfo名称是padpc 是一个 termcap 名称(参见 terminfo(5) ):

   pad_char                  pad    pc   padding char
(instead of null)

terminfo 手册页有一个很长的段落(在 Types of Capabilities 中)处理填充。 terminfo 格式支持两种类型的填充(advisorymandatory),以它们的格式区分。 termcap 仅支持后者(当然使用不同的语法),并且与 terminfo 不同,所有延迟都同时发生(使“flash”的转义序列通常不起作用)。

命令行 tput程序不仅仅充当函数 tputs 的包装器,但它在输出字符串时使用它。命令行程序提供输出 bool 值、数字,当然还有字符串功能。

库调用 tputs 有一个参数,用于计算延迟时考虑的受影响行数(如波特率)。

在OP的问题中

dl1=\E[M$<5*/>

指定与受影响的行数成比例的延迟(由 "*" 字符标记)。 命令行 tput 实用程序受影响的行数是 1。它调用 putp去做这个。但是,这又会调用 delay_output ,然后调用 baudrate .最后一个函数仅在终端初始化时初始化。命令行tput 初始化终端,因此延迟对that 不起作用。您应该看到(给定正确的速度)使用库本身的延迟。

ncurses 还提供时间延迟 napms (毫秒),这与填充不同。

关于linux - terminfo 延迟/填充如何在 TTY 中实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33370036/

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