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

隨筆-163  評論-223  文章-30  trackbacks-0
     由于read、readv、write和writev函數一次讀或寫有時并不能滿足所要求的數據,因此需要多次調用直到要求的字節數或者出錯。針對這4個系統調用,編寫了對應的xxxn版本,實現如下
  1/**********************************************************************************************************
  2 In the following four functions,the optional parameter tran indicate the number of bytes read or written,or -1 if an error occurred.
  3 On success,return true indicate all data had been read or written successfully,otherwise in other cases,return false indicate error or partial success.
  4**********************************************************************************************************/

  5 
  6bool readn(int fd,void* buf,size_t cnt,ssize_t* tran/*=NULL*/)
  7{
  8    size_t left = cnt;
  9    ssize_t ret;
 10    char* ptr = (char*)buf;
 11    
 12    while(left > 0){
 13        ret = read(fd,ptr,left);
 14        if(ret > 0){
 15            left -= ret;
 16            ptr += ret;
 17        }
else if(0==ret || left != cnt)
 18            break;
 19        else{
 20            if(tran) *tran = -1;
 21            return false;        
 22        }

 23    }

 24    if(tran) *tran = cnt-left;
 25    return 0==left;
 26}

 27
 28bool writen(int fd,const void* buf,size_t cnt,ssize_t* tran/*=NULL*/)
 29{
 30    size_t left = cnt;
 31    ssize_t ret;
 32    char* ptr = (char*)buf;
 33
 34    while(left > 0){
 35        ret = write(fd,ptr,left);
 36        if(ret > 0){
 37            left -= ret;
 38            ptr += ret;
 39        }
else if(0==ret || left != cnt)
 40            break;
 41        else
 42            if(tran) *tran = -1;
 43            return false;        
 44    }

 45    if(tran) *tran = cnt-left;
 46    return 0==left;
 47}

 48
 49static int get_iov_tran_index(const struct iovec* iov,int iovcnt,size_t trans,size_t& tran)
 50{
 51    size_t cnt = 0;  int i;
 52
 53    for(i=0;i < iovcnt;++i){
 54        cnt += iov[i].iov_len;
 55        if(trans < cnt){
 56            tran = iov[i].iov_len - (cnt - tran);
 57            break;
 58        }

 59    }

 60    return i;
 61}

 62
 63bool readvn(int fd,const struct iovec* iov,int iovcnt,ssize_t* tran/*=NULL*/)
 64{
 65    if(iovcnt > IOV_MAX){
 66        if(tran) *tran = -1;
 67        errno = EINVAL;    
 68        return false;
 69    }

 70    size_t all_cnt = 0,all_tran = 0,one_tran;
 71    ssize_t ret;
 72
 73    struct iovec _iov[IOV_MAX];
 74    int i;
 75    for(i=0;i < iovcnt;++i)
 76        _iov[i] = iov[i];    
 77        all_cnt += iov[i].iov_len;
 78    }

 79
 80    i = 0;
 81    do{
 82        ret = readv(fd,&_iov[i],iovcnt-i);
 83        if(ret > 0){
 84            all_tran += ret;    
 85            if(all_tran==all_cnt)
 86                break;
 87
 88            i = get_iov_tran_index(iov,iovcnt,all_tran,one_tran);
 89            assert(i < iovcnt);
 90            _iov[i].iov_base = iov[i].iov_base + one_tran;                
 91            _iov[i].iov_len  = iov[i].iov_len - one_tran;
 92
 93        }
else if(0==ret)
 94            break;
 95        else{
 96            if(tran) *tran = -1;
 97            return false;
 98        }

 99    }
while(all_tran < all_cnt);
100
101    if(tran) *tran = all_tran;
102    return all_tran==all_cnt;
103}

104
105bool writevn(int fd,const struct iovec* iov,int iovcnt,ssize_t* tran/*=NULL*/)
106{
107    if(iovcnt > IOV_MAX){
108        if(tran) *tran = -1;
109        errno = EINVAL;    
110        return false;
111    }

112    size_t all_cnt = 0,all_tran = 0,one_tran;
113    ssize_t ret;
114
115    struct iovec _iov[IOV_MAX];
116    int i;
117    for(i=0;i < iovcnt;++i)
118        _iov[i] = iov[i];    
119        all_cnt += iov[i].iov_len;
120    }

121
122    i = 0;
123    do{
124        ret = writev(fd,&_iov[i],iovcnt-i);
125        if(ret > 0){
126            all_tran += ret;    
127            if(all_tran==all_cnt)
128                break;
129
130            i = get_iov_tran_index(iov,iovcnt,all_tran,one_tran);
131            assert(i < iovcnt);
132            _iov[i].iov_base = iov[i].iov_base + one_tran;                
133            _iov[i].iov_len  = iov[i].iov_len - one_tran;
134
135        }
else if(0==ret)
136            break;
137        else{
138            if(tran) *tran = -1;
139            return false;
140        }

141    }
while(all_tran < all_cnt);
142
143    if(tran) *tran = all_tran;
144    return all_tran==all_cnt;
145}
   從以上代碼可看出,readvn和writevn的實現并不是循環對每一個緩沖區簡單地調用readn或writen,而是多次調用原生的readv或writev,因為對于讀寫多個緩沖區,使用readv或writev的效率通常要比多次調用read或write高,所以這樣做就會盡可能減少系統調用的次數,提高效率。
posted on 2013-08-02 19:44 春秋十二月 閱讀(1786) 評論(0)  編輯 收藏 引用 所屬分類: System
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久成人人人人精品欧| 一区二区高清在线| 亚洲日本中文字幕区| 伊人成综合网伊人222| 国产午夜精品一区二区三区视频 | 久久一区国产| 另类激情亚洲| 女人色偷偷aa久久天堂| 欧美国产高清| 欧美日韩精品三区| 国产精品入口| 伊人狠狠色丁香综合尤物| 亚洲黄网站在线观看| 亚洲精品一区二区三区婷婷月| 一区二区三区四区五区视频 | 一本色道久久88综合日韩精品| 一个色综合av| 久久激情中文| 午夜久久资源| 麻豆国产精品va在线观看不卡| 欧美经典一区二区三区| 国产精品免费一区二区三区在线观看| 国产日韩精品视频一区| 在线日本欧美| 亚洲一区二区三| 免费在线亚洲| 亚洲一区久久久| 免费成人在线视频网站| 国产精品免费视频观看| 亚洲精品久久嫩草网站秘色| 午夜视频一区在线观看| 欧美va天堂| 午夜精品久久久久影视| 欧美韩日一区| 欧美伦理一区二区| 激情久久久久| 小嫩嫩精品导航| 亚洲黄色高清| 欧美一区二区在线播放| 欧美日韩一区二区欧美激情 | 亚洲在线成人精品| 欧美成人国产一区二区| 国内精品久久久久久影视8| 在线亚洲一区二区| 欧美成人免费全部观看天天性色| 在线亚洲精品| 欧美日韩亚洲网| 亚洲人www| 国外成人免费视频| 亚洲尤物精选| 亚洲精品国产视频| 模特精品在线| 国产综合色精品一区二区三区| 91久久精品美女| 亚洲在线电影| 欧美中文在线观看国产| 亚洲高清二区| 久久久久久69| 国产一区二区你懂的| 亚洲欧美综合网| 亚洲蜜桃精久久久久久久 | 欧美日韩精品免费观看视一区二区 | 欧美成人tv| 久久精品久久99精品久久| 韩日精品视频| 欧美成人精品高清在线播放| 久久亚洲春色中文字幕| 亚洲第一网站免费视频| 欧美国产第一页| 欧美人与禽猛交乱配视频| 亚洲视屏在线播放| 亚洲欧美激情视频| 一区二区三区亚洲| 亚洲国产精品一区二区第四页av | 欧美在线一二三区| 加勒比av一区二区| 亚洲成色777777女色窝| 欧美日韩亚洲一区二区三区| 亚洲免费中文字幕| 久久av红桃一区二区小说| 亚洲第一精品福利| 亚洲精品国产精品国自产在线 | 日韩一级黄色片| 老司机67194精品线观看| 欧美成人一区二免费视频软件| 亚洲国产成人porn| 欧美高清不卡| 欧美日韩国产小视频| 亚洲天堂av在线免费观看| 久久综合色影院| 久久夜色精品国产噜噜av| 亚洲第一主播视频| 亚洲激情视频在线播放| 欧美日韩视频在线一区二区观看视频 | 麻豆成人91精品二区三区| 亚洲国产精品成人一区二区| 欧美国产日韩一区二区| 欧美激情第8页| 日韩一级在线观看| 亚洲视频中文字幕| 国产精品任我爽爆在线播放| 久久都是精品| 欧美大片在线观看一区二区| 一本色道久久综合精品竹菊| 亚洲图片在线观看| 久久久www成人免费无遮挡大片| 一区二区三区精品久久久| 亚洲一区综合| 亚洲国产精品久久人人爱蜜臀| 亚洲免费av电影| 国产一区再线| 亚洲精品欧美一区二区三区| 久久久久久国产精品mv| 亚洲淫片在线视频| 久久精品日产第一区二区三区| 亚洲区第一页| 亚洲一区二区三区免费视频 | 亚洲精品中文字幕在线| 国产精品久久久久久久久搜平片| 久久综合图片| 国产精品狠色婷| 欧美韩国在线| 国产亚洲精品一区二区| 亚洲精品国产精品乱码不99按摩| 国产精品日韩欧美| 亚洲国产成人久久| 亚洲视频一区二区在线观看| 日韩午夜av在线| 久久久999精品免费| 亚欧美中日韩视频| 国产精品视频xxx| 久久资源av| 欧美日韩综合不卡| 欧美激情视频免费观看| 国产视频精品xxxx| 在线性视频日韩欧美| 欧美理论在线| 亚洲精品久久嫩草网站秘色| 国产欧美三级| 亚洲大胆人体在线| 91久久久久久国产精品| 一区二区三区三区在线| 亚洲欧美日产图| 国产精品久久久久影院亚瑟| 亚洲欧洲在线观看| 亚洲国产第一页| 亚洲天堂网在线观看| 在线视频一区观看| 欧美gay视频| 亚洲国产导航| 99在线精品观看| 国产精品一区二区男女羞羞无遮挡| 免费不卡亚洲欧美| 日韩小视频在线观看专区| 久久亚洲综合色| 国产精品久久影院| 午夜精品视频一区| 午夜精品久久久| 欧美日韩国产影片| 亚洲人午夜精品免费| 亚洲精品偷拍| 欧美搞黄网站| 亚洲女女做受ⅹxx高潮| 欧美在线免费一级片| 国产一区二区三区直播精品电影 | 亚洲欧美日韩精品久久| 欧美日在线观看| 亚洲一区二区三区欧美| 亚洲男女毛片无遮挡| 国产精品一卡| 亚洲一线二线三线久久久| 午夜精品久久久久久久99黑人| 国产午夜精品麻豆| 欧美日韩久久久久久| 亚洲网友自拍| 亚洲天堂免费在线观看视频| 欧美日韩国产三区| 日韩视频中午一区| 亚洲伊人伊色伊影伊综合网| 国产精品久久久一区麻豆最新章节 | 欧美成人免费全部| 亚洲激情在线观看| 亚洲小视频在线观看| 国产伦精品一区二区三区视频孕妇| 亚洲欧美久久久| 玖玖玖免费嫩草在线影院一区| 亚洲激情啪啪| 欧美理论片在线观看| 亚洲欧洲日本国产| 欧美激情影院| 国产精品综合| 国产在线播放一区二区三区| 亚洲在线观看| 欧美一级在线播放| 亚洲精品资源| 欧美成人国产一区二区| 亚洲精品国产精品乱码不99| 欧美人与禽性xxxxx杂性| 亚洲欧美卡通另类91av | 亚洲一区二区三区在线|