(5)fork()

一周没更新了吧。前几天ACM省赛,郁闷惨了。我怎么会遇到这种恶心事。昨天开始把我的虚拟机换成真正的操作系统了。那个累阿。。。。 
闲话不说,继续PROGRAMMING~~ 
我觉得题目这个函数很有必要多说一点。这个是我目前知道唯一linux下派生新线程的东东。一定要熟练运用。不然以后你写的服务器只能服务一个人鸟。嘻嘻。 
打个比方,fork函数的意思是。我是个领导(服务器主进程)。我在办公室。你(客户)来找我有事(accept连接上了),我分派(fork)给小弟(子线程)干。我还在办公室。你们两个干的什么我不知道了。 
只说理论不容易懂fork。 
看个程序先。 
  main()   
  {   
      pid_t   pid;   
      if((pid=fork())<0)   
      {   
          printf("error!");   
      }   
      else   
      {   
            if(pid==0)   
            printf("a/n");   
            else   
            printf("b/n");   
      }   
  }   
    结果是返回a,b或者b,a   
  因为fork调用将执行两次返回分别从子进程和父进程返回   
  由于父进程和子进程无关,父进程与子进程都可能先返回   
上边那两句是摘网上的。但是我认为写的不太全面。应该是子进程被先返回的几率大。 
这个程序的执行就是从fork调用开始开出了一个子进程。后边的判断语句是如果当前运行的是子进程。输出b。否则输出a。懂了没?懂了再来看个程序 
main()   
  {   
      pid_t   a_pid,b_fork;   
      if((a_pid=fork())<0)   
      {   
          printf("error!");   
      }   
      else   
      {   
            if(a_pid==0)   
            printf("b/n");   
            else   
            printf("a/n");   
      }   
   
      if(b_pid=fork()<0)   
      {   
          printf("error!");   
      }   
      else  main()   
  {   
      pid_t   a_pid,b_fork;   
      if(a_pid=fork()<0)   
      {   
          printf("error!");   
      }   
      else   
      {   
            if(a_pid==0)   
            printf("b/n");   
            else   
            printf("a/n");   
      }   
   
      if(b_pid=fork()<0)   
      {   
          printf("error!");   
      }   
      else   
      {   
            if(b_pid==0)   
            printf("c/n");   
            else   
            printf("a/n");   
      }   
  }  
这两个程序都是从网上摘的,不要学他的编程风格哦,丑死了。我看csdn和chinaunix上有说返回4个字母的,有说返回6个的。。。。N篇争论。晕了。我的跑出来是6个,其实本来就应该是6个。。。。。。WHY? 
留作思考。电脑快没电了。。。。。。明天中午贴这篇。知道的跟帖回复好。明天晚上再写吧。睡觉去了。HOHO 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值