#define _LARGEFILE64_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #include #include _syscall3(int, getdents, uint, fd, struct dirent *, dirp, uint, count); void try(const char *what, int err) { if (!err) return; fprintf (stderr, "Unexpected result %d. %s: %s\n", err, what, strerror(errno)); exit(1); } int test_readdir(int fd) { loff_t offset; char dirbuf[4096]; int res; offset = lseek64(fd, 0, SEEK_CUR); res = getdents(fd, (struct dirent *)dirbuf, sizeof(dirbuf)); printf("getdents at f_pos %#016llX returned %d.\n", offset, res); return res; } int main() { int fd; int res; loff_t offset; fd = open64(".", O_RDONLY, 0); try ("open \".\"", fd < 0); do { res = test_readdir(fd); } while (res > 0); offset = lseek64(fd, 0, SEEK_CUR); printf("Final f_pos is %#016llX.\n", offset); return 0; }