青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

BLUESKY
一步一個腳印向前走

經過幾天對I/O復用這章內容的學習,了解select、pselect、poll函數

I/O復用主要用于有多個描述字的場合,在前面的回射程序的學習當中,我們可以發現客戶端程序要處理2個描述字,
其中一個是用于處理客戶端的標準輸入
另外一個是用于處理套接口傳遞過來的數據

基于上面的情況,我們可以發現有這樣一種情況,如果服務端程序提前斷開,例如輸入ctrl+C,那么客戶端程序依然阻塞于
標準輸入,即等待用戶輸入,但這時輸入已經毫無意義,因為服務器程序已經停止工作了;

這章的幾個函數就是用于處理這種情況的,即當任何一個描述字當前的狀態為準備好,那么程序就可以處理它,而不是一直
阻塞于未準備好的描述字

在unix中有5個基本的I/O模型
1、阻塞I/O
2、非阻塞I/O
3、I/O復用
4、信號驅動I/O
5、異步I/O

我們這章主要用的是I/O復用(select/poll),其他的I/O模型在這里就不介紹了!
我們阻塞于select調用,等待數據報套接口可讀,當select返回套接口可讀的條件時,我們調用recvfrom將數據報拷貝到應用緩沖區中
使用它的好處是我們可以等待多個描述字準備好

下面簡單介紹一下select函數的幾個參數說明
int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *errorfds, struct timeval *timeout);
還是按照書上說的順序簡單介紹下幾個參數的含義
1、timeout參數是描述字準備要花費的時間,有三種取值(NULL,{*,*},{0,0}),具體的可自行查找,就不做詳細的介紹了
2、readfds,writefds,errorfds指定我們要讓內核測試讀、寫和異常條件所需的描述字,類型是集合類型的,可以用以下幾個函數對其進行操作
      void FD_CLR(int fd, fd_set *fdset);-->turn off the bit for fd in fd_set
      int FD_ISSET(int fd, fd_set *fdset);-->is the bit for fd in fd_set?
      void FD_SET(int fd, fd_set *fdset);-->turn on the bit for fd in fd_set
      void FD_ZERO(fd_set *fdset);-->clear all bits in fd_set
3、nfds是指定被測試的描述字的個數,它的值是最大描述字的值加1

下面的表格是摘自書上的小結


其中待處理錯誤和TCP外帶數據還是有點不理解

在了解了這個函數之后,作者就對前面的回射程序的客戶端輸出str_cli進行修改,使其能檢測多個描述字的狀態,并在服務器退出后能迅速退出,而不是阻塞在等待標準輸入的輸入

下面就是幾個關鍵的代碼片斷

fp代表標準輸入的描述字
sockfd代表套接口的描述字
rset代表描述字集合

FD_ZERO(&rset);
FD_SET(fileno(fp),
&rset);
FD_SET(sockfd,
&rset);

maxfdp1
=max(fileno(fp),sockfd)+1;//select的第一個參數,描述字中最大值加1
select(maxfdp1,&rset,NULL,NULL,NULL);

//完成上面的代碼以后就開始檢測各個描述字的狀態,看其是否可讀
if(FD_ISSET(fileno(fp),&rset)
{
  
//do something
}

if(FD_ISSET(sockfd,&rset)
{
  
//do something
}


下面為了改造程序,使其能夠進行批量輸入,即能一次輸入多行,還要了解2個函數shutdown和close
區別:
1、close將描述字的訪問計數減一,僅在計數器為0時關閉套接口
2、close終止了數據傳送的2個方向:讀和寫,而shutdown可以只終止一個方向的連接,這就是其參數howto設置的

howto的選項有如下幾種:
1、SHUT_RD     -->關閉連接的讀的一半
2、SHUT_WR     -->關閉連接的寫的一半
3、SHUT_RDWR   -->連接的寫一半和讀一半都關閉
       

作者是通過改造str_cli的函數來介紹shutdown和select的使用的,但書上的例子中少了個關鍵字else,導致輸入一行就輸出一行,沒有批量輸入的現象,查了很長時間才找到那個丟失的else(第12行)

但是我發現,這個批量輸入只能進行輸入一次操作,當我輸入ctrl+d的時候,輸出了以前輸入的多行,但是程序就退出了(需要改造,思考中)

這個程序的主要思想就是,通過一開關先對標準輸入進行select操作(FD_SET(fileno(fp),&rset)),當輸入ctrl+d,開關關閉,關閉連接的寫這一半(shutdown(sockfd,SHUT_WR);),清除select中對標準輸入的操作的標志(FD_CLR(fileno(fp),&rset);),設置select對套接口的操作(FD_SET(sockfd,&rset);).......


這就是對select的簡單介紹和一些應用,不能一次寫的太多,下次再說下如何利用select替代服務端的fork操作......

posted on 2007-09-08 09:56 LG 閱讀(391) 評論(0)  編輯 收藏 引用 所屬分類: UnixProgram

<2007年9月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

相冊

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩精品一本二本三本| 一区二区三区蜜桃网| 91久久精品美女| 黄页网站一区| 好看的日韩视频| 激情成人亚洲| 亚洲精品日韩综合观看成人91| 亚洲欧洲在线观看| 日韩视频在线一区二区三区| 一区二区三区视频在线看| 亚洲一级黄色片| 久久久高清一区二区三区| 麻豆精品传媒视频| 亚洲精品视频在线观看网站| 亚洲一区二区三区777| 久久精品二区三区| 欧美久久久久久久久| 国产精品一区二区久久精品| 极品尤物av久久免费看| 一区二区av在线| 久久久精品久久久久| 最新国产精品拍自在线播放| 99精品国产99久久久久久福利| 欧美一级在线视频| 欧美欧美在线| 黄色在线成人| 午夜日韩电影| 亚洲国产老妈| 欧美在线观看视频一区二区三区| 欧美69视频| 国产亚洲欧洲| 亚洲一区二区三区四区在线观看 | 一本色道久久99精品综合| 亚洲欧美日韩国产综合| 欧美大片在线看| 亚洲欧美成人在线| 亚洲婷婷在线| 国产主播一区二区| 一本一本久久| 欧美二区在线观看| 午夜精品免费在线| 欧美久久久久久久| 亚洲激情av| 久久免费国产精品1| 亚洲午夜电影在线观看| 欧美日本一道本在线视频| 在线不卡视频| 久久综合九色综合欧美就去吻| 亚洲无线视频| 国产精品久久久久免费a∨| 99精品欧美| 亚洲国产视频直播| 麻豆91精品| 亚洲第一中文字幕| 麻豆精品网站| 久久久久久久久久久久久女国产乱| 国产精品三区www17con| 亚洲在线中文字幕| 一本一本久久a久久精品综合妖精| 欧美69视频| 91久久精品国产91久久性色tv | 极品尤物av久久免费看 | 久久精品水蜜桃av综合天堂| 99re热这里只有精品免费视频| 欧美激情视频一区二区三区不卡| 91久久精品一区| 亚洲第一福利视频| 欧美成人首页| aaa亚洲精品一二三区| 亚洲欧洲精品天堂一级 | 在线观看视频一区| 久久久久久亚洲精品中文字幕| 欧美在线看片a免费观看| 国产综合av| 欧美成人免费va影院高清| 欧美成人日韩| 亚洲综合国产精品| 欧美一区二区三区电影在线观看| 国产午夜精品麻豆| 久久久综合网| 欧美aⅴ99久久黑人专区| 日韩视频一区二区在线观看| 99re这里只有精品6| 国产精品视频免费| 久久亚洲视频| 欧美精品在线看| 欧美一进一出视频| 久久综合久久综合久久| 亚洲天堂激情| 久久av在线看| 99riav国产精品| 销魂美女一区二区三区视频在线| 亚洲视频精品| 国产精品99久久久久久久女警| 亚洲美女毛片| 欧美中文字幕视频在线观看| 国色天香一区二区| 亚洲黄色免费| 国产美女搞久久| 欧美不卡在线视频| 国产精品久久久久天堂| 欧美成人tv| 国产精品视频不卡| 亚洲国产高潮在线观看| 国产欧美大片| 亚洲精品九九| 狠狠色狠狠色综合日日小说| 最新热久久免费视频| 国产一区二区av| 夜夜狂射影院欧美极品| 亚洲电影天堂av| 欧美亚洲尤物久久| 亚洲天堂av在线免费| 欧美mv日韩mv亚洲| 久久久综合免费视频| 国产精品久久久久aaaa| 亚洲精品欧美日韩| 亚洲黄色一区二区三区| 久久国产精品黑丝| 欧美在线网站| 国产精品视频99| 9久草视频在线视频精品| 亚洲国产乱码最新视频| 欧美在线观看www| 欧美在线高清视频| 国产精品三级视频| 亚洲伊人网站| 亚洲欧美另类在线| 欧美日韩一区自拍| 亚洲日韩第九十九页| 亚洲国产日日夜夜| 乱码第一页成人| 欧美激情国产高清| 亚洲国产精品久久久久秋霞不卡 | 香蕉成人久久| 久久精品日韩| 国产一区二区三区久久久久久久久| 一区二区电影免费在线观看| 亚洲天堂av在线免费| 欧美视频在线观看一区| 一区二区三区**美女毛片| 亚洲欧美国产高清va在线播| 国产精品99一区| 亚洲尤物精选| 久久男人资源视频| 亚洲国产高清在线| 欧美精品三级在线观看| 9国产精品视频| 欧美一区91| 亚洲第一精品电影| 欧美久久精品午夜青青大伊人| 99xxxx成人网| 欧美制服丝袜第一页| 精品1区2区3区4区| 欧美1区视频| 亚洲国产成人tv| 久久综合九色99| 亚洲成在人线av| 99亚洲视频| 国产精品久久久久久久久果冻传媒 | 日韩亚洲欧美精品| 国产精品扒开腿爽爽爽视频| 亚洲一区二区三区在线播放| 欧美一区日本一区韩国一区| 国产综合久久久久影院| 麻豆成人精品| 亚洲美女在线视频| 午夜精品久久久久久久久久久久久 | 久久国产精品99久久久久久老狼| 免费黄网站欧美| 亚洲精品婷婷| 国产欧美精品xxxx另类| 久久久久久久久久久久久女国产乱| 亚洲国产精品高清久久久| 亚洲综合精品一区二区| 伊人成综合网伊人222| 欧美日韩国产综合网| 性欧美超级视频| 亚洲日本中文字幕区| 久久九九免费| 一区二区三区精密机械公司 | 国产欧美日韩在线| 久久综合亚洲社区| 亚洲天堂av在线免费观看| 蜜桃av一区二区三区| 性欧美1819sex性高清| 亚洲精品国产品国语在线app| 国产精品专区h在线观看| 欧美成人高清视频| 欧美亚洲在线观看| 在线一区二区日韩| 欧美电影在线| 久久精视频免费在线久久完整在线看| 亚洲美女av黄| 亚洲国产精品va在看黑人| 国产欧美日韩另类视频免费观看| 欧美精品在线免费| 欧美阿v一级看视频| 久久狠狠一本精品综合网| 亚洲女人天堂成人av在线|