为什么“重置”命令包含延迟?

为什么“重置”命令包含延迟?

reset命令包括清除屏幕和返回之间的延迟。即使在最新的终端类型上也是如此xterm-256color。为什么?

man reset没有提到延迟,只提到特殊字符串的打印。 (它也没有提到清除屏幕。我认为这包含在终端初始化字符串中)。

我注意到以下输出strace -f reset

nanosleep({tv_sec=1, tv_nsec=0}, 0x7ffe1964f100) = 0
ioctl(2, SNDCTL_TMR_STOP or TCSETSW, {B38400 opost isig icanon echo ...}) = 0

答案1

真实的(硬件)终端需要它。例如,对于某些设备,重置它们的唯一方法是进行硬件重置。

这对于终端模拟器来说是无害的,并且由于没有传统的方法来区分(并且很难确定某些转义序列是否可能进行硬件重置),reset因此假设您的终端是真实的。

时间延迟可以追溯到tset1979 年的 3BSD,如下所示:

    /* output startup string */
    if (!RepOnly && !NoInit)
    {
            bufp = buf;
            if (tgetstr("is", &bufp) != 0)
                    prs(buf);
            bufp = buf;
            if (tgetstr("if", &bufp) != 0)
                    cat(buf);
            sleep(1);       /* let terminal settle down */
    }

它在 ncurses 中有所发展,但使用相同的准则:

        if (!noinit) {
            if (send_init_strings(my_fd, &oldmode)) {
                (void) putc('\r', stderr);
                (void) fflush(stderr);
                (void) napms(1000);         /* Settle the terminal. */
            }
        }

进一步阅读:

相关内容