在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > Linux內(nèi)核開發(fā)之異步通知與異步I/O(四)

            Linux內(nèi)核開發(fā)之異步通知與異步I/O(四)

            作者: 時間:2016-12-22 來源:網(wǎng)絡(luò) 收藏

              “小王,接著昨天的來,你知道嗎?在異步IO中,什么可以用來做為AIO的通知呢?”我用渴求的眼神望著她.

            本文引用地址:http://www.biyoush.com/article/201612/341941.htm

              "啊?那我咋知道,你說的我能記住就不錯了,讓我發(fā)明創(chuàng)造,我可是不會."小王委屈道。

              “笨死了,我前邊花了那么多的時間來講信號之類的東西,聯(lián)想一下信號作為的信號,也想的出來啊,告訴你,我當(dāng)年用腳肢頭都能想到,可你..真讓我失望”我嘆氣到,“算了,也不怪你了,咱們開始繼續(xù)學(xué)習(xí)吧“。

              先上代碼:使用信號作為AIO異步IO通知機(jī)制

              void setup_io(..)

              {

              int fd;

              struct sigaction sig_act;

              struct aiocb my_aiocb;

              ...

              //設(shè)置信號處理函數(shù)

              sigemptyset(&sig_act.sa_mask);

              sig_act.sa_flags = SA_SIGINFO;

              sig_act.sa_sigaction = aio_completion_handler;

              //設(shè)置AIO請求

              bzero((char *)&my_aiocb, sizeof(struct aiocb));

              my_aiocb.aio_flags = fd;

              my_aiocb.aio_buf = malloc(BUF_SIZE + 1);

              my_aiocb.aio_nbytes = BUF_SIZE;

              my_aiocb.offset = next_offset;

              //連接AIO請求和信號處理函數(shù)

              my_aiocb.aio_sigevent.sigev_notify = SIGEV_SIGNVAL;

              my_aiocb.aio_sigevent.sigev_signo = SIGIO;

              my_aiocb.aic_sigevent.sigev_value.sival_ptr = &my_aiocb;

              //將信號和處理函數(shù)綁定

              ret = sigaction(SIGION, &sig_act, NULL);

              ...

              ret = aio_read(&my_aiocb);

             ?。?/p>

              //信號處理函數(shù)

              void aio_completion_handler(int signo, siginfo_t *info, void *context)

              {

              struct aiocb *req;

              //確定是我們需要的信號

              if(info->si_signo == SIGIO)

              {

              req = (struct aiocb *)info->si_value.sival_ptr; //獲得aiocb;

              //請求的操作是否完成

              if(aio_error(req) ==0 )

              {

              ret = aio_return(req);

              }

              }

              return ;

              }

              從上邊可以看到,使用AIO的應(yīng)用程序同樣需要定義信號處理函數(shù),在指定的信號被產(chǎn)生時會觸發(fā)調(diào)用這個處理程序。

              “那么是不是就只能使用信號這種方式呢,我記得以前沒一個知識點你都給我講了好多方法,這個歌也不例外吧”小王說。

              “嗯,真聰明,就喜歡聰明的女生”聽到小王也懂得開動腦子了,我也要表示表示不是。

              再上代碼:使用回調(diào)函數(shù)最為AIO的通知

              void setup_io(..)

              {

              ...//同上

              //連接AIO請求和線程回調(diào)函數(shù)

              my_aiocb.aio_sigevent.sigev_notify = SIGEV_THREAD;

              my_aiocb.aio_sigevent.notify_function = aio_completion_handler;

              //設(shè)置回調(diào)函數(shù)

              my_aiocb.aio_sigevent.notify_attributes = NULL;

              my_aiocb.aio_sigevent.sigev_value.sival_ptr = &my_aiocb;

              ...

              ret = aio_read(&my_aiocb);

              }

              //信號處理函數(shù)

              void aio_completion_handler(int signo, siginfo_t *info, void *context)

              {

              struct aiocb *req;

              req = (struct aiocb *)sigval.sival_ptr; //獲得aiocb;

              //請求的操作是否完成

              if(aio_error(req) ==0 )

              {

              ret = aio_return(req);

              }

              return ;

              }

              上述程序在創(chuàng)建aiocb請求之后,使用SIGEV_THREAD請求了一個線程回調(diào)函數(shù)作為通知方法。在回調(diào)函數(shù)中。通過(struct aiocb *)info->si_value.sival_ptr可以獲得對應(yīng)的aiocb指針,使用AIO函數(shù)可驗證請求是否已經(jīng)完成。

              “不過,小王,對不起哈,沒想到一說就收不住了,這節(jié)也只是講了有關(guān)的應(yīng)用,下節(jié)咱們開始講講AIO與驅(qū)動設(shè)備,回歸驅(qū)動主題”。



            關(guān)鍵詞: Linux 異步通知

            評論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉