注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Allen小笔记

有时会忘记努力...

 
 
 

日志

 
 

Robust Reading and Writing with RIO package ( 一 )  

2010-10-13 18:03:02|  分类: C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

这次写上Unbuffered input & output functions.也就是说没有Application-level buffering .他支持Interleaved arbitrarily.
废话不多说上代码:
头文件:// returns : number of bytes transferred if OK, 0 on EOF, -1 on error.
ssize_t rio_readn(int fd, void *usrbuf, size_t n);
ssize_t rio_writen(int fd,void *usrbuf, size_t n);

/// C  CODE--------------------------------------------
  ssize_t rio_readn(int fd, void *usrbuf, size_t n)
  {
     size_t  nleft = n;
     ssize_t nread;
     char *bufp = usrbuf;
     while( nleft>0){
      if( ( nread = read(fd,bufp,nleft) ) < 0 ){
         if(errno = EINTR)
              nread = 0;/* interrupted by sig handler return  and  call read() again*/
         else
              return -1; /* error set by read() */
         else if ( nread == 0 )
             break; /* end of file */
         nleft -= nread;
         bufp += nread;
      }
    
     }
     return (n-nleft);
   }

ssize_t rio_writen(int fd,void *usrbuf, size_t n)
{
      size_t  nleft = n;
      ssize_t nwritten;
      char *bufp = usrbuf;
      while( nleft>0){
      if( ( nwritten =  write(fd,bufp,nleft) ) <= 0 ){
         if(errno = EINTR)
              nwritten = 0;/* interrupted by sig handler return  and  call read() again*/
         else
              return -1; /* error set by read() */
         nleft -= nwritten ;
         bufp += nwritten ;
      }
     return n;
   }  
      
}
  评论这张
 
阅读(542)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017