"재설정" 명령에 지연이 포함되는 이유는 무엇입니까?

"재설정" 명령에 지연이 포함되는 이유는 무엇입니까?

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터미널이 실제라고 가정합니다.

시간 지연은 tset다음과 같이 1979년 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. */
            }
        }

추가 자료:

  • 역사(tset매뉴얼 페이지)
  • 역사(tput매뉴얼 페이지)

관련 정보