我有文件io的典型设置,适用于选择:
int retval = select(maxfd +1 , &read_set, &write_set, &error_set, 0); // timeout==0 -> endless
但是现在我有一种情况,我希望循环并检查每个循环,如果其中一个文件选择器准备就绪。我不想为此开始一个单独的线程!是否可以使用posix / linux中的某些东西,希望使用相同的FD_SET数据结构来检查文件状态而不等待它们?
是的,我可以将select
的超时设置为最小值,但我希望没有它可以完成。
答案 0 :(得分:1)
POSIX说:
要实现轮询,timeout参数不应该是空指针,而应指向零值
timespec
结构。
因此,对于您的应用程序,应该像这样调用select
就足够了:
struct timeval zero = { 0, 0 };
int retval = select(maxfd +1 , &read_set, &write_set, &error_set, &zero);