#define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE #define _FILE_OFFSET_BITS 64 #define _XOPEN_SOURCE #define _XOPEN_SOURCE_EXTENDED #define _GNU_SOURCE #define _DARWIN_C_SOURCE #define __DARWIN_64_BIT_INO_T 1 #include #include #include #include const char* dt_name( unsigned dt) { #define DT_(f) case f: return #f; switch (dt) { DT_( DT_BLK ) DT_( DT_CHR ) DT_( DT_DIR ) DT_( DT_FIFO ) DT_( DT_LNK ) DT_( DT_REG ) DT_( DT_SOCK ) DT_( DT_UNKNOWN) default: return "DT_?"; } #undef DT_ } int main( int argc, char *argv[]) { DIR* d = opendir( argv[1]); struct dirent *de; struct stat st1, st2; char name[1000]; while ((de = readdir( d)) != NULL) { sprintf( name, "%s/%s", argv[1], de->d_name); lstat( name, &st1); stat( name, &st2); printf( "%s\n" " d_type = %s (%u)\n" " d_ino = 0x%llX\n" " lstat dev/rdev/ino = 0x%llX / 0x%llX / 0x%llX\n" " stat dev/rdev/ino = 0x%llX / 0x%llX / 0x%llX\n" , de->d_name, dt_name( de->d_type), de->d_type, (uint64_t)de->d_ino, (uint64_t)st1.st_dev, (uint64_t)st1.st_rdev, (uint64_t)st1.st_ino, (uint64_t)st2.st_dev, (uint64_t)st2.st_rdev, (uint64_t)st2.st_ino); } return 0; }