我有以下代码
fd_set set;
struct timeval timeout;
printf("first printf\n"); // displayed
FD_ZERO(&set);
timeout.tv_sec = 1;
FD_SET(fileno(stdout), &set);
if (select(FD_SETSIZE, NULL, &set, NULL, &timeout)!=1)
{
stdout_closed = true;
return;
}
printf("second printf\n"); // Not displayed
我正在尝试在
printf("second printf\n");
之前检查写入标准输出的能力。但使用此代码,选择返回一个值!= 1
,然后 printf 仍然无法访问。看起来 select 返回“不可能”来写入标准输出。
你能解释一下这种行为吗?
对 select() 的调用返回 -1,并且 errno 为 22(无效参数),因为超时期间有垃圾值。试试这个:
FD_ZERO(&set);
timeout.tv_sec = 1;
timeout.tv_usec = 0; /* ADD THIS LINE to initialize tv_usec to 0 so it's valid */
它应该可以工作。