Programing/C and CPlusPlus
[C] Key Press
mjune.kim
2019. 3. 4. 14:45
void set_mode(int want_key) { static struct termios old, newk; if (!want_key) { tcsetattr(STDIN_FILENO, TCSANOW, &old); return; } tcgetattr(STDIN_FILENO, &old); newk = old; newk.c_lflag &= ~(ICANON | ECHO); tcsetattr(STDIN_FILENO, TCSANOW, &newk); } int get_key() { int c = 0; struct timeval tv; fd_set fs; tv.tv_usec = tv.tv_sec = 0; FD_ZERO(&fs); FD_SET(STDIN_FILENO, &fs); select(STDIN_FILENO + 1, &fs, 0, 0, &tv); if (FD_ISSET(STDIN_FILENO, &fs)) { c = getchar(); set_mode(0); } return c; } void run() { int c; while (1) { set_mode(1); while(!(c = get_key())) usleep(10000); cout << "key = " << c << endl; if (c == 101) break; } }