Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1090713
  • 博文数量: 190
  • 博客积分: 1156
  • 博客等级: 少尉
  • 技术积分: 2153
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-16 15:01
个人简介

go!go!go!

文章分类

全部博文(190)

文章存档

2023年(11)

2022年(13)

2021年(15)

2020年(38)

2019年(3)

2018年(6)

2016年(1)

2015年(16)

2014年(13)

2013年(24)

2012年(46)

分类: C/C++

2012-07-09 19:01:07

原文参见:
http://blog.roodo.com/rocksaying/archives/2159383.html


  1. // The prototype of POSIX of read() is:
  2. // ssize_t read(int fd, void *buf, size_t nbyte);
  3. ssize_t saferead(int fd, void *buf, size_t nbyte) {
  4.   size_t nbr; /* number of bytes readed */
  5.   ssize_t rc; /* return code of read() */
  6.   void* bp;
  7.   bp = buf;
  8.   nbr = nbyte;
  9.   while( (rc=read(fd, bp, nbr)) < nbr ) {
  10.     if( rc > 0 ) {
  11.       bp += rc;
  12.       nbr -= rc;
  13.     }
  14.     else if( errno != EINTR )
  15.       abort();
  16.   }
  17. }
  18.  
  19. // The prototype of POSIX of write() is:
  20. // ssize_t write(int fd, void *buf, size_t nbyte) {
  21. ssize_t safewrite(int fd, void *buf, size_t nbyte) {
  22.   size_t nbw; /* number of bytes written */
  23.   ssize_t rc; /* return code of write() */
  24.   void* bp;
  25.   bp = buf;
  26.   nbw = nbyte;
  27.   while( (rc=write(fd, bp, nbw)) < nbw ) {
  28.     if( rc > 0 ) {
  29.       bp += rc;
  30.       nbw -= rc;
  31.     }
  32.     else if( errno != EINTR )
  33.       abort();
  34.   }
  35. }


阅读(881) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~