【问题标题】:recv function hangs the program before being calledrecv 函数在被调用之前挂起程序
【发布时间】:2015-04-13 15:33:38
【问题描述】:

假设我有

while(1){
    printf something
    printf something else
    recv(....);}

我知道recv应该等待发送一些东西,所以在此之前挂起控制台是正常的。但是recv在到达它的行之前挂起程序。例如,如果我运行任何这样的程序,两个printfs在它永远不会发生之前

有人知道为什么会这样吗?

【问题讨论】:

  • 你的程序编译没有任何错误吗?在while 之前,可能还有其他任何东西不允许代码到达。此外,如果您在问题中标记编程语言,您可以获得更好的响应。
  • 是的,完全没有错误。语言是C
  • 你能展示你的原始代码吗?
  • 尚未执行的代码怎么会对程序产生影响?我认为您的结论/假设需要重新审查。正如下面至少一个答案中所建议的那样,printf() 的输出可能没有被刷新到终端 - 如果您的 printf() 数据(来自格式字符串或正在格式化的数据之一) 不包含换行符...

标签: c freeze recv


【解决方案1】:

printf 可能正在发生,只是控制台输出没有被刷新。如果确实需要打印输出,应该考虑使用 fflush:http://www.cplusplus.com/reference/cstdio/fflush/

【讨论】:

  • 这似乎奏效了,我把 fflush(stdout) 放在每个 printf 放在 recv 函数周围。所以这是我的代码有问题还是由 C 的设计方式引起的奇怪行为?跨度>
  • 这与您的代码无关,也与 C 无关。这是使用缓冲 I/O 的结果,这取决于系统。您可以使用setbuf (cplusplus.com/reference/cstdio/setbuf) 控制缓冲。可能不建议使用,因为无缓冲 I/O 可能会慢得多(这就是为什么缓冲 I/O 是默认选择的原因)。
猜你喜欢
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 2017-10-24
相关资源
最近更新 更多