select()
を使用して、STDINから1つのchar(ENTERなし)を入力したいと考えています。C select()timeout STDIN single char(ENTERなし)
したがって、ユーザーが1つのキーを押すと、select()
はすぐに戻り、ユーザーがEnterキーを押すのを待つ必要がありません。
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氏が述べたように、バッファリングの動作を削除する必要があります。 –