Inode 操作实现类
More...
#include <ramfs.hpp>
Inode 操作实现类
Definition at line 91 of file ramfs.hpp.
◆ RamFsInodeOps()
| ramfs::RamFs::RamFsInodeOps::RamFsInodeOps |
( |
RamFs * |
fs | ) |
|
|
inlineexplicit |
◆ Create()
在目录中创建新文件
- Parameters
-
| dir | 父目录 inode |
| name | 文件名 |
| type | 文件类型 |
- Returns
- Expected<Inode*> 新创建的 inode 或错误
- Precondition
- dir != nullptr && dir->type == FileType::kDirectory
-
name != nullptr && strlen(name) > 0
- Postcondition
- 返回的 inode->type == type
Implements vfs::InodeOps.
Definition at line 188 of file ramfs.cpp.
189 {
190 if (dir == nullptr || name == nullptr) {
192 }
193
194 if (type != FileType::kRegular && type != FileType::kDirectory) {
196 }
197
198 RamInode* ram_dir =
static_cast<RamInode*
>(dir->
fs_private);
199
200
202 if (!alloc_result.has_value()) {
203 return std::unexpected(alloc_result.error());
204 }
205
206 Inode* new_inode = alloc_result.value();
207 new_inode->type = type;
208
209
211 if (!add_result.has_value()) {
213 return std::unexpected(add_result.error());
214 }
215
216 return new_inode;
217}
auto AllocateInode() -> Expected< vfs::Inode * > override
分配新 inode
auto AddToDirectory(RamInode *dir, const char *name, vfs::Inode *inode) -> Expected< void >
auto FreeInode(vfs::Inode *inode) -> Expected< void > override
释放 inode
void * fs_private
文件系统私有数据指针
◆ Lookup()
在目录中查找指定名称的 inode
- Parameters
-
- Returns
- Expected<Inode*> 找到的 inode 或错误
- Precondition
- dir != nullptr && dir->type == FileType::kDirectory
-
name != nullptr && strlen(name) > 0
Implements vfs::InodeOps.
Definition at line 171 of file ramfs.cpp.
172 {
173 if (dir == nullptr || name == nullptr) {
175 }
176
177 RamInode* ram_dir =
static_cast<RamInode*
>(dir->
fs_private);
178
180
181 if (entry == nullptr) {
183 }
184
185 return entry->inode;
186}
auto FindInDirectory(RamInode *dir, const char *name) -> RamDirEntry *
◆ Mkdir()
创建目录
- Parameters
-
- Returns
- Expected<Inode*> 新创建的目录 inode 或错误
- Precondition
- dir != nullptr && dir->type == FileType::kDirectory
-
name != nullptr && strlen(name) > 0
- Postcondition
- 返回的 inode->type == FileType::kDirectory
Implements vfs::InodeOps.
Definition at line 252 of file ramfs.cpp.
253 {
254
255 return Create(dir, name, FileType::kDirectory);
256}
auto Create(vfs::Inode *dir, const char *name, vfs::FileType type) -> Expected< vfs::Inode * > override
在目录中创建新文件
◆ Rmdir()
| auto ramfs::RamFs::RamFsInodeOps::Rmdir |
( |
vfs::Inode * |
dir, |
|
|
const char * |
name |
|
) |
| -> Expected< void > |
|
overridevirtual |
删除目录
- Parameters
-
- Returns
- Expected<void> 成功或错误
- Precondition
- dir != nullptr && dir->type == FileType::kDirectory
-
name != nullptr
Implements vfs::InodeOps.
Definition at line 258 of file ramfs.cpp.
259 {
260 if (dir == nullptr || name == nullptr) {
262 }
263
264 RamInode* ram_dir =
static_cast<RamInode*
>(dir->
fs_private);
265
266
268 if (entry == nullptr) {
270 }
271
272
273 if (entry->inode == nullptr || entry->inode->type != FileType::kDirectory) {
275 }
276
277
278 RamInode* target = static_cast<RamInode*>(entry->inode->fs_private);
281 }
282
283
285 if (!remove_result.has_value()) {
286 return remove_result;
287 }
288
289
290 if (entry->inode->link_count == 0) {
292 }
293
294 return {};
295}
auto IsDirectoryEmpty(RamInode *dir) -> bool
auto RemoveFromDirectory(RamInode *dir, const char *name) -> Expected< void >
◆ Unlink()
| auto ramfs::RamFs::RamFsInodeOps::Unlink |
( |
vfs::Inode * |
dir, |
|
|
const char * |
name |
|
) |
| -> Expected< void > |
|
overridevirtual |
删除文件(解除链接)
- Parameters
-
- Returns
- Expected<void> 成功或错误
- Precondition
- dir != nullptr && dir->type == FileType::kDirectory
-
name != nullptr
Implements vfs::InodeOps.
Definition at line 219 of file ramfs.cpp.
220 {
221 if (dir == nullptr || name == nullptr) {
223 }
224
225 RamInode* ram_dir =
static_cast<RamInode*
>(dir->
fs_private);
226
227
229 if (entry == nullptr) {
231 }
232
233
234 if (entry->inode != nullptr && entry->inode->type == FileType::kDirectory) {
236 }
237
238
240 if (!remove_result.has_value()) {
241 return remove_result;
242 }
243
244
245 if (entry->inode != nullptr && entry->inode->link_count == 0) {
247 }
248
249 return {};
250}
◆ fs_
| RamFs* ramfs::RamFs::RamFsInodeOps::fs_ |
|
private |
The documentation for this class was generated from the following files:
- /workspaces/SimpleKernel/src/filesystem/ramfs/include/ramfs.hpp
- /workspaces/SimpleKernel/src/filesystem/ramfs/ramfs.cpp