Chinaunix首页 | 论坛 | 博客
  • 博客访问: 803957
  • 博文数量: 104
  • 博客积分: 915
  • 博客等级: 下士
  • 技术积分: 2171
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 21:34
文章分类

全部博文(104)

文章存档

2018年(4)

2015年(14)

2014年(9)

2013年(56)

2012年(21)

分类: LINUX

2013-11-08 10:33:08

一个进程产生三个子进程,并传递不同的参数,让他们分别执行别的程序:
fork3.c
  1.     #include <stdio.h>
  2.     #include <unistd.h>
  3.     #include <string.h>
  4.     #include <sys/types.h>
  5.                         
  6.     int main(int argc,char * argv[],char ** environ)
  7.     {
  8.         int i;
  9.         pid_t pid1,pid2,pid3;
  10.         int stat_val;
  11.         for(i=1;i<4;i++)
  12.         {
  13.          if(strcmp("a",argv[i])==0)
  14.          {
  15.             pid1=fork();
  16.             if(pid1==0)
  17.             {
  18.             printf("My pid = %d ,parentpid = %d\n",getpid(),getppid());
  19.             execve("mult99",argv,environ);// 让进程去执行新的程序。
  20.             return 0;
  21.             }
  22.          }
  23.          if(strcmp("b",argv[i])==0)
  24.          {
  25.             pid2=fork();
  26.             if(pid2==0)
  27.             {
  28.             printf("My pid = %d ,parentpid = %d\n",getpid(),getppid());
  29.             execve("fac10",argv,environ);
  30.             return 0;
  31.             }
  32.          }
  33.         if(strcmp("c",argv[i])==0)
  34.          {
  35.             pid3=fork();
  36.             if(pid3==0)
  37.             {
  38.             printf("My pid = %d ,parentpid = %d\n",getpid(),getppid());
  39.             execve("add50",argv,environ);
  40.             return 0;
  41.             }
  42.          }
  43.         }
  44.         for(i=0;i<1000000;i++);
  45.             wait(&stat_val);
  46.         return 0;
  47.     }
mult99.c
  1. // 99乘法表
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>

  5. int main(int argc, char *argv[], char **environ)
  6. {
  7.     int i,num = 1;
  8.     int mult;

  9.     printf("I am a process image!\n");
  10.     printf("My pid = %d, Parent pid = %d\n", getpid(), getppid());
  11.     while(num <= 9)
  12.     {
  13.         for(i = 1; i <= num; i++)
  14.         {
  15.             mult = num * i;
  16.             printf("%d*%d=%d ", num, i, mult);
  17.         }
  18.         printf("\n");
  19.         num++;
  20.     }
  21.     return 0;
  22. }
fac10.c
  1. // 10!
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>

  5. int main(int argc, char *argv[], char **environ)
  6. {
  7.     int i, n = 10;
  8.     int fac = 1;

  9.     printf("I am a process image!\n");
  10.     printf("My pid = %d, Parent pid = %d\n", getpid(), getppid());
  11.     for(i = 2; i <= 10; i++)
  12.     {
  13.         fac *= i;
  14.     }
  15.     printf("10! = %d\n", fac);
  16.     return 0;
  17. }
add50.c
  1. // 1-50之和
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>

  5. int main(int argc, char *argv[], char **environ)
  6. {
  7.     int i,n = 50;
  8.     int sum = 0;

  9.     printf("I am a process image!\n");
  10.     printf("My pid = %d, Parent pid = %d\n", getpid(), getppid());
  11.     for(i = 1; i <= 50; i++)
  12.     {
  13.         sum += i;
  14.         if(i < 4)
  15.         {
  16.             printf("%d+", i);
  17.         }
  18.         if(i == 4)
  19.         {
  20.             printf("...+");
  21.         }
  22.     }
  23.     printf("50 = %d\n", sum);
  24.     return 0;
  25. }
编译过程如下:

运行结果如下:




阅读(1072) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~