我在学习C,我对时间有疑问。在一次练习中,我:
while(1){
while((sockacc = accept(ds_sock,&client,&length)) == -1);
--other instructions--
}有人能告诉我第二次的作用是什么吗?我知道接听电话是用来做什么的。我不明白,如果身体里没有任何东西,为什么要用一段时间。
发布于 2014-03-31 21:30:32
您可以将整个代码重写为:
while(1){
do {
sockacc = accept(ds_sock,&client,&length);
}
while(sockacc == -1);
--other instructions--
}while语句中的部分只是在每个循环迭代中执行,并且它本身决定循环是否终止。
发布于 2014-03-31 23:31:48
退后一步。记住…的意义
while(c) s;只是一种简短的写作方式:
CONTINUE:
if (c)
goto BODY;
else
goto BREAK;
BODY:
s;
goto CONTINUE;
BREAK: ;当然,break;和continue;是goto BREAK;和goto CONTINUE;。循环并不神奇;它们只是编写一堆goto语句的一种简短而愉快的方式。
所以你的节目:
while(1){
while((sockacc = accept(ds_sock,&client,&length)) == -1);
--other instructions--
}是一种更好的写作方式:
OUTER_CONTINUE:
if (1)
goto OUTER_BODY;
else
goto OUTER_BREAK;
OUTER_BODY:
{
INNER_CONTINUE:
if ((sockacc = accept(ds_sock,&client,&length)) == -1)
goto INNER_BODY;
else
goto INNER_BREAK;
INNER_BODY:
;
goto INNER_CONTINUE;
INNER_BREAK: ;
--other instructions--
}
goto OUTER_CONTINUE;
OUTER_BREAK: ;发布于 2014-03-31 21:40:31
accept()能够返回失败(-1)的原因之一是EINTR (中断的系统调用)。此代码中的内环如果返回错误EINTR或任何其他错误,就会重试accept(),因为它不测试内环体中errno的值。如果错误是EBADF (错误的文件描述符,指示套接字文件描述符不是套接字文件描述符,或者以某种方式被销毁),这可能是性能问题。通常,您会在循环的正文中看到一个测试,以确保错误是代码所期望的有限集合之一。
https://stackoverflow.com/questions/22772479
复制相似问题