「readmsg」という名前の実行可能ファイルを 1 つ作成します。そのソースコードは以下の通りです。は、シェルでselect()
のみ実行する場合に機能します (の出力を確認できます)。readmsg
timeout
しかし、コマンドで FIFO ファイルを作成すると、シェルmknod /tmp/message p
で実行されます。readmsg < /tmp/message
その結果、 にselect()
何かを書かないと は戻れません/tmp/message
。私の質問は、なぜtimeout
出力を取得できないのですか?
「readmsg」のソースコード:
#define STDIN 0
fd_set fds;
struct timeval tv;
while (1) {
FD_ZERO(&fds);
FD_SET(STDIN, &fds);
tv.tv_sec = 1;
tv.tv_usec = 0;
ret = select(STDIN + 1, &fds, NULL, NULL, &tv);
if (ret > 0) {
printf("works\n");
if (FD_ISSET(STDIN, &fds)) {
// read ...
}
} else if (ret == 0) {
printf("timeout!!\n");
} else {
printf("interrupt\n");
}
}