原文参见:
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. }


10-16 06:38
查看更多