select 但无需等待 (POSIX)

select but without wait (POSIX)

我有文件 io 的典型设置,它适用于 select,例如:

int retval = select(maxfd +1 , &read_set, &write_set, &error_set, 0);   // timeout==0 -> endless

但现在我有一种情况,我想循环并检查每个周期是否有一个文件 select 准备就绪。我不想为此启动一个单独的线程! posix/linux 中是否有可以使用的东西,希望使用相同的 FD_SET 数据结构来检查文件状态而不等待它们?

是的,我可以将 select 的超时设置为最小值,但我希望没有那个也能完成。

POSIX 说:

To effect a poll, the timeout parameter should not be a null pointer, and should point to a zero-valued timespec structure.

因此对于您的应用程序,这样调用 select 就足够了:

struct timeval zero = { 0, 0 };
int retval = select(maxfd +1 , &read_set, &write_set, &error_set, &zero);