SimpleKernel 1.17.0
Loading...
Searching...
No Matches
vfs.hpp
Go to the documentation of this file.
1
5#pragma once
6
7#include "vfs_types.hpp"
8
9namespace vfs {
10
16struct Inode {
18 uint64_t ino{0};
22 uint64_t size{0};
24 uint32_t permissions{0644};
26 uint32_t link_count{1};
28 void* fs_private{nullptr};
30 FileSystem* fs{nullptr};
31
33 InodeOps* ops{nullptr};
34};
35
41struct Dentry {
43 char name[256]{};
45 Inode* inode{nullptr};
47 Dentry* parent{nullptr};
49 Dentry* children{nullptr};
53 void* fs_private{nullptr};
55 uint32_t ref_count{0};
57 bool deleted{false};
58};
59
65struct File {
67 Inode* inode{nullptr};
69 Dentry* dentry{nullptr};
71 uint64_t offset{0};
74
76 FileOps* ops{nullptr};
77};
78
86[[nodiscard]] auto Init() -> Expected<void>;
87
96[[nodiscard]] auto Lookup(const char* path) -> Expected<Dentry*>;
97
108[[nodiscard]] auto Open(const char* path, OpenFlags flags) -> Expected<File*>;
109
118[[nodiscard]] auto Close(File* file) -> Expected<void>;
119
130[[nodiscard]] auto Read(File* file, void* buf, size_t count)
132
143[[nodiscard]] auto Write(File* file, const void* buf, size_t count)
145
156[[nodiscard]] auto Seek(File* file, int64_t offset, SeekWhence whence)
158
167[[nodiscard]] auto MkDir(const char* path) -> Expected<void>;
168
177[[nodiscard]] auto RmDir(const char* path) -> Expected<void>;
178
187[[nodiscard]] auto Unlink(const char* path) -> Expected<void>;
188
199[[nodiscard]] auto ReadDir(File* file, DirEntry* dirent, size_t count)
201
209[[nodiscard]] auto GetRootDentry() -> Dentry*;
210
211} // namespace vfs
File 操作接口
文件系统类型基类
Inode 操作接口
std::expected< T, Error > Expected
std::expected 别名模板
Definition expected.hpp:365
OpenFlags
文件打开标志(兼容 Linux O_* 定义)
Definition vfs_types.hpp:39
auto Read(File *file, void *buf, size_t count) -> Expected< size_t >
从文件读取数据
Definition read.cpp:13
FileType
文件类型
Definition vfs_types.hpp:22
auto Write(File *file, const void *buf, size_t count) -> Expected< size_t >
向文件写入数据
Definition write.cpp:13
auto Open(const char *path, OpenFlags flags) -> Expected< File * >
打开文件
Definition open.cpp:14
auto ReadDir(File *file, DirEntry *dirent, size_t count) -> Expected< size_t >
读取目录内容
Definition readdir.cpp:13
auto MkDir(const char *path) -> Expected< void >
创建目录
Definition mkdir.cpp:14
auto Close(File *file) -> Expected< void >
关闭文件
Definition close.cpp:15
auto Unlink(const char *path) -> Expected< void >
删除文件
Definition unlink.cpp:15
auto GetRootDentry() -> Dentry *
获取根目录 dentry
Definition vfs.cpp:96
auto RmDir(const char *path) -> Expected< void >
删除目录
Definition rmdir.cpp:15
auto Seek(File *file, int64_t offset, SeekWhence whence) -> Expected< uint64_t >
调整文件偏移量
Definition seek.cpp:13
SeekWhence
文件 seek 基准
Definition vfs_types.hpp:94
auto Lookup(const char *path) -> Expected< Dentry * >
路径解析,查找 dentry
Definition lookup.cpp:14
auto Init() -> Expected< void >
VFS 全局初始化
Definition vfs.cpp:80
Dentry — 目录项缓存(路径名 ↔ Inode 的映射)
Definition vfs.hpp:41
bool deleted
标记为已删除(unlink/rmdir 时 ref_count > 0)
Definition vfs.hpp:57
void * fs_private
文件系统私有数据
Definition vfs.hpp:53
Dentry * children
子目录项链表头
Definition vfs.hpp:49
uint32_t ref_count
引用计数(打开的 File 数量)
Definition vfs.hpp:55
char name[256]
文件/目录名
Definition vfs.hpp:43
Dentry * parent
父目录项
Definition vfs.hpp:47
Inode * inode
关联的 inode
Definition vfs.hpp:45
Dentry * next_sibling
兄弟目录项(同一父目录下)
Definition vfs.hpp:51
File — 打开的文件实例(每次 open 产生一个)
Definition vfs.hpp:65
OpenFlags flags
打开标志 (OpenFlags)
Definition vfs.hpp:73
Dentry * dentry
关联的 dentry
Definition vfs.hpp:69
Inode * inode
关联的 inode
Definition vfs.hpp:67
uint64_t offset
当前读写偏移量
Definition vfs.hpp:71
FileOps * ops
文件操作接口
Definition vfs.hpp:76
Inode — 文件元数据(独立于路径名)
Definition vfs.hpp:16
FileSystem * fs
所属文件系统
Definition vfs.hpp:30
uint32_t link_count
硬链接计数
Definition vfs.hpp:26
uint32_t permissions
权限位(简化版)
Definition vfs.hpp:24
uint64_t size
文件大小(字节)
Definition vfs.hpp:22
FileType type
文件类型
Definition vfs.hpp:20
InodeOps * ops
文件操作接口
Definition vfs.hpp:33
uint64_t ino
inode 编号(文件系统内唯一)
Definition vfs.hpp:18
void * fs_private
文件系统私有数据指针
Definition vfs.hpp:28