1 /* 2 * fread.c 3 */ 4 5 #include <errno.h> 6 #include <unistd.h> 7 #include <stdio.h> 8 _fread(void * buf,size_t count,FILE * f)9size_t _fread(void *buf, size_t count, FILE * f) 10 { 11 size_t bytes = 0; 12 ssize_t rv; 13 char *p = buf; 14 15 while (count) { 16 rv = read(fileno(f), p, count); 17 if (rv == -1) { 18 if (errno == EINTR || errno == EAGAIN) 19 continue; 20 else 21 break; 22 } else if (rv == 0) { 23 break; 24 } 25 26 p += rv; 27 bytes += rv; 28 count -= rv; 29 } 30 31 return bytes; 32 } 33