为什么fork()和printf()输出比我预测的更多?

时间:2014-06-10 08:57:18

标签: c linux printf fork

这是我的小程序:

#include <unistd.h>
#include <stdio.h>
int main() {
  printf("1");
  fork();
  printf("2");
  fork();
  return 0;
}

此代码的输出为12121212,我问:
为什么打印时间超过122

3 个答案:

答案 0 :(得分:7)

因为printf是缓冲的,只有在程序退出时才会打印文本。尝试在每次打印后刷新标准输出。

答案 1 :(得分:0)

另一种解决方案是使用write + sprintf

e.g。

char s[10];
sprintf(s,"four is %d",4);
write(STDOUT_FILENO,s,sizeof(s));

答案 2 :(得分:0)

如果printf()转到终端,则默认为线路缓冲。只需打印"1\n""2\n"即可解决您的问题。