dirent.h 1.4 KB

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