两蚊鸡 发表于 2007-7-27 10:23

大家都来说说这两段程序的输出结果是什么

以下代码是基于linux系统的:
#include<sys/types.h>
#include<unistd.h>
main()
{
    pid_tpid;
    printf("before fork() ");
    pid = fork();

    if(pid<0)
    {
      printf("error\n");
    }
   else if(pid==0)
    {
      printf("this is child\n");
    }
    else if(pid>0)
    {
      printf("this is parent!\n");
    }
}



#include<sys/types.h>
#include<unistd.h>
main()
{
    pid_tpid;
    printf("before fork()\n ");   /*请注意这里*/
    pid = fork();

    if(pid<0)
    {
      printf("error\n");
    }
   else if(pid==0)
    {
      printf("this is child\n");
    }
    else if(pid>0)
    {
      printf("this is parent!\n");
    }
}


大家可以分析一下这两段程序输出的结果分别是什么,并且说一下为什么会是这样。

海上飞洪 发表于 2007-7-27 13:21

第一段结果:before fork() this is child
                   before fork() this is parent!
第二段结果:before fork()
                  this is child
                  this is parent!
应该是第一段结果多了个before fork()吧
我只知道,调用fork(),会先返回子进程的PID,再返回创建子进程的父进程的PID

海上飞洪 发表于 2007-7-27 13:27

跟踪了一下,发现before fork()在两段代码中都只执行了一次,但却不知为何第一段会多输出了一次,难道是编译器输出的问题?

Leon001 发表于 2007-7-27 14:22

printf()是line   buffer的,也就是碰到换行时才将当前缓冲输出

onttpi 发表于 2007-7-27 15:52

学习了。。。

两蚊鸡 发表于 2007-7-28 13:23

well,一楼和四楼正解。
页: [1]
查看完整版本: 大家都来说说这两段程序的输出结果是什么