Tại sao lệnh `reset` bao gồm độ trễ?


17

Các resetlệnh bao gồm một sự chậm trễ, giữa thanh toán bù trừ màn hình và trở về. Điều này thậm chí là trên các loại thiết bị đầu cuối mới nhất xterm-256color. Tại sao?

man resetkhông đề cập đến độ trễ, chỉ in các chuỗi đặc biệt. (Nó cũng không đề cập đến việc xóa màn hình. Tôi giả sử điều này được bao gồm trong chuỗi khởi tạo thiết bị đầu cuối).

Tôi nhận thấy đầu ra sau trong 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

Câu trả lời:


24

Thiết bị đầu cuối thực sự (phần cứng) cần điều đó. Chẳng hạn, với một số người, cách duy nhất để thiết lập lại chúng là thực hiện thiết lập lại phần cứng.

Nó vô hại với trình giả lập thiết bị đầu cuối và vì không có cách thông thường nào để phân biệt sự khác biệt (và quá khó để xác định xem một chuỗi thoát nào đó có thể thực hiện thiết lập lại phần cứng hay không), resetgiả sử thiết bị đầu cuối của bạn là có thật.

Thời gian trễ bắt đầu từ tset3BSD năm 1979, như thế này:

    /* 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 */
    }

Nó đã phát triển phần nào trong các tài khoản, nhưng sử dụng cùng một hướng dẫn:

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

Đọc thêm:


1
Trong mã OpenBSD, thời gian chờ 1000 ms (thông qua cuộc gọi napms(1000)) được kèm theo nhận xét/* Settle the terminal. */
Kusalananda

2
OpenBSD sử dụng tài khoản.
Thomas Dickey

1
Trong khi chúng tôi ở đây, bạn có thể giải thích làm thế nào để loại bỏ sự chậm trễ nếu có thể?
dùng541686

7
@Mehrdad Bạn có thể thử tput reset. Nó dường như không sử dụng độ trễ.
Ross Ridge

3
@Mehrdad stty sanexuất hiện để sửa điều kiện đầu tiên, không chậm trễ.
nguồn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.