最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

芯靈思Sinlinx A64開發(fā)板 Linux內(nèi)核等待隊(duì)列p

2022-02-18 14:51 作者:Vecloud_  | 我要投稿

阻塞:阻塞調(diào)用是指調(diào)用結(jié)果返回之前,當(dāng)前進(jìn)程程會(huì)被掛起(休眠)。函數(shù)只有在得到結(jié)果之后才會(huì)返回。默認(rèn)情況下,文件都是以這種方式打開。

非阻塞:指在不能立刻得到結(jié)果之前,該函數(shù)不會(huì)阻塞當(dāng)前進(jìn)程程,而會(huì)立刻返回。應(yīng)用程序可選擇以阻塞或非阻塞方式打開設(shè)備文件,然后設(shè)備進(jìn)行讀寫操作,如果驅(qū)動(dòng)的讀寫函數(shù)支持阻塞和非阻塞功能,這兩種打開方式才會(huì)有區(qū)別。


阻塞示例 :fd = open("/xxx/word", O_RDONLY ); // 默認(rèn)阻塞方式打開


如果此時(shí)沒(méi)有數(shù)據(jù)可以讀取,則執(zhí)行休眠


如果有數(shù)據(jù)可以讀取,則馬上讀取數(shù)據(jù),不休眠,讀取數(shù)據(jù)后馬上返回。


非阻塞示例 :fd = open("/xxx/word", O_RDONLY | O_NONBLOCK ); //非阻塞方式打開


如果此時(shí)已經(jīng)有數(shù)據(jù)可以讀取,則讀取數(shù)據(jù)再返回。


如果沒(méi)有數(shù)據(jù)可以讀,也馬上返回,但是返回一個(gè)錯(cuò)誤碼。


1)驅(qū)動(dòng)中如何得到用戶空間應(yīng)用程序打開的方式?? ? ? ??


open一個(gè)設(shè)備,內(nèi)核會(huì)創(chuàng)建一個(gè)file結(jié)構(gòu),并且把打開方式的數(shù)值存放到file結(jié)構(gòu)成員f_flags成員中,驅(qū)動(dòng)程序的read,write 接口可以使用參數(shù)file指針取得文件打開方式。file結(jié)構(gòu)中有一個(gè)成員是f_flags ,創(chuàng)建時(shí)候,內(nèi)核會(huì)把open 函數(shù)的最后一個(gè)參數(shù) flag 數(shù)值保存在 f_flags 變量中。


static ssize_t xxx_read(struct file *pfile, char user *buf, size_t count, loff_t *poff){? ? ……? ? //判斷當(dāng)前是否有按鍵動(dòng)作? ? if(沒(méi)有按鍵動(dòng)作)? ? {? ? ? ? //判斷 pfile->f_flags 成員是否設(shè)置 O_NONBLOCK? ? ? ? ? if(pfile->f_flags & O_NONBLOCK) //表示用戶空間使用非阻塞打開? ? ? ? {? ? ? ? ? ? ? ? return - EAGAIN; //返回一個(gè)錯(cuò)誤碼,告訴用戶空間你可以再嘗試讀取? ? ? ? }? ? ? ? //阻塞方式打開,沒(méi)有數(shù)據(jù)就休眠,不馬上返回else? ? ? ? {? ? ? ? ? ? ? ? //休眠,等待有按鍵動(dòng)作喚醒進(jìn)程。? ? ? ? }? ? }}2)如何知道是否有按鍵動(dòng)作?


如果按鍵按鍵或松開時(shí)刻,會(huì)產(chǎn)生一個(gè)中斷,所以,在中斷程序設(shè)置一個(gè)標(biāo)志即可。


定義一個(gè)全局變量,初始值為 0,表示沒(méi)有按鍵動(dòng)作發(fā)生,在中斷程序中設(shè)置這個(gè)變量值為 1,表示發(fā)生按鍵動(dòng)作。


3)如何讓進(jìn)程進(jìn)入休眠狀態(tài)?


最簡(jiǎn)單,最直接的休眠方式: msleep 函數(shù)


這個(gè)函數(shù):一旦調(diào)用,則調(diào)用進(jìn)程會(huì)休眠指定長(zhǎng)的時(shí)間,時(shí)間一到內(nèi)核會(huì)喚醒這個(gè)進(jìn)程.


//休眠,等待有按鍵動(dòng)作喚醒進(jìn)程。


? ? while(press == 0)? ? ? ? ? ? ? ? ?msleep(5); // 休眠5ms

了解更多相關(guān)內(nèi)容歡迎關(guān)注http://www.vecloud.com/

芯靈思Sinlinx A64開發(fā)板 Linux內(nèi)核等待隊(duì)列p的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
辽源市| 东乌珠穆沁旗| 新泰市| 民和| 通江县| 凉城县| 洪江市| 三原县| 澎湖县| 嘉定区| 威远县| 浪卡子县| 藁城市| 洮南市| 蒙阴县| 巩义市| 武隆县| 武鸣县| 南雄市| 昆山市| 砀山县| 绍兴县| 灵山县| 大足县| 扬州市| 泰兴市| 山东省| 泰和县| 土默特左旗| 博客| 阿瓦提县| 山阳县| 信宜市| 仁怀市| 永丰县| 青田县| 行唐县| 那坡县| 嘉荫县| 谢通门县| 长岛县|