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

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 閱讀(399) 評論(0)  編輯 收藏 引用 所屬分類: UnixProgram

<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用鏈接

相冊

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲成在线观看| 亚洲国产岛国毛片在线| 亚洲高清成人| 免费人成网站在线观看欧美高清| 午夜精品久久久久久久99热浪潮| 国产伦精品一区二区三区四区免费 | 亚洲午夜久久久久久久久电影网| 欧美金8天国| 一区二区三区久久精品| av不卡免费看| 国产精品亚洲欧美| 久久综合九色综合网站| 久久免费精品日本久久中文字幕| 在线观看91精品国产入口| 欧美成人中文字幕在线| 免费观看成人www动漫视频| 91久久精品日日躁夜夜躁国产| 亚洲人体1000| 国产精品视频免费| 美女网站在线免费欧美精品| 麻豆freexxxx性91精品| 99精品热视频| 亚洲欧美日韩在线观看a三区| 国产一区亚洲| 亚洲人成人99网站| 国产日本欧洲亚洲| 欧美大片在线观看| 国产精品ⅴa在线观看h| 在线播放中文字幕一区| 亚洲黄色成人| 国产亚洲精品久久久久久| 亚洲国产高清aⅴ视频| 欧美色区777第一页| 久久久久久一区| 欧美日韩国产区| 久久久久国产精品一区二区| 女同一区二区| 久久久久久久综合日本| 欧美大香线蕉线伊人久久国产精品| 亚洲尤物视频网| 久久久久久久91| 亚洲欧美日韩一区二区在线| 久久一区二区三区四区| 午夜精品免费视频| 欧美日韩免费高清| 亚洲天堂免费观看| 久久婷婷久久一区二区三区| 亚洲午夜影视影院在线观看| 嫩草成人www欧美| 久久视频在线免费观看| 国产精品久99| 亚洲欧洲日韩综合二区| 亚洲丶国产丶欧美一区二区三区 | 久久午夜视频| 国产精品久久激情| 亚洲精品社区| 亚洲欧洲精品一区二区三区| 久久国产欧美| 久久免费一区| 国产午夜精品久久久久久免费视| 99国产精品久久久久久久久久| 亚洲国产欧美一区| 另类春色校园亚洲| 老司机精品视频网站| 国产视频亚洲精品| 午夜天堂精品久久久久| 亚洲欧美日韩爽爽影院| 欧美性大战久久久久| 亚洲区免费影片| 一本色道**综合亚洲精品蜜桃冫| 老**午夜毛片一区二区三区| 麻豆成人在线观看| 韩日精品视频| 久久久久久国产精品mv| 久久综合九色综合欧美狠狠| 国产欧美一区二区精品仙草咪| 亚洲欧美区自拍先锋| 欧美一区二区精品久久911| 国产精品一区二区久久| 欧美亚洲一区二区三区| 久久久久国色av免费看影院| 国产丝袜一区二区三区| 午夜精品久久久久久久99热浪潮| 欧美一区二区视频97| 国产日韩欧美在线视频观看| 欧美一区二区三区免费观看| 久久精品亚洲国产奇米99| 国产欧美亚洲日本| 久久久免费精品视频| 亚洲国产福利在线| 国产精品99久久久久久白浆小说| 欧美三级中文字幕在线观看| 99re66热这里只有精品3直播| 亚洲欧美清纯在线制服| 国产曰批免费观看久久久| 久久久久国产精品厨房| 亚洲人成网站色ww在线| 欧美一级夜夜爽| 在线免费不卡视频| 欧美日韩国产成人在线| 亚洲欧美在线看| 亚洲国产精品嫩草影院| 亚洲尤物视频在线| 亚洲大胆在线| 欧美图区在线视频| 久久精品人人做人人爽| 亚洲精品社区| 久久一区亚洲| 亚洲一区二区三区四区在线观看| 韩国av一区二区三区在线观看| 欧美 日韩 国产一区二区在线视频| 99精品福利视频| 老司机免费视频一区二区三区| 一本色道久久综合亚洲二区三区| 国产精品美女久久久久久2018| 卡一卡二国产精品| 亚洲欧美在线播放| 亚洲人成在线观看网站高清| 欧美在线亚洲综合一区| 99在线热播精品免费99热| 激情成人中文字幕| 国产精品蜜臀在线观看| 欧美成年人网站| 久久精品人人做人人综合| 亚洲婷婷免费| 亚洲精品美女在线观看播放| 久久久视频精品| 午夜久久一区| 亚洲一区二区三区视频播放| 亚洲国产精品999| 国产一区亚洲| 国产女人精品视频| 国产精品久久久久久久浪潮网站| 欧美高清在线视频| 久久野战av| 久久精品一区二区三区中文字幕| 亚洲网站在线观看| 日韩亚洲精品电影| 亚洲精品视频二区| 亚洲黄色免费电影| 欧美成人自拍| 蜜桃av一区二区| 久久综合婷婷| 久久女同互慰一区二区三区| 久久不见久久见免费视频1| 亚洲欧美日本国产专区一区| 一区二区三区四区蜜桃| 日韩视频在线观看| 99热在这里有精品免费| 亚洲免费av电影| 一区二区成人精品 | 国产美女精品视频免费观看| 欧美人在线视频| 欧美日韩亚洲激情| 欧美三级乱码| 欧美日韩一区二区高清| 欧美日韩中文字幕在线| 欧美网站大全在线观看| 国产精品久久久久久久浪潮网站| 国产精品hd| 国产精品亚洲片夜色在线| 国产美女精品视频| 精品999网站| 亚洲精品视频啊美女在线直播| 亚洲精品一区二区三区樱花| 一本色道久久综合亚洲精品小说 | 国产日韩在线看| 国产日韩一区二区三区在线播放| 狠狠色综合网站久久久久久久| 精品成人久久| 亚洲美洲欧洲综合国产一区| 亚洲一区二区三区高清| 久久国产福利| 亚洲电影专区| 中文久久精品| 久久精品免费看| 欧美精品一区二| 国产精品日本精品| 在线精品视频一区二区| 99精品国产高清一区二区| 亚洲欧美韩国| 久久综合网络一区二区| 亚洲韩国日本中文字幕| 亚洲欧美一区二区原创| 欧美gay视频激情| 国产精品日韩欧美综合 | 欧美性猛交一区二区三区精品| 国产酒店精品激情| 亚洲人成人一区二区在线观看 | 国产曰批免费观看久久久| 亚洲激情偷拍| 欧美一级欧美一级在线播放| 欧美激情一区二区三区高清视频| 一区二区三区日韩欧美| 久久手机免费观看| 国产精品区一区二区三区| 亚洲福利视频一区| 欧美综合二区| 一区二区激情小说| 男女av一区三区二区色多|