Linux异步通知实验:应用程序对异步通知的处理

一. 简介

前面文章学习了 应用程序对异步通知的处理方法,另一篇文章实现了Linux驱动对异步通知的处理:

Linux应用程序对异步通知的处理-CSDN博客

Linux异步通知实验:驱动中异步通知的处理-CSDN博客

本文继续Linux异步通知实验,主要实现Linux应用程序对异步通知的处理(也就是信号处理函数)。

二. Linux异步通知实验:应用程序对异步通知的处理

1. 编写应用程序

在 15_async_notice工程目录下创建应用程序文件 signalApp.c,应用程序对异步通知的处理如下:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>

/*
*测试按键是否按下
* 运行命令: ./signalApp /dev/key_irq
*/

int fd; 

//信号处理函数
void sigio_signal_handler(int num)
{
    int ret = 0;
    int key_value = 0;

    ret = read(fd, &key_value, sizeof(key_value));
    if(ret < 0)
    {
        printf("read key_value error!\n");
    }
    else
    {
        printf("Key0 Press! key_value: %d\n", key_value);
    }
}

int main(int argc, char* argv[])
{
    int ret = 0;
    char * device_name = NULL;
    int key_value = 0;
    int flags = 0;

    if(argc != 2)
    {
        printf("main's param number error!\n");
        return -1;
    }
    device_name = argv[1];
    fd = open(device_name, O_RDWR);
    if(fd < 0)
    {
        printf("open led device failed!\n");
        return -1;
    }
    //1. 注册信号处理函数
    signal(SIGIO, sigio_signal_handler);
    //2. 将本应用程序PID告诉内核
    fcntl(fd, F_SETOWN, getpid()); 
    //3. 开启异步通知
    flags = fcntl(fd, F_GETFL); //获取文件状态
    fcntl(fd, F_SETFL, flags | FASYNC);//开启当前进程的异步通知功能

    while(1)
    {
        sleep(2);
    }

    return 0;
}

2.  编译应用程序

对 应用程序 signalApp.c进行编译:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/15_async_notice$ arm-linux-gnueabihf-gcc signalApp.c -o signalApp

我这里可以编译通过,生成应用程序 signalApp。

三. 对驱动模块进行测试

1.  拷贝驱动模块与应用程序

将上一篇文章(Linux驱动对异步通知处理的代码)编译生成的驱动模块 key_irq.ko与上面的应用程序 signalApp拷贝到 开发板系统中:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/Linux_Drivers/15_async_notice$ sudo cp signalApp key_irq.ko /home/wangtian/linux/nfs_File/rootfs/lib/modules/4.1.15/ -f

2.  加载测试驱动模块

相关推荐

  1. Linux异步通知实验应用程序异步通知处理

    2024-03-14 18:22:03       24 阅读
  2. Linux应用程序异步通知处理

    2024-03-14 18:22:03       22 阅读
  3. Linux异步通知简介

    2024-03-14 18:22:03       24 阅读
  4. Linux驱动开发——(八)Linux异步通知

    2024-03-14 18:22:03       14 阅读
  5. 通过Redis实现一个异步请求-响应程序

    2024-03-14 18:22:03       14 阅读
  6. 通过Redis实现一个异步请求-响应程序

    2024-03-14 18:22:03       15 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 18:22:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 18:22:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 18:22:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 18:22:03       20 阅读

热门阅读

  1. 快速配置ssh免密登录

    2024-03-14 18:22:03       23 阅读
  2. BIO、NIO、AIO有什么区别?

    2024-03-14 18:22:03       17 阅读
  3. 将LibMTL应用于自定义模型

    2024-03-14 18:22:03       20 阅读
  4. Spring篇面试题 2024

    2024-03-14 18:22:03       16 阅读
  5. 2. git 分支使用流程

    2024-03-14 18:22:03       21 阅读
  6. Linux Centos7 服务器局域网集群使用 NTP 同步时间

    2024-03-14 18:22:03       16 阅读
  7. 每日学习总结20240313

    2024-03-14 18:22:03       21 阅读
  8. 股票行情数据导入实例

    2024-03-14 18:22:03       19 阅读
  9. 计算机等级考试:信息安全技术 知识点九

    2024-03-14 18:22:03       21 阅读
  10. 程序员常用的几种算法

    2024-03-14 18:22:03       19 阅读
  11. 开发指南007-导出Excel

    2024-03-14 18:22:03       19 阅读
  12. 通过xlsx库解析读取excel表格内容

    2024-03-14 18:22:03       20 阅读
  13. Python Web相关面试题(一)

    2024-03-14 18:22:03       18 阅读
  14. Spring IOC和AOP

    2024-03-14 18:22:03       15 阅读