Created
January 16, 2019 22:19
-
-
Save seisvelas/5fddf3f33c416dd0b00c99543e0b3420 to your computer and use it in GitHub Desktop.
Apparently I'm too lazy to learn how to paste into VirtualBox
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#define _GNU_SOURCE | |
#include <dirent.h> /* Defines DT_* constants */ | |
#include <fcntl.h> | |
#include <stdio.h> | |
#include <unistd.h> | |
#include <stdlib.h> | |
#include <sys/stat.h> | |
#include <sys/syscall.h> | |
#define handle_error(msg) \ | |
do { perror(msg); exit(EXIT_FAILURE); } while (0) | |
struct linux_dirent64 { | |
long d_ino; | |
off_t d_off; | |
unsigned short d_reclen; | |
char d_name[]; | |
}; | |
#define BUF_SIZE 1024 | |
int | |
main(int argc, char *argv[]) | |
{ | |
int fd, nread; | |
char buf[BUF_SIZE]; | |
struct linux_dirent64 *d; | |
int bpos; | |
char d_type; | |
fd = open(argc > 1 ? argv[1] : ".", O_RDONLY | O_DIRECTORY); | |
if (fd == -1) | |
handle_error("open"); | |
for ( ; ; ) { | |
nread = syscall(SYS_getdents64, fd, buf, BUF_SIZE); | |
if (nread == -1) | |
handle_error("getdents64"); | |
if (nread == 0) | |
break; | |
printf("--------------- nread=%d ---------------\n", nread); | |
printf("inode# file type d_reclen d_off d_name\n"); | |
for (bpos = 0; bpos < nread;) { | |
d = (struct linux_dirent64 *) (buf + bpos); | |
printf("%8ld ", d->d_ino); | |
d_type = *(buf + bpos + d->d_reclen - 1); | |
printf("%-10s ", (d_type == DT_REG) ? "regular" : | |
(d_type == DT_DIR) ? "directory" : | |
(d_type == DT_FIFO) ? "FIFO" : | |
(d_type == DT_SOCK) ? "socket" : | |
(d_type == DT_LNK) ? "symlink" : | |
(d_type == DT_BLK) ? "block dev" : | |
(d_type == DT_CHR) ? "char dev" : "???"); | |
printf("%4d %10lld %s\n", d->d_reclen, | |
(long long) d->d_off, d->d_name); | |
bpos += d->d_reclen; | |
} | |
} | |
exit(EXIT_SUCCESS); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment