日期:2014-05-16  浏览次数:20663 次

用fork()往文件里写数据问题
有这样一个程序:
      #include   <stdio.h>  
      main()
      {
          FILE   *fp;
          int   pid;  
          char   msg1[]= "Test   1   2   3..\n ";
          char   msg2[]= "Hello,hello ";
          if((fp=fopen( "testfile ", "w "))==NULL)
                return   0;
          fprintf(fp, "%s ",msg1);
          if((pid=fork())==-1)
                return   0;
          fprintf(fp, "%s ",msg2);
          fclose(fp);
          return   1;
      }
      对文件testfile中的输出结果有点不理解,
      结果是:Test   1   2   3..
                      Hello,hello
                      Test   1   2   3..
                      Hello,hello
      ?

------解决方案--------------------
fork成功后,子进程是父进程的一个完美的复制品,包括文件缓冲区,所以fprintf(fp, "%s ",msg1);只执行了一次,但是在fclose(fp);时两个进程的文件缓冲区都写到文件里了。
------解决方案--------------------
fork之前调用:
setbuf(fp, 0);
就不会有问题了