私はbeejからselect()を使ってプログラムを理解しようとしています。なぜユーザーからの入力が端末にエコーされていますか?
キーを押すと、プログラムは「キーが押されました」と表示します。しかし、プログラムが終了すると、同じキーが端末にエコーされ、「コマンドが見つかりません」というエラーが表示されます。なぜ押されたキーが端末にエコーされているのですか?
ソースコード:
/*
* select.c demo
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#define STDIN 0
int main(int argc, char *argv[]){
struct timeval tv;
fd_set readfds;
tv = (struct timeval){0};
tv.tv_sec = 2;
tv.tv_usec = 5000000;
FD_ZERO(&readfds);
FD_SET(STDIN, &readfds);
select(STDIN + 1, &readfds, NULL, NULL, &tv);
if (FD_ISSET(STDIN, &readfds)){
printf("A key was pressed\n");
}
else{
printf("Timed Out!\n");
}
return 0;
}
出力:
[email protected]:Socket_Programming$
[email protected]:Socket_Programming$ ./select
f
A key was pressed
[email protected]:Socket_Programming$ f
f: command not found
右ここにテキストとして、コードだけでなく、出力を貼り付けてください。 –
さて、 "キー"を 'read() 'しておらず、入力可能性しか検出していません。 「キー」は入力バッファに残ります。 –
シェルに行ってみよう – PSkocik