【发布时间】:2015-03-15 07:34:05
【问题描述】:
我正在使用选择系统来等待输入。我也在循环中执行此操作。 这是代码。
int main()
{
fd_set rfds;
struct timeval tv;
FD_ZERO(&rfds);
FD_SET(0,&rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
while(1)
{
select(1,&rfds,NULL,NULL,&tv);
if(FD_ISSET(0,&rfds))
{
write(STDOUT_FILENO,"yes",3);
FD_CLR(0,&rfds);
}
tv.tv_sec = 5;
tv.tv_usec = 0;
}
return 0;
}
现在的问题是 select 调用仅在第一次正常工作。如果我在前 5 秒内给出输入,我得到 yes 作为输出,但在接下来的迭代中 fd(0) 保持未设置,无论我是否是否提供任何输入。任何想法我如何解决这个问题。
【问题讨论】:
-
那不是 c++(更像 c)
-
@Axalo 好吧,我的错。你能帮我解决这个问题吗?
-
@Axalo 顺便说一句,那是 c++
-
你应该使用poll(2)而不是
select(因为poll对C10K problem更友好) -
@Axalo 那是 c++,c 标准 (5.1.2.2.1) 需要
int main(void)或int main(int argc, char *argv[])。
标签: c unix network-programming system-calls