1
0

dirent.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 <finsh.h>
  13. #include <dirent.h>
  14. int libc_dirent()
  15. {
  16. DIR * dirp;
  17. long int save3 = 0;
  18. long int cur;
  19. int i = 0;
  20. int result = 0;
  21. struct dirent *dp;
  22. dirp = opendir("/");
  23. for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
  24. {
  25. /* save position 3 (after fourth entry) */
  26. if (i++ == 3)
  27. save3 = telldir(dirp);
  28. printf("%s\n", dp->d_name);
  29. /* stop at 400 (just to make sure dirp->__offset and dirp->__size are
  30. scrambled */
  31. if (i == 400)
  32. break;
  33. }
  34. printf("going back past 4-th entry...\n");
  35. /* go back to saved entry */
  36. seekdir(dirp, save3);
  37. /* Check whether telldir equals to save3 now. */
  38. cur = telldir(dirp);
  39. if (cur != save3)
  40. {
  41. printf("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
  42. result = 1;
  43. }
  44. /* print remaining files (3-last) */
  45. for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
  46. printf("%s\n", dp->d_name);
  47. closedir(dirp);
  48. return result;
  49. }
  50. FINSH_FUNCTION_EXPORT(libc_dirent, dirent test for libc);