Linux 의 getch(),화면 정리 문제 및 printf 가 즉시 표시 되 지 않 는 문제

4610 단어 c 언어
getch()
getch()는 리 눅 스에 서 사용 할 수 없습니다.처음에 사용 한 교체 방식 은 initscr()입 니 다.//getch()사용 전 endwin()초기 화;/getch()사용 후 로그아웃 하지만 문제 가 발견 되면 사용 합 니 다.
#include 
int getch(void) {
    struct termios tm, tm_old;
    int fd = STDIN_FILENO, c;
    if (tcgetattr(fd, &tm) < 0)
        return -1;
    tm_old = tm;
    cfmakeraw(&tm);
    if (tcsetattr(fd, TCSANOW, &tm) < 0)
        return -1;
    c = fgetc(stdin);
    if (tcsetattr(fd, TCSANOW, &tm_old) < 0)
        return -1;
    if (c == 3)
        exit(1);
    // Ctrl+C    
    return c;
}

질문
system("clear")에 문제 가 있 습 니 다.환경 변 수 는 설정 되 어 있 지 않 지만 clear 는 환경 변수 이기 때문에 puts("\033[2J")를 사용 합 니 다.ANSI/VT 100 터미널 제어 탈출 시퀀스 ANSI 제어 코드
printf 가 바로 표시 되 지 않 는 문제:
  • printf 행 버퍼 의 개념 및 버퍼 리 셋 조건
  • 줄 버퍼 가 무엇 입 니까?
  • 입 출력 이 줄 바 꿈 자 를 만 났 을 때 이러한 버퍼 는 줄 버퍼 로 정의 합 니 다.표준 입력 과 표준 출력 은 모두 줄 버퍼 입 니 다.stderr 는 버퍼 가 없습니다.fflush 나 exit 를 거치 지 않 고 바로 인쇄 합 니 다
  • 버퍼 를 도입 하 는 목적 은 무엇 입 니까?
  • 운영 체 제 는 IO 작업 을 줄 이기 위해 버퍼 를 설 치 했 습 니 다.버퍼 가 가득 차 면 IO 를 조작 합 니 다.효율 을 높이 기 위해 서 입 니 다.CUP 대기 IO 를 줄 이기 위해 CPU 자원 을 낭비 합 니 다.
  • 버퍼 리 셋 조건:1.프로 세 스 종료.2.만난다.버퍼 를 새로 고 치 는 역할 을 합 니 다.3.버퍼 가 가득 합 니 다.printf 함수 의 버퍼 크기 는 1024 바이트 입 니 다.버퍼 크기 를 초과 하면 버퍼 가 새로 고 쳐 집 니 다.4.버퍼 fflush(stdout)를 수 동 으로 새로 고침 합 니 다.
  • 좋은 웹페이지 즐겨찾기