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

这是我的小程序:

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

这个代码的输出是12121212 ,我问:
为什么打印超过122

由于printf被缓冲,只有在程序退出时才打印文本。 尝试在每次打印后刷新stdout。

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

例如

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

如果printf()进入一个终端,它默认是行缓冲的。 只需打印"1\n""2\n"解决您的问题。