深入浅出LDD-6-异步通知

设备驱动中的异步通知

概念:
    异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,
    这一点非常类似于硬件上“中断”地概念,比较准确的称谓是“信号驱动(SIGIO)的异步 I/O”

实例:
    我们先来看一个使用信号驱动的例子, 它通过signal(SIGIO,  input_handler) 对 STDIN_FILENO 启动信号机制,
    输入可触发 input_handler 被调用,其源代码如下:

/***************************************************************************************************
编译环境:未知
结    果:未编译
实 验 者:张 永 辉
***************************************************************************************************/

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>
    #include <fcntl.h>
    #include <signal.h>
    #include <unistd.h>
    #define MAX_LEN 100

    void input_handler(int num)
    {
        char data[MAX_LEN];
        int len;

        //读取并输出 STDIN_FILENO 上的输入
        len = read(STDIN_FILENO, &data, MAX_LEN);
        data[len] = 0;
        printf("input available:%s\n", data);
    }

    main()
    {
        int oflags;

        //启动信号驱动机制
        signal(SIGIO, input_handler);
        fcntl(STDIN_FILENO, F_SETOWN, getpid());
        oflags = fcntl(STDIN_FILENO, F_GETFL);
        fcntl(STDIN_FILENO, F_SETFL, oflags | FASYNC);

        //最后进入一个死循环,程序什么都不干了,只有信号能激发 input_handler 的运行
        //如果程序中没有这个死循环,会立即执行完毕
        while (1);
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值