1 #pragma once 2 #include <libc/src/sys/types.h> 3 4 5 /** 6 * @brief inode的属性(copy from vfs.h) 7 * 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);