writen() --- readn()

来源:互联网 发布:辐射4捏脸数据存档 编辑:程序博客网 时间:2024/06/03 22:44

两个有用的函数::

    ssize_t      /* Read "n" bytes from a descriptor. */      readn(int fd, void *vptr, size_t n)      {       size_t nleft;       ssize_t nread;       char *ptr;       ptr = vptr;       nleft = n;       while (nleft > 0) {        if ( (nread = read(fd, ptr, nleft)) < 0) {         if (errno == EINTR)          nread = 0;  /* and call read() again */         else          return(-1);        } else if (nread == 0)         break;    /* EOF */        nleft -= nread;        ptr   += nread;       }       return(n - nleft);  /* return >= 0 */      }     ssize_t      /* Write "n" bytes to a descriptor. */      writen(int fd, const void *vptr, size_t n)      {       size_t  nleft;       ssize_t  nwritten;       const char *ptr;       ptr = vptr;       nleft = n;       while (nleft > 0) {        if ( (nwritten = write(fd, ptr, nleft)) <= 0) {         if (nwritten < 0 && errno == EINTR)          nwritten = 0;  /* and call write() again */         else          return(-1);   /* error */        }        nleft -= nwritten;        ptr   += nwritten;       }       return(n);      }  
原创粉丝点击