代码正在给出意外的结果 我只是在尝试Frk()C++函数,但我发现了惊人的结果 #include<stdio.h> #include <unistd.h> #include <sys/wait.h> #include <sys/types.h> #include <signal.h> int main() { int x=0; int i; for( i=0;i<2;i++) { fork(); x=x+5; printf("%d\n",x); sleep(2); } return 0; } #包括 #包括 #包括 #包括 #包括 int main() { int x=0; int i; 对于(i=0;i

代码正在给出意外的结果 我只是在尝试Frk()C++函数,但我发现了惊人的结果 #include<stdio.h> #include <unistd.h> #include <sys/wait.h> #include <sys/types.h> #include <signal.h> int main() { int x=0; int i; for( i=0;i<2;i++) { fork(); x=x+5; printf("%d\n",x); sleep(2); } return 0; } #包括 #包括 #包括 #包括 #包括 int main() { int x=0; int i; 对于(i=0;i,c,C,标准输出流通常是行缓冲的。当您在打印时包含\n时,您刷新流,并且在下一个fork()之前将5打印到控制台被调用。当您不包含它时,它只是挂在某个地方的缓冲区中,当调用fork时,它会与其他所有内容一起被复制。printf只保证在执行\n时刷新缓冲区如果您不执行,则其他内容可以写入缓冲区,然后刷新他后来用不同顺序的元素(取决于添加到缓冲区的时间)。非常感谢,先生……知道原因了……很抱歉,我找不到这样的帖子……我以后会小心的 int main() { int x=0; int i; for(

标准输出流通常是行缓冲的。当您在打印时包含
\n
时,您刷新流,并且在下一个
fork()之前将
5
打印到控制台
被调用。当您不包含它时,它只是挂在某个地方的缓冲区中,当调用
fork
时,它会与其他所有内容一起被复制。

printf
只保证在执行
\n
时刷新缓冲区如果您不执行,则其他内容可以写入缓冲区,然后刷新他后来用不同顺序的元素(取决于添加到缓冲区的时间)。

非常感谢,先生……知道原因了……很抱歉,我找不到这样的帖子……我以后会小心的
int main()
{
 int x=0;
  int i;
  for( i=0;i<2;i++)
  {
    fork();
    x=x+5;
    printf("%d  ",x);
   sleep(2);
  }
  return 0;
}