터미널에서 실행중인 일부 응용 프로그램은 출력을 지울 수 있습니다. 예 : 대기하라는 메시지가 표시되면 길이가 서로 다른 일련의 점들이 표시됩니다.C에서 터미널에서 지우기 출력을 구현하는 방법은 무엇입니까?
C에서 구현되는 터미널에서 출력을 지우는 방법은 무엇입니까? 역방향 피드로 처리됩니까?
프로그램은 현재 줄의 이전 문자 만 지울 수 있으며 stdout의 이전 줄의 문자는 지울 수 있습니까?
감사합니다.
터미널에서 실행중인 일부 응용 프로그램은 출력을 지울 수 있습니다. 예 : 대기하라는 메시지가 표시되면 길이가 서로 다른 일련의 점들이 표시됩니다.C에서 터미널에서 지우기 출력을 구현하는 방법은 무엇입니까?
C에서 구현되는 터미널에서 출력을 지우는 방법은 무엇입니까? 역방향 피드로 처리됩니까?
프로그램은 현재 줄의 이전 문자 만 지울 수 있으며 stdout의 이전 줄의 문자는 지울 수 있습니까?
감사합니다.
터미널에 따라 다릅니다.
Windows의 COMSPEC 셸 (DOS 프롬프트 또는 command.com이라고도 함)은 C로 커서를 제어하는 API를 제공합니다. 나는 윈도우 프로그래밍을하지 않았으므로 그것에 대해 많이 말할 수는 없다.
대부분의 다른 터미널 (특히 unixen)은 VT100 직렬 터미널 (VT100 터미널은 서버와 통신하기 위해 모뎀이나 직렬 포트에 연결 한 물리적 장치, 모니터 및 키보드)과 유사한 프로토콜을 에뮬레이트합니다.
VT100 터미널에서 캐리지 리턴과 줄 넘김은 별도의 명령으로 1 바이트입니다. 캐리지 리턴 명령은 커서를 행의 시작 부분으로 설정합니다. 줄 바꿈 명령은 커서를 한 줄 아래로 이동하지만 커서를 줄의 시작 부분으로 가져 오지는 않습니다. unixen에있는 대부분의 셸은 줄 바꿈 후에 자동으로 캐리지 리턴을 삽입하지만 캐리지 리턴 후에 줄 바꿈을 거의 삽입하지 않습니다.
printf("\rprogress: %d percent ", x);
참고 줄 끝에 여분의 공간이 지식으로
은 간단한 구현은 출력 캐리지 리턴 전체 라인을 다시 인쇄이다."\r"
을 인쇄해도 선이 지워지지 않으므로 이전 선을 통해 다시 인쇄하면 화면에 이전 문자열 중 일부가 남을 수 있습니다. 여분의 공백은 이전 행의 나머지 부분을 시도하고 지우는 데 사용됩니다.
"VT100 escape secquence"으로 검색하면 현재 줄을 지우거나 텍스트의 색을 변경하거나 화면의 특정 행/열로 이동하는 등의 작업을 수행 할 수있는 명령을 찾을 수 있습니다. 가장 많이 사용되는 VT100 시퀀스는 다음과 같습니다. 컬러 텍스트를 출력합니다. 그러나 당신은 또한 그들과 함께 다른 일을 할 수 있습니다.
\033[2K
printf("\033[2K\rprogress: %d percent", x);
현재 라인 (ESC [2K)를 삭제하는 이스케이프 시퀀스입니다 :
다음의 간단한 구현은 깔끔하게 라인을 삭제하고 다시 인쇄하는 것입니다.
여기에서 원하는 경우 더 창의적으로보실 수 있습니다. 커서 저장/복원 명령을 줄 끝까지 지우기 명령과 함께 사용하면 전체 행 대신 업데이트하려는 부분 만 지울 수 있습니다. goto 명령을 사용하여 화면의 특정 위치에 커서를 놓아 텍스트 등을 업데이트 할 수 있습니다.
VT102 시퀀스 또는 일부 전체 ANSI 이스케이프 시퀀스와 같은 고급 기능은 일반적으로 휴대용 가로 터미널 (터미널에 의해 나는 껍질을 의미하지는 않습니다, 나는 터미널 의미 : rxvt, xterm, 리눅스 터미널, 하이퍼 터미널 (윈도우) 등).
이식성 (및/또는 정상 API)을 원한다면 curses 또는 ncurses 라이브러리를 사용해야합니다.
어떻게 완료되었는지 알고 싶다면 그것이 어떻게 완료되었는지 알고 싶습니다. 그냥 특수 서식이 지정된 문자열을 화면에 출력하는 것입니다 (COMSPEC 셸 제외). 종류는 HTML이지만 구식입니다.
이것은 C의 특정 사항이 아니라는 것을 알아야합니다. 원한다면 셸 스크립트 나 스크립팅 언어 (메이크 파일조차도)로 할 수 있습니다. curses 나 ncurses를 사용할 수 없을 때 VT100 명령에 대해 아는 진정한 가치는 무엇입니까? – slebetman
글쎄, C는 화면의 개념을 이해하지 못한다. 따라서 모든 코드는 이식성이 떨어집니다. 필요에 따라 conio.h 또는 curses를 살펴 보시겠습니까? 다음에서 복사 : http://stackoverflow.com/questions/2347770/how-do-you-clear-console-screen-in-c – Igor
나는 다음과 같은 것을 찾고 있다고 생각합니다. http://stackoverflow.com/questions/2208126/erasing-terminal-output-on-linux 다음 코드는 찾고있는 코드입니다. http://stackoverflow.com/questions/1348563/clearing-output-of-a-terminal-program-linux-c-c – maisheri
글쎄, 터미널 유형에 따라 다릅니다. 어떤 유형은 "파괴적인"백 스페이스를 할 수 있고, 다른 것들은 커서를 왼쪽으로 치우거나 + 문자를 삭제할 필요가 있거나 심지어 CR + 전체 라인을 다시 쓸 수도 있습니다. 자세한 내용은 termcap/terminfo를보세요 ... – wildplasser