dirent.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2010-11-17 Bernard first version
  9. */
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <dirent.h>
  13. int libc_dirent()
  14. {
  15. DIR * dirp;
  16. long int save3 = 0;
  17. long int cur;
  18. int i = 0;
  19. int result = 0;
  20. struct dirent *dp;
  21. dirp = opendir("/");
  22. for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
  23. {
  24. /* save position 3 (after fourth entry) */
  25. if (i++ == 3)
  26. save3 = telldir(dirp);
  27. printf("%s\n", dp->d_name);
  28. /* stop at 400 (just to make sure dirp->__offset and dirp->__size are
  29. scrambled */
  30. if (i == 400)
  31. break;
  32. }
  33. printf("going back past 4-th entry...\n");
  34. /* go back to saved entry */
  35. seekdir(dirp, save3);
  36. /* Check whether telldir equals to save3 now. */
  37. cur = telldir(dirp);
  38. if (cur != save3)
  39. {
  40. printf("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
  41. result = 1;
  42. }
  43. /* print remaining files (3-last) */
  44. for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
  45. printf("%s\n", dp->d_name);
  46. closedir(dirp);
  47. return result;
  48. }