2010년 4월 3일 토요일

getch(), getchar(), getche() 가 필요한 이유

< getch(), getchar(), getche() 가 필요한 이유 >

* 공통 기능
  • 키보드로부터 문자 하나를 입력 받아 리턴한다.
  • 키보드에서 문자가 눌러질 때까지 무한대로 대기한다.
  • 키보드 입력시까지 대기시키는 목적으로 많이 사용된다.
* getch()
  • 에코 기능이 없다.
  • 입력받은 문자를 리턴한다.
  • 확장키 코드가 입력되었을 때는 0을 리턴한다. 이 경우 getch를 한번 더 호출하면 확장키 코드를 얻을 수 있다.
* getchar()
  • getch() 함수와 비슷하다. 유닉스에서 사용가능
* getche()
  • getch() 함수와 같되 에코 기능이 있다.

### int fflush(FILE * stream);
  • 스트림에 할당되어 있는 버퍼를 비운다.
  • 버퍼를 비운다는 의미는 입력, 출력에 따라 의미가 다르다.
    • 출력시 : 출력 대기중에 임시적으로 버퍼에 있던 데이터들이 파일에 기록된다.
    • 입력시 : 버퍼에 있던 데이터를 모두 지운다. 그리고 다시 새로운 데이터를 입력 받게 된다.
  • 버퍼를 비운다는 말은 버퍼에 들어있는 데이터를 없앤다는 의미이다.
  • fflush 실행 후에도 스트림은 여전히 개방된 상태로 남는다.
  • 성공시 0을 리턴, 에러 발생시 EOF 리턴

### linux에는 getch() 함수가 없기 때문에 함수를 만들어 사용해야 한다.

#include <termios.h>
#include <unistd.h>

int mygetch(void)
{
    struct termios oldt, newt;
    int ch;

    tcgetattr( STDIN_FILENO, &oldt );

    newt = oldt;
    newt.c_lflag &= ~( ICANON | ECHO );
    tcsetattr( STDIN_FILENO, TCSANOW, &newt );

    ch = getchar();
    tcsetattr( STDIN_FILENO, TCSANOW, &oldt );

    return ch;
}





댓글 없음:

댓글 쓰기