입력을 기다리는 getchar() 함수 종료방법 문의드립니다.

hahaite의 이미지

안녕하세요.

인터넷에서 키보드의 키를 누른 순간 동작을 하는 소스를 구해
아래와 같이 쓰레드에 적용하여 잘 쓰고 있었습니다.

void* getch(void* pData)
{
int ch;

struct termios buf;
struct termios save ;
// CQueueMsg* queueMsg ;
// msg_data mData ;

pData = NULL ; // for avoid warning at compile...
// queueMsg = CQueueMsg::getQueue() ;

while(1)
{
tcgetattr(0, &save) ;
buf = save ;

// buf.c_lflag &= ~(ICANON | ECHO) ;
buf.c_cc[VMIN] = 1 ;
buf.c_cc[VTIME] = 2 ;
buf.c_lflag &= ~ICANON ;
buf.c_lflag &= ~ ECHO ;

tcsetattr(0, TCSAFLUSH, &buf) ;
ch = getchar() ;
tcsetattr(0, TCSAFLUSH, &save) ;

// mData.mainMsg= MSG_KEYBOARD ;
// mData.ch = ch ;
// queueMsg->push_back(&mData) ;
// printf("in getch... pushback : %x\n", mData.mainMsg) ;

if(ch == 'q' || ch == 'Q')
break ;

usleep(1000) ;
}
return NULL ;
}

키보드에서 q를 누르면 프로그램이 종료되도록 하였구요.
그렇게 잘 쓰다가...

특정 리모콘을 누르면 종료되도록 했는데 Hangup 이 되길래 디버깅을 해 보니,
위 getchar() 에서 키보드 입력이 들어올 때까지 블럭이 되었더군요.

흥~ 하고 키보드가 눌려진것처럼 하면 되겠다~ 싶어 이것저것 시도를 해 보았는데,
의외로 뜻대로 안되네요.

정리하면 위 상황에서 키보드의 'q'를 눌러서가 아닌, 다른 방법으로
getchar() 함수를 벗어나고 싶은데요.

고수분들의 조언 부탁드립니다.

그럼, 즐거운 하루 되세요.