recv函数在被调用之前挂起程序

recv函数在被调用之前挂起程序,c,freeze,recv,C,Freeze,Recv,假设我有 while(1){ printf something printf something else recv(....);} 我知道recv应该等待发送某些内容,因此在此之前挂起控制台是正常的。但是recv在到达程序行之前挂起程序。例如,如果我运行任何类似的程序,则在它发生之前的两个printf都不会发生 有人知道为什么会发生这种情况吗?很可能发生了printf,只是控制台输出没有被刷新。如果你真的需要打印输出,你应该考虑使用FFLUHS:./P>你的程序编译没

假设我有

while(1){
    printf something
    printf something else
    recv(....);}
我知道recv应该等待发送某些内容,因此在此之前挂起控制台是正常的。但是recv在到达程序行之前挂起程序。例如,如果我运行任何类似的程序,则在它发生之前的两个printf都不会发生


有人知道为什么会发生这种情况吗?

很可能发生了
printf
,只是控制台输出没有被刷新。如果你真的需要打印输出,你应该考虑使用FFLUHS:./P>你的程序编译没有任何错误吗?可能还有其他任何东西不允许代码在
时到达
。另外,如果你在问题中标记编程语言,你可以得到更好的回答。是的,一点错误也没有。语言是CCA。你能展示你的原始代码吗?尚未执行的代码怎么会对程序产生任何影响?我认为你的结论/假设需要重新审视。正如下面至少一个答案中所建议的,可能是
printf()
的输出没有被刷新到终端-如果
printf()
数据(来自格式字符串或正在格式化的数据之一)不包含换行符,这很可能是一种情况……这似乎起到了作用,我把fflush(stdout)在每次printf围绕recv函数放置之后。那么这是我的代码的问题还是wierd行为是由C的设计方式引起的?这与您的代码无关,或者实际上是C。这是使用缓冲I/O的结果,缓冲I/O依赖于系统。您可以使用
setbuf
()控制缓冲。可能不可取,因为无缓冲I/O可能会慢得多(这就是缓冲I/O是默认选择的原因)。