dirent.c 874 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <dirent.h>
  7. #define _DTIFY(DT) [DT] #DT
  8. const char const *types[] = {
  9. _DTIFY(DT_UNKNOWN),
  10. _DTIFY(DT_FIFO),
  11. _DTIFY(DT_CHR),
  12. _DTIFY(DT_DIR),
  13. _DTIFY(DT_BLK),
  14. _DTIFY(DT_REG),
  15. _DTIFY(DT_LNK),
  16. _DTIFY(DT_SOCK),
  17. _DTIFY(DT_WHT)
  18. };
  19. int main(int argc, char **argv)
  20. {
  21. DIR *dirh;
  22. struct dirent *de;
  23. struct dirent64 *de64;
  24. const char const mydir[] = ".";
  25. if ((dirh = opendir(mydir)) == NULL) {
  26. perror("opendir");
  27. return 1;
  28. }
  29. printf("readdir() says:\n");
  30. while ((de = readdir(dirh)) != NULL)
  31. printf("\tdir entry %s: %s\n", types[de->d_type], de->d_name);
  32. rewinddir(dirh);
  33. printf("readdir64() says:\n");
  34. while ((de64 = readdir64(dirh)) != NULL)
  35. printf("\tdir entry %s: %s\n", types[de64->d_type], de64->d_name);
  36. closedir(dirh);
  37. return 0;
  38. }