深入浅出设备驱动异步通知介绍物业
民生杂谈 2021-08-25 01:54 字号: 大 中 小
结合阻塞与非阻塞访问、poll函数可以较好地解决设备的读写,但是如果有了异步通知就更方便了。异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上\"中断\"地概念,比较准确的称谓是\"信号驱动(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 100void 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);}
鲁F 烟台 为了使设备支持该机制,我们需要在驱动程序中实现fasync()函数,并在write()函数中当数据被写入时,调用kill_fasync()函数激发一个信号,此部分工作留给读者来完成.
曲靖治白癜风哪里最好长效和短效降压药区别
济南男科医院
-
-
女排超级联赛第一阶段战罢沪苏渐露冠军相
女排超级联赛第一阶段战罢 沪苏渐露“冠军相”北京女排球员...
2020-08-12 | 民生杂谈
-
-
库里评心中历史前五巨星有詹姆斯竟没科比搭配
库里评心中历史前五巨星:有詹姆斯竟没科比库里的看法你认...
2020-06-02 | 民生杂谈
-
-
海口中小学划片范围出炉快看你孩子在哪个片搭配
海口中小学划片范围出炉!快看你孩子在哪个片区上学(附:...
2020-05-28 | 民生杂谈
-
-
詹姆斯27分骑士四人上20取连胜小牛主场搭配
詹姆斯27分骑士四人上20取连胜 小牛主场惨败33分北京时间3月...
2020-05-27 | 民生杂谈
-
-
烟台市做好惠民工程出新策
烟台市做好惠民工程出新策7月7日至9日,在召开的全市领导干...
2019-12-17 | 民生杂谈
-
-
仓山区民政局召开2016年清明节工作部署
仓山区民政局召开2016年清明节工作部署会2016年3月28日下午,...
2019-12-17 | 民生杂谈