zoukankan      html  css  js  c++  java
  • 【操作系统】 编制实现软中断通信的程序

    实验内容

    1)       编制实现软中断通信的程序

      使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上发出的中断信号(即按delete键),当父进程接收到这两个软中断的某一个后,父进程用系统调用kill()向两个子进程分别发出整数值为16和17软中断信号,子进程获得对应软中断信号,然后分别输出下列信息后终止:

    Child process 1 is killed by parent !!  

    Child process 2 is killed by parent !!  

    父进程调用wait()函数等待两个子进程终止后,输入以下信息,结束进程执行:

    Parent process is killed!!

    多运行几次编写的程序,简略分析出现不同结果的原因。

    代码:

    #include<stdio.h>
    #include<stdlib.h>
    #include<signal.h>
    #include<unistd.h>
    #include<linux/input.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #define NUM 2
    #define DEV_PATH "/dev/input/event0"
    int childpid[NUM],i,keys_fd;
    struct input_event t;//event input
    void die(){printf("
    Child press%d is killed by parent!
    ",i);exit(0);}//child process die
    void fatherfun(){//father process
        keys_fd=open(DEV_PATH, O_RDONLY);//open keyboard event file
        while(1)if(read(keys_fd, &t, sizeof(t))==sizeof(t))if(t.code==111)break;//wait "DELETE" key
        for(i=0;i<NUM;i++)kill(childpid[i],17);//kill all child
        close(keys_fd);//close file
        while(wait(NULL)!=-1);//make sure all child is killed
        printf("Parent process is killed
    ");
    }
    void childfun(){//son process
        signal(17,die);//sign
        while(1);//wait signal
    }
    int main(){
        for(i=1;i<=NUM;i++)if(childpid[i-1]=fork()){if(i==NUM)fatherfun();}else{childfun();break;}//make child
        return 0;
    }

     参考:

    https://blog.csdn.net/liuxuejiang158blog/article/details/9057135

    https://www.cnblogs.com/yangwindsor/articles/3454955.html

  • 相关阅读:
    通过抓包软件Charles和Fiddle快速模拟(Mock)数据
    截图+贴图工具 Snipaste
    二、Vuex State
    一、Vuex 的概念及安装使用
    一、记录Git使用中遇到的问题及解决方法
    编译Less文件
    Less的基本使用
    二、Git基础操作
    三、Git常用命令
    sql server 自增长字段,标识值重置
  • 原文地址:https://www.cnblogs.com/LPworld/p/14102990.html
Copyright © 2011-2022 走看看