tg_rcore_tutorial_syscall/fs.rs
1use bitflags::bitflags;
2
3// 教程说明:
4// 本文件定义用户/内核共享的文件元数据结构(尤其是 `Stat`)。
5// 这些类型通常作为 syscall 参数在用户态与内核态之间传递。
6
7bitflags! {
8 /// 文件类型标志
9 pub struct StatMode: u32 {
10 const NULL = 0;
11 /// directory
12 const DIR = 0o040000;
13 /// ordinary regular file
14 const FILE = 0o100000;
15 }
16}
17
18/// 文件状态信息
19#[repr(C)]
20#[derive(Debug, Clone, Copy)]
21pub struct Stat {
22 /// 文件所在磁盘驱动器号
23 pub dev: u64,
24 /// inode 编号
25 pub ino: u64,
26 /// 文件类型
27 pub mode: StatMode,
28 /// 硬链接数量
29 pub nlink: u32,
30 /// 填充字段
31 pad: [u64; 7],
32}
33
34impl Stat {
35 /// 构造一个全零初始化的 `Stat`。
36 ///
37 /// 常用于用户态先分配结构体,再通过 `fstat` 系统调用由内核回填。
38 pub fn new() -> Self {
39 Self {
40 dev: 0,
41 ino: 0,
42 mode: StatMode::NULL,
43 nlink: 0,
44 pad: [0; 7],
45 }
46 }
47}