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