長さが違う3個の読み込み用バッファを用意して、readvで読み込む。
#include < sys/uio.h > #include < stdio.h > int main() { int i; ssize_t n; char buf1[5], buf2[10], buf3[15]; struct iovec vector[3]; vector[0].iov_base = buf1; vector[0].iov_len = sizeof buf1; vector[1].iov_base = buf2; vector[1].iov_len = sizeof buf2; vector[2].iov_base = buf3; vector[2].iov_len = sizeof buf3; if ((n = readv(0,vector, 3)) < 0){ perror("readv"); return 1; } for (i = 0; i < 3; i++){ if (n < vector[i].iov_len){ vector[i].iov_len = n; } n -= vector[i].iov_len; printf("buf%d[] = %.*s\n", i, (int)vector[i].iov_len, (char *)vector[i].iov_base); } return 0; }