#define _FILE_OFFSET_BITS 64 #define _GNU_SOURCE #include #include #include #include #include int main(int argc, char *argv[]) { off_t offset = 0; int h, r; char *m; int ps = getpagesize(); struct iovec iov[2]; if (argc < 2) fprintf(stderr, "argc\n"), exit(1); if (argc >= 3) offset = strtoull(argv[2], NULL, 16); h = open(argv[1], O_RDONLY | O_DIRECT); if (h == -1) perror("open"), exit(1); m = valloc(ps); if (!m) perror("valloc"), exit(1); iov[0].iov_base = m; iov[0].iov_len = ps; iov[1].iov_base = m; iov[1].iov_len = ps; r = preadv(h, iov, 2, offset); if (r < 0) perror("readv"), exit(1); if (close(h)) perror("close"), exit(1); return 0; }