我正在使用pipe(pipe_fds)
创建的管道进行读取/写入。因此,基本上使用以下代码,我正在从该管道中读取:
fp = fdopen(pipe_fds[0], "r");
每当我得到一些东西时,我都会通过以下方式打印:
while (fgets(buf, 200, fp)) {
printf("%s", buf);
}
我希望的是,当一定时间内没有数据从管道
中可读取
时,我想知道并执行以下操作:
printf("dummy");
这可以通过 select() 函数实现吗?如何实现请指点。
ret == 0
。 - Aaron D. Marascoselect()
返回-1,同时将errno
设置为EINTR
。 - Eugene Spipe_fds[0] + 1
时,这是什么意思?我只想让select
观察pipe_fds[0]
,而不观察其他任何东西,那么为什么要加上+1
?这有什么作用? - harifd_set
是一个固定大小的数组(大小为FD_SETSIZE
)。它有一个插槽,用于存储文件描述符可能具有的所有可能值(在大多数系统上最多可达1024个)。当您调用FD_SET
时,它使用文件描述符号码索引到数组中。从文档中可以看出:“select()
函数测试范围内的文件描述符为“0”到“nfds-1”,因此我们需要添加1以确保我们的文件描述符在范围内。 - Eugene S