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

为什么fork后,重定向会输出两次,疑惑

    来源: 互联网  发布时间:2016-11-30

    本文导语:    #include  #include  int main() {      pid_t pid;      int bb = 10;      printf("tttTestn");      if ((pid = fork()) == 0)      {          bb++;      }      else          sleep(2);      printf("%dn", bb);      return 0...

 
#include 
#include 
int main()
{
     pid_t pid;
     int bb = 10;
     printf("tttTestn");
     if ((pid = fork()) == 0)
     {
         bb++;
     }
     else
         sleep(2);
     printf("%dn", bb);

     return 0;
}


在终端直接运行的话,是
tttTest
11
10
但是如果a.out > tt
然后看tt文件时,
会出现两次
tttTest,
这是为什么?

|
楼主好好看看I/O的缓冲机制。

标准输出是行缓冲,重定向后,标准输出是全缓冲的

当调用fork时tttTest这行仍保存在缓冲中,并随着数据段复制到子进程缓冲中。这样,这一行就分别进入父子进程的输出缓冲中,余下的输出就接在了这一行的后面。

如果要想只打印一行,可以如下:

#include 
#include 
int main()
{
     pid_t pid;
     int bb = 10;
     printf("tttTestn");

    fflush(stdout);  //插入这一行    

     if ((pid = fork()) == 0)
     {
         bb++;
     }
     else
         sleep(2);
     printf("%dn", bb);

     return 0;
}



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












  • 相关文章推荐
  • NOSQL iis7站长之家
  • unix中的fork2与fork有设么区别?
  • 还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
  • 程序在fork前申请了内存若干,在fork后子进程是否需要释放父进程之前申请的内存
  • fork()函数入门级问题:fork()与进程数
  • 一个fork的问题
  • 新手的问题关于fork?
  • 如何理解fork函数返回2次啊?
  • 急于明白Fork的用法.请提供中文解释.谢谢.
  • 关于fork的不解
  • 弱弱的问:fork和exec的区别是什么?
  • 关于fork的讨论
  • 关于fork的疑问?
  • fork() 父子进程执行顺序问题
  • 关于fork创建进程的一个问题
  • exit和fork是什么关系?他们是怎么配合使用的?
  • fork函数,在线等待,马上结贴。谢谢!!!!!!!!!!!!
  • fork的问题
  • 请教 linux的fork从什么版本开始支持COW?
  • c++ 和 fork


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3