1 #include <unistd.h> 2 #include <string.h> 3 #include <sys/uio.h> 4 5 int 6 readv(int fd, struct iovec *v, int ent) 7 { 8 int x, i, n, len; 9 char *t; 10 char buf[10*1024]; 11 12 for(len = i = 0; i < ent; i++) 13 len += v[i].iov_len; 14 if(len > sizeof(buf)) 15 len = sizeof(buf); 16 17 len = read(fd, buf, len); 18 if(len <= 0) 19 return len; 20 21 for(n = i = 0; n < len && i < ent; i++){ 22 x = len - n; 23 if(x > v[i].iov_len) 24 x = v[i].iov_len; 25 memmove(v[i].iov_base, buf + n, x); 26 n += x; 27 } 28 29 return len; 30 } 31