首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

fork()有关问题

2013-11-26 
fork()问题int main(void){printf(1 \n)fork()printf(2 \n)fork()printf(3 \n)exit(0)}运行的

fork()问题

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 
求大神解释! fork
[解决办法]
占沙发了。
是因为缓冲区的问题。printf linux io自带缓冲区的。
在你printf后数据其实还在缓冲区。当你fork子进程的时候
子进程连缓冲区中的数据一起copy了过去。也就是说
如果你在父进程中printf 1,然后fork子进程,子进程创建的时候
io缓冲区中已经有了1这个数据,这样当你printf2的时候子进程的缓冲区
其实是1,2两个数据。
[解决办法]
这个很好理解
1---->2----->3
  
[解决办法]
      
[解决办法]
-->3
  
[解决办法]
-->2------3
         
[解决办法]
-->3
\n是刷新缓冲,没有\n刷新,1在缓冲力也会被复制,刷新了,缓冲是空的,复制不到东西。
[解决办法]
沙发兄弟已经说的很对了,结贴吧。

热点排行