int main(void) { int i; for (i = 0; i < 2; i++) { fork(); printf("-"); } return 0; }
我真的服牛客了,我刷一个月题了,这个题之前做过一模一样的,那个题答案是8正确,这个答案是6正确。
正确答案应该是8。
printf()是行缓冲的,遇到\n或者程序return之前,要打印的内容会暂存在缓冲区内,并不是直接显示在标准输出上。
因此第1次fork之后,两个进程的"-",都存在了各自的缓冲区中,没有直接输出到标准输出上
第2次fork的时候,新生成的两个子进程都会复制其父进程的缓冲区状态,因此,此时的4个进程缓冲区都已经有一个'-',然后再次printf('-'),于是一共 8 个'-'。
如果是printf("-\n")的话,每循环一次就会直接打印"-"到标准输出,就是2 + 4 = 6个。