Linux核心的非同步通知

2021-06-18 15:30:03 字數 775 閱讀 1936

非同步通知類似於中斷,主要用於實現驅動通過傳送訊號通知應用程式。

應用層:

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...