#include #include #include #include #include #include #include #include _syscall3(int, getdents, uint, fd, struct dirent *, dirp, uint, count); #define BUF_SIZE 1024 int main(int argc, char **argv) { int fd; char buf[BUF_SIZE]; int result; unsigned nread, offset; struct dirent *ent; if (argc < 2) return 1; fd = open(argv[1], 0); if (fd == -1) { perror("open"); goto err; } result = getdents(fd, (struct dirent *) buf, BUF_SIZE); if (result == -1) { perror("getdents"); goto err; } nread = result; offset = 0; while (offset < nread) { ent = (struct dirent *) &buf[offset]; printf("d_ino=%ld, d_off=%llu, d_name=%s\n", ent->d_ino, (unsigned long long) ent->d_off, ent->d_name); offset += ent->d_reclen; } return 0; err: return 1; }