• 【操作系统】 编制实现软中断通信的程序


    实验内容

    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

  • 相关阅读:
    安装一些好用的工具
    转:通过快键强制关闭 Ubuntu 上无响应的程序
    同步cm10.1源码时出现的一些错误的解决办法。
    repo sync的介绍翻译
    配置grub解决ubuntu12.04不能保存亮度和调节的问题
    给fcitx加上云拼音库
    自己安装配置ubuntu12.04过程(内容丰富)
    关于repo sync -j*的含义的猜测
    同步cm10.1的时候发生同步错误不能找到github上的文件
    Element-ui tree组件自定义节点使用方法
  • 原文地址:https://www.cnblogs.com/LPworld/p/14102990.html
Copyright © 2020-2023  润新知