Linux

实验原理:

1.进程的创建程序如下:

#include<stdio.h>

main()

{

       int p1,p2;

       while((p1=fork())==-1);

       if(p1==0)

              putchar('b');

       else

       {

              while((p2=fork())==-1);

              if(p2==0)

                     putchar('c');

              else

                     putchar('a');

       }

}

2.1进程的控制程序1:

#include<stdio.h>

main()

{

       int p1,p2,i;

       while((p1=fork())==-1);

       if(p1==0)

              for(i=0;i<50;i++)

                     printf("child %d\n",i);

              else

              {

                     while((p2=fork())==-1);

                     if(p2==0)

                            for(i=0;i<50;i++)

                                   printf("son %d\n",i);

                            else

                                   for(i=0;i<50;i++)

                                          printf("daughter %d\n",i);

              }

}

2.2 进程的控制程序2:

#include<stdio.h>

#include<unistd.h>

main()

{

       int p1,p2,i;

       while((p1=fork())==-1);

       if(p1==0)

       {

              lockf(1,1,0);

              for(i=0;i<50;i++)

                     printf("child %d\n",i);

              lockf(1,0,0);

       }

       else

       {

              while((p2=fork())==-1);

              if(p2==0)

              {

                     lockf(1,1,0);

                     for(i=0;i<50;i++)

                            printf("son %d\n",i);

                     lockf(1,0,0);

              }

              else

              {

                     lockf(1,1,0);

                     for(i=0;i<50;i++);

                     printf("daughter %d\n",i);

                     lockf(1,0,0);

              }

       }

}

3.1软中断通信程序1:

#include<unistd.h>

#include<stdio.h>

#include<signal.h>

void waiting(),stop();

int wait_mark;

main()

{

       int p1,p2;

       while((p1=fork())==-1);

       if(p1>0)

       {

              while((p2=fork())==-1);

              if(p2>0)

              {

                     printf("parent\n");

                     wait_mark=1;

                     signal(SIGINT,stop);

                     waiting(0);

                     kill(p1,16);

                     kill(p1,17);

                     wait(0);

                     wait(0);

                     printf("parent process is killed!\n");

                     exit(0);

              }

              else

              {

                     printf("p2\n");

                     wait_mark=1;

                     signal(17,stop);

                     waiting();

                     lockf(stdout,1,0);

                     printf("child process 2 is killed by parent!\n");

                     lockf(stdout,0,0);

                     exit(0);

              }

       }

       else

       {

              printf("p1\n");

              wait_mark=1;

              signal(16,stop);

              waiting();

              lockf(stdout,1,0);

              printf("child process 1 is killed by parent!\n");

              lockf(stdout,0,0);

              exit(0);

       }

}

void waiting()

{

       while(wait_mark!=0);

}

void stop()

{

       wait_mark=0;

}

 

 

3.2软中断通信程序2:

#include<unistd.h>

#include<stdio.h>

#include<signal.h>

int pid1,pid2;

int EndFlag=0,pf1=0,pf2=0;

void IntDelete()

{

       kill(pid1,16);

       kill(pid2,17);

       EndFlag=1;

}

void Int1()

{

       printf("child process 1 is killed by parent!");     

}

void Int2()

{

       printf("child process 2 is killed by parent!");

}

main()

{

       int exitpid;

       signal(SIGINT,SIG_IGN);

       signal(SIGQUIT,SIG_IGN);

       while((pid1=fork())==-1);

       if(pid1==0)

       {

              printf("p1\n");

              signal(SIGUSR1,Int1);

              signal(16,SIG_IGN);

              pause();

       }

       else

       {

              while((pid2=fork())==-1);

              if(pid2==0)

              {

                     printf("p2\n");

                     signal(SIGUSR2,Int2);

                     signal(17,SIG_IGN);

                     pause();

              }

              else

              {

                     printf("parent\n");

                     signal(SIGINT,IntDelete);

                     waitpid(-1,&exitpid,0);

                     printf("parent process is killed!");

              }

       }

}

4.进程的管道通信程序:

#include<unistd.h>

#include<stdio.h>

#include<signal.h>

int pid1,pid2;

main()

{

       int fd[3];

       char OutPipe[100],InPipe[100];

       pipe(fd);

       while((pid1=fork())==-1);

       if(pid1==0)

       {

              printf("p1\n");

              lockf(fd[1],1,0);

              sprintf(OutPipe,"Child 1 process is sending a message!");

              write(fd[1],OutPipe,50);

              sleep(1);

              lockf(fd[1],0,0);  

       }

       else

       {

              while((pid2=fork())==-1);

              if(pid2==0)

              {

                     printf("p2\n");

                     lockf(fd[1],1,0);

                     sprintf(OutPipe,"Child 2 process is sending a message!");

                     write(fd[1],OutPipe,50);

                     sleep(1);

                     lockf(fd[1],0,0);  

              }

              else

              {

                     printf("parent\n");

                     wait(0);

                     read(fd[0],InPipe,50);

                     printf("%s\n",InPipe);

                     wait(0);

                     read(fd[0],InPipe,50);

                     printf("%s\n",InPipe);

                    

              }

       }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值