select()
을 사용하여 STDIN에서 단일 문자 (ENTER 없음)를 입력 할 수 있기를 원합니다.C select() timeout STDIN 단일 문자 (입력 없음)
사용자가 단일 키를 누르면 사용자가 ENTER를 누르지 않고 select()
이 즉시 반환됩니다.
int main(void)
{
fd_set rfds;
struct timeval tv;
int retval;
/* Watch stdin (fd 0) to see when it has input. */
FD_ZERO(&rfds);
FD_SET(0, &rfds);
/* Wait up to 2 seconds. */
tv.tv_sec = 2;
tv.tv_usec = 0;
retval = select(1, &rfds, NULL, NULL, &tv);
if (retval == -1)
perror("select()");
else if (retval)
printf("Data is available now.\n");
else
printf("No data within five seconds.\n");
exit(EXIT_SUCCESS);
}
이 방법은 효과가 있지만 끝내려면 ENTER 키를 눌러야합니다. 나는 단지 사용자가 키를 치고 ENTER를 기다릴 필요가 없다.
감사합니다.
기본적으로 버퍼링됩니다. 아래의 David가 말한 것처럼 버퍼링 동작을 제거해야합니다. –