成人在线你懂的-成人在线免费小视频-成人在线免费网站-成人在线免费视频观看-日韩精品国产一区二区-日韩精品国产一区

掃一掃
關注微信公眾號

深入淺出 Linux設備驅動異步通知介紹
2007-07-28   網絡

結合阻塞與非阻塞訪問、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 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);
            }

為了使設備支持該機制,我們需要在驅動程序中實現fasync()函數,并在write()函數中當數據被寫入時,調用kill_fasync()函數激發一個信號,此部分工作留給讀者來完成。

熱詞搜索:

上一篇:深入淺出 Linux設備驅動中斷處理介紹
下一篇:Linux系統啟動引導程序配置文件解析

分享到: 收藏
主站蜘蛛池模板: 总裁掀开她的内衣揉她的柔软视频| 成人免费黄色电影| 电影《此时此刻》| 恶行之外电影| 孙炜| 诺比特电影免费观看完整版国语版| 寡妇的大乳bd高清| 轨迹地图| 红岩下的追捕电视剧| 大唐狄仁杰演员表介绍| 林智妍上流社会| 电影《神丐》| 苏西| 欧美17p| 高达w| baoru| 香魂女| 在爱的名义下| 第一财经现场直播| 我们的新时代演员表| 山口小夜子| 孤独感拉满的头像| 狗报恩的10个征兆| 我在等你回家剧情介绍| 二年级合并综合算式题| 成人免费黄色电影| 电影喜剧明星演员表| 香港之夜电视剧免费播放国语版| 啼笑姻缘| 在那遥远的地方演员表| 木下柚花| river flows in you吉他谱| 章莹| 苦菜花电视剧| 男人不可以穷演员表| 血色樱花 电视剧| 贪玩的小水滴| 南来北往电视剧剧情介绍| 篱笆墙的影子歌词| 《一点》歌词完整版| 电影双面情人|