当前位置:  技术问答>linux和unix

fork()问题

    来源: 互联网  发布时间:2017-05-03

    本文导语:  int main(void) { printf("1 n"); fork(); printf("2 n"); fork(); printf("3 n"); exit(0); } 运行的结果是这样的: 1  2  3  2  3  3  3 ; 然后把'n'去掉,变成这样的代码: int main(void) { printf("1 "); fork(); printf("2 "); fork(); printf("3 "); exit(0); } 后,...


int main(void)
{
printf("1 n");
fork();
printf("2 n");
fork();
printf("3 n");
exit(0);
}
运行的结果是这样的:






3 ;
然后把'n'去掉,变成这样的代码:
int main(void)
{
printf("1 ");
fork();
printf("2 ");
fork();
printf("3 ");
exit(0);
}
后,结果变成这样:
1 2 3 1 2 3 1 2 3 1 2 3 
求大神解释!

|
占沙发了。
是因为缓冲区的问题。printf linux io自带缓冲区的。
在你printf后数据其实还在缓冲区。当你fork子进程的时候
子进程连缓冲区中的数据一起copy了过去。也就是说
如果你在父进程中printf 1,然后fork子进程,子进程创建的时候
io缓冲区中已经有了1这个数据,这样当你printf2的时候子进程的缓冲区
其实是1,2两个数据。

|
这个很好理解
1---->2----->3
  |      |-->3
  |-->2------3
         |-->3
n是刷新缓冲,没有n刷新,1在缓冲力也会被复制,刷新了,缓冲是空的,复制不到东西。

|
沙发兄弟已经说的很对了,结贴吧。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 奇怪:程序一fork子进程时就停住了,似乎根本不能fork子进程啊?
  • unix中的fork2与fork有设么区别?
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • 如何理解fork函数返回2次啊?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork之后的输出
  • exit和fork是什么关系?他们是怎么配合使用的?
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • 请教 linux的fork从什么版本开始支持COW?
  • c++ 和 fork
  • "fork(2)" 中这个2表示什么意思
  • fork函数的源代码在哪呢
  • 关于fork函数
  • fork函数的理解。。
  • linux的fork()函数
  • 创建一个子进程,什么时候该用clone()而不是fork()?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,