将 select() 与管道一起使用
我正在读取/写入由pipe(pipe_fds)
创建的管道。因此,基本上使用以下代码,我从该管道中读取:
fp = fdopen(pipe_fds[0], "r");
每当我得到一些东西时,我都会通过以下方式打印出来:
while (fgets(buf, 200, fp)) {
printf("%s", buf);
}
我想要的是,当在一定时间内管道上没有出现任何内容时, 阅读
,我想了解它并执行以下操作:
printf("dummy");
这可以通过 选择()?任何关于如何做到这一点的指示都会很棒。
I am reading/writing to a pipe created by pipe(pipe_fds)
. So basically with following code, I am reading from that pipe:
fp = fdopen(pipe_fds[0], "r");
And when ever I get something, I print it out by:
while (fgets(buf, 200, fp)) {
printf("%s", buf);
}
What I want is, when for certain amount of time nothing appears on the pipe
to read
from, I want to know about it and do:
printf("dummy");
Can this be achieved by select() ? Any pointers on how to do that will be great.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
假设您想等待 5 秒钟,然后如果没有任何内容写入管道,则打印出“dummy”。
Let's say you wanted to wait 5 seconds and then if nothing was written to the pipe, you print out "dummy."
IIRC,
select
有一个超时,然后您可以使用FD_ISSET
检查它是否是 I/O 返回。IIRC,
select
has a timeout that you then check withFD_ISSET
to tell if it was I/O or not that returned.