2013-07-25 2 views
1

최근 Ada 프로그래밍 언어를 발견했지만 C 프로그래밍 언어에도 문제가 있습니다. 양식 공급이 예상대로 작동하지 않습니다.폼 피드가 화면을 지우지 않습니다.

에이다 예 : C에서

with Ada.Text_IO; use Ada.Text_IO; 

procedure Main is 
begin 
    New_Page; 
end Main; 

같은 :

#include <stdio.h> 

int main (void) { 
    printf ("\f"); 
    return 0; 
} 

두 단지 텀의 새로운 라인의 결과뿐만 아니라 리눅스 콘솔 (모두 zsh을 포함). 그들은 대신 Ctrl-L처럼 화면을 지워야합니다.

# ./main | cat -A 

를 호출 할 때

나는

^L 

얻을 그러나 나는

# cat -A 

를 입력하고

Ctrl-L 
를 입력하면

나는

^L 

도 얻습니다.

누구든지 양식 피드 작업을 Ctrl-L로 만드는 방법을 알고 있습니까?

도움 주셔서 감사합니다.

+0

'Strg-L'에 대해 들어 본 적이 없다. 'ctrl-L'과 같은가요? –

+1

"Strg"(Steuerung)는 "Ctrl"(키보드)의 독일어입니다. – ajb

+0

@ user2616704 ctrl-L 문자를 출력하여 화면을 지울 이유가 확실하지 않습니다.어쩌면 일부 OS 또는 일부 터미널 에뮬레이터 또는이 작업을 수행하는 다른 소프트웨어가있을 수 있지만 표준이 아닙니다. 어쨌든 Ada 나 C 언어의 언어 문제는 아닙니다. – ajb

답변

5

this article에 따르면 화면을 지우는 적절한 방법은 printf("\033[2J");입니다 (터미널이 ANSI 이스케이프 문자열을 지원하고 VT100 호환 가능일 경우). GNOME 터미널을 사용하는 Linux Mint와 xterm 및 PuTTY를 사용하는 Windows에서이 작업이 작동하는지 확인할 수 있습니다.

^L 화면을 지우는 것은 휴대용 규정처럼 보이지 않습니다. 예를 들어 HP-UX에서 POSIX 쉘을 사용하는 경우 ^L을 쉘에 전달해도 아무 것도 수행하지 않습니다. 이것은 bash과 유사합니다.

인쇄 \f은 일부 터미널 만 제외하고 화면을 지 웁니다. 예를 들어 Windows에서 Red Hat 호스트에 로깅하는 경우 PuTTY에서는 printf("\f");으로 화면을 지울 수 있지만 xterm에서는 그렇지 않습니다 (후자의 경우 빈 줄이 표시됨). 당신은 수도, 더 큰 프로그램에서

with Ada.Text_IO; use Ada.Text_IO; 

procedure Main is 
begin 
    Put (ASCII.ESC & "[2J"); 
end Main; 

:

+1

쉘 * 그 자체가 아니라 터미널 에뮬레이터 (또는 콘솔 화면에 있다면 드라이버)가 될 것입니다. –

+3

그 이스케이프 시퀀스는 'ANSI'터미널 용입니다 - ANSI 표준 이스케이프 시퀀스를 준수하는 터미널입니다. 옛날 옛적에 많은 대안적인 '녹색 화면'터미널 (때로는 '오렌지 스크린'또는 다른 색상이 적절 함)이 있었으며, 각기 고유 한 고유 한 일련의 이스케이프 시퀀스가있었습니다. 그로 인해'curses' 라이브러리와 첫 번째'termcap'과'terminfo'가 변형 된 동작을 설명하는 방법으로 생성되었습니다. 그런 다음 모든 사람들이 실제 녹색 화면 터미널 대신 터미널 에뮬레이터를 사용하게되고 갑자기 모든 것이 더 쉬워지고 ANSI 제어 코드가 우세하게되었습니다. –

+1

그래,하지만 단순히 vt100 호환 터미널을 사용 중이며 \ 033 [2J "'인쇄가 여전히 올바르지 않다고 가정합니다. 필자는 콘솔에서 VT100과 호환되지 않는 시스템을 정기적으로 사용합니다. 화면에는 실제'[2J' 문자가 표시됩니다. –

2

은 내가 에이다 버전을 추가 할 수 @Nobilis '대답을 편집하려하지만 화면이 해제되었을 때 내 편집을 잃었어요 생각, 그래서 여기에 또 다른 시도이다 "플러시 (Flush)"로 따라해야합니다. call은 I/O 패키지에 의해 버퍼링 될 수 있기 때문에 특수 터미널 명령임을 인식하지 못할 수 있습니다. (C와 같음, 나는 생각한다 : fflush(stdout);.)

관련 문제