#include #include #include #include #include #include #include #include #include _syscall3(int, getdents, uint, fd, struct dirent *, dirp, uint, count); int main(int argc, char *argv[]) { struct dirent dirent; int fd; int nread; struct dirent *p; off_t offset; if (argc != 2) { fprintf(stderr, "No dir specified\n"); exit(1); } if ((fd = open(argv[1], O_RDONLY)) < 0) { fprintf(stderr, "Could not open directory %s\n", argv[1]); exit(2); } while ((nread = getdents(fd, &dirent, sizeof(dirent))) > 0) { p = &dirent; while (nread > 0) { printf("d_reclen = %d, d_name = %s, d_off = %lu\n", p->d_reclen, p->d_name, p->d_off); nread -= p->d_reclen; p = (struct dirent *)((char *)p + p->d_reclen); } offset = lseek(fd, 0, SEEK_CUR); printf("Offset is %llu\n", offset); if (lseek(fd, offset, SEEK_SET) < 0) { perror("lseek"); exit(1); } } exit(0); }