我创建了一个名为“readmsg”的可执行文件。它的源代码如下。如果select()
我只readmsg
在 shell 中执行(我可以看到输出timeout
)。
但是,如果我通过 command: 创建一个 FIFO 文件mknod /tmp/message p
,并readmsg < /tmp/message
在 shell 中执行。结果,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");
}
}