select()无法正常工作,错误在哪里?
给定以下代码,每次调用select时都会有一秒钟的睡眠。但是,睡眠仅在第一次呼叫时发生,所有后续呼叫都不会导致延迟:select()无法正常工作,错误在哪里?,c,linux,select,C,Linux,Select,给定以下代码,每次调用select时都会有一秒钟的睡眠。但是,睡眠仅在第一次呼叫时发生,所有后续呼叫都不会导致延迟: #include <stdio.h> #include <stdlib.h> int main() { struct timeval tv; tv.tv_sec = 1; tv.tv_usec = 0; for (;;) { /* Sleep for one second */ in
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
for (;;)
{
/* Sleep for one second */
int result=select(0, NULL, NULL, NULL, &tv);
printf("select returned: %d\n",result);
}
}
为什么除第一次调用外,所有要选择的调用都会立即返回
编译器:GCC4.9.2
操作系统:Centos 7 Linux
内核信息:3.10.0-327.36.3.el7.x86_64
在Linux上,选择modifies timeout(修改超时)以反映未超时的时间量
睡大多数其他实现都不这样做。POSIX.1许可证
无论是哪种行为。当Linux代码
读取超时被移植到其他操作系统,并且当代码
移植到Linux,可对多个选择重复使用struct timeval
在循环中,无需重新初始化。考虑超时时间
选择返回后罚款
由于第一次运行以超时结束,tv值重置为0秒。解决方案:每次跑步时重新初始化电视。从手册页:
在Linux上,选择modifies timeout(修改超时)以反映未超时的时间量
睡觉
因此,在调用select(选择)之前,请先设置电视[在循环中]以便更好地使用。顺便说一句,我更喜欢旧的选择