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