writen.c 611 B

12345678910111213141516171819202122232425262728293031323334
  1. /* include writen */
  2. #include "unp.h"
  3. ssize_t /* Write "n" bytes to a descriptor. */
  4. writen(int fd, const void *vptr, size_t n)
  5. {
  6. size_t nleft;
  7. ssize_t nwritten;
  8. const char *ptr;
  9. ptr = vptr;
  10. nleft = n;
  11. while (nleft > 0) {
  12. if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
  13. if (nwritten < 0 && errno == EINTR)
  14. nwritten = 0; /* and call write() again */
  15. else
  16. return(-1); /* error */
  17. }
  18. nleft -= nwritten;
  19. ptr += nwritten;
  20. }
  21. return(n);
  22. }
  23. /* end writen */
  24. void
  25. Writen(int fd, void *ptr, size_t nbytes)
  26. {
  27. if (writen(fd, ptr, nbytes) != nbytes)
  28. err_sys("writen error");
  29. }