(5)fork()

原创 2007年09月22日 18:22:00
一周没更新了吧。前几天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 

练习(五)

1、 [单选题] 以下关于指针的说法,正确的是() int *const p与int const *p等价 const int *p与int *const p等价 const int *p...
  • m0_37264397
  • m0_37264397
  • 2017-07-28 21:19:00
  • 319

Android5.1.1源码 - zygote fork出的子进程如何权限降级

所有Android应用进程都是zygote fork出来的,但应用进程还保持着root权限,这显然是不被允许的,所以fork出来的子进程权限需要被降级,本文说的就是Android源码在什么地方执行了权...
  • AliMobileSecurity
  • AliMobileSecurity
  • 2016-05-10 15:29:31
  • 1280

Linux-fork(),vfork()和clone的区别

fork()函数的作用是
  • caoyan_12727
  • caoyan_12727
  • 2016-09-09 18:54:05
  • 866

Android如何解决多次fork进程的问题

豌豆荚,360等一些软件在卸载后或弹出一个调查问卷的页面,这个是怎么做的呢? 有两种思路: 第一种是app本身检测卸载这个窗口,在按下卸载的瞬间调用内部浏览器,这种思路没试过,不知是否可行...
  • qq_34429346
  • qq_34429346
  • 2016-07-13 17:21:11
  • 441

fork()编程fork()编程fork()编程

  • 2010年11月14日 21:48
  • 3KB
  • 下载

关于fork多进程中printf的问题

int main() { printf("hello world"); fork(); return0; } //输出为hello worldhello world int main...
  • world_hello_100
  • world_hello_100
  • 2012-10-13 10:33:33
  • 1753

linux c fork全面剖析

  • 2009年10月10日 20:36
  • 83KB
  • 下载

fork() && fork() || fork()

#include #include int main() { fork();/*****/ fork() && fork() || fork();/*****/ fork(...
  • hs794502825
  • hs794502825
  • 2013-08-23 23:07:11
  • 8599

时间片轮转调度算法的提及和关于fork函数执行父,子进程先后顺序的理解

时间片轮转调度算法的提及和关于fork函数执行父,子进程先后顺序的理解     fork函数是用来创建进程的,命令行下输入man2 fork 看到他的函数声明: #include  pid_t ...
  • lyh__521
  • lyh__521
  • 2014-07-29 19:12:19
  • 1946

C fork()&&fork()||fork()

一道关于fork创建进程个数的题目: #include int main() {   fork(); fork()&&fork()||fork(); fork(); return 0; ...
  • qq_29233719
  • qq_29233719
  • 2016-12-11 21:30:18
  • 503
收藏助手
不良信息举报
您举报文章:(5)fork()
举报原因:
原因补充:

(最多只允许输入30个字)