dirent.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #pragma once
  2. #include <libc/sys/types.h>
  3. #define DIR_BUF_SIZE 256
  4. /**
  5. * @brief 文件夹结构体
  6. *
  7. */
  8. struct DIR
  9. {
  10. int fd;
  11. int buf_pos;
  12. int buf_len;
  13. char buf[DIR_BUF_SIZE];
  14. // todo: 加一个指向dirent结构体的指针
  15. };
  16. struct dirent
  17. {
  18. ino_t d_ino; // 文件序列号
  19. off_t d_off; // dir偏移量
  20. unsigned short d_reclen; // 目录下的记录数
  21. unsigned char d_type; // entry的类型
  22. char d_name[256]; // 文件entry的名字
  23. };
  24. /**
  25. * @brief 打开文件夹
  26. *
  27. * @param dirname
  28. * @return DIR*
  29. */
  30. struct DIR *opendir(const char *dirname);
  31. /**
  32. * @brief 关闭文件夹
  33. *
  34. * @param dirp DIR结构体指针
  35. * @return int 成功:0, 失败:-1
  36. +--------+--------------------------------+
  37. | errno | 描述 |
  38. +--------+--------------------------------+
  39. | 0 | 成功 |
  40. | -EBADF | 当前dirp不指向一个打开了的目录 |
  41. | -EINTR | 函数执行期间被信号打断 |
  42. +--------+--------------------------------+
  43. */
  44. int closedir(struct DIR *dirp);
  45. /**
  46. * @brief 从目录中读取数据
  47. *
  48. * @param dir
  49. * @return struct dirent*
  50. */
  51. struct dirent* reaaddir(struct DIR* dir);