zoukankan      html  css  js  c++  java
  • liunx驱动----异步通知

    查询:消耗资源

    中断:read 一直要去读
    poll :指定起始时间
    异步通知
    signal 测试程序
    include <stdio.h>
    include <signal.h>
    
    
    
    void my_signal(int signum)
    {
        static unsigned int cnt;
        printf("signum = %d, %d timer
    ",signum ,++cnt);//liunx 命令行中是行缓冲的。
    }
    int main(int argc,char **argv)
    {
        signal(SIGUSR1,my_signal);
        while(1)
            {
                sleep(1000);
            }
        return 0;
    }
    
    
    
    
    kill -USR1 PID  发送信号给进程

    信号的要点
    1. 先注册一个信号处理函数 signal(SIGUSR1,my_signal);
    2. 谁来发送信号
    3. 发给谁
    4. 谁来接受信号
    目标:按下按键时驱动程序通知应用程序
    1. 应用程序注册信号处理函数
    2. 谁发送信号:驱动程序
    3. 发给谁:发给应用程序 app=>告诉驱动自己的PID
    4. 怎么发:kill_fasync()

    在应用程序中:

    signal(SIGIO,my_signal);//开启异步通知
     
    fcntl(fd, F_SETOWN, getpid());//获取自身的PID getpid() 也就是确定发给谁这个问题
     
    Oflags = fcntl(fd, F_GETFL); //获取当前的flag
     
    fcntl(fd, F_SETFL, Oflags | FASYNC);//修改当前Flag 设置为异步通知的Flag
    在驱动程序中
    通知应用程序有信号来了
    fasync_helper(fd, file, on, &button_signal); 的目的是为了 初始化 button_signal
    button_signal 在文件中定义:static struct fasync_struct *button_signal;
     
     
    目的:通过驱动程序来通知应用程序 来读某些东西
     
     
     
  • 相关阅读:
    JMXRemote Source Downloads? Circular? 规格严格
    Java Heap Dump3 规格严格
    Java Heap Dump2 规格严格
    Java 时区总结 规格严格
    Java HeapDump 规格严格
    JDK 动态代理 规格严格
    常用日语100句
    Wine 1.0发布日期已定!
    细节的感动
    Blog正式改名
  • 原文地址:https://www.cnblogs.com/hjxzjp/p/10493119.html
Copyright © 2011-2022 走看看