非同步通知類似於中斷,主要用於實現驅動通過傳送訊號通知應用程式。
應用層:
void my_signal_fun(int signum)
int main(int argc, char **argv)
fcntl(fd, f_setown, getpid()); // 告訴驅動要發訊號給本應用程式。
oflags = fcntl(fd, f_getfl); // 獲取flags
fcntl(fd, f_setfl, oflags | fasync); // 設定flags支援非同步通知 ,最終呼叫到驅動的fasync函式進行初始化。
while (1);
return 0; }
驅動層:
static struct fasync_struct *my_async;
static int drv_fasync (int fd, struct file *filp, int on)
static struct file_operations drv_fops = ;
static int drv_init(void)
static void drv_exit(void)
kill_fasync (&my_async, sigio, poll_in); //向應用程式傳送sigio訊號
module_init(drv_init);
module_exit(drv_exit);
module_license("gpl");
Linux核心開發之非同步通知與非同步I O 一
小王,聽說過錦上添花吧.我拍拍下王的頭說。還錦上添花你,為你上次提的幾個東東,我是頭上長包.小王氣憤地瞪著我。啊,為啥這樣呢,本來還特意拒絕了mm的約會,抽出時間打算給你說點高階的東東,看來現在是不行了 我吃驚道,這樣吧,這次就給你講些和前邊有關的東西,也不失為錦上添花不是?好,我也是這麼打算的,就...
Linux核心開發之非同步通知與非同步I O 二
曾經有乙份真摯的愛情擺在面前,我卻不懂珍惜 曾經有乙個承諾,我卻倍感珍惜,今天一定要好好講講.講講啥,講講上節說的那個非同步通知的例子唄,大家喜歡看 咋們就先上 struct globalfifo dev 檔案釋放函式 int globalfifo release struct inode inod...
Linux核心開發之非同步通知與非同步I O 五
小王呢,今天開始講aio與裝置驅動,這也是裝置驅動通知與非同步io的最後一節了,下次咱們就要開始講更高階的東西,比如中斷啦,時鐘等 在linux核心中,每個io請求都對應乙個kiocb結構體,其ki filp成員指向對應的file指標,通過is sync kiocb可以判斷某kiocb時候為同步io...