Skip to main content

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}