libc_core/
mman.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
//! This module provides the `libc` types for MMAN (memory management).
//!
//! MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/mman.h>

bitflags! {
    /// MAP 标志位(用于 mmap 等内存映射操作)
    ///
    /// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/mman.h#L22>
    #[derive(Debug)]
    pub struct MapFlags: u32 {
        /// 共享映射,写入会直接影响文件内容
        const SHARED          = 0x01;
        /// 私有映射,写入会产生写时复制(Copy-on-Write)
        const PRIVATE         = 0x02;
        /// 验证共享映射(共享或私有),与 MAP_SHARED_VALIDATE 相关
        const SHARED_VALIDATE = 0x03;
        /// 映射类型掩码(用于屏蔽高位判断映射类型)
        const TYPE            = 0x0f;
        /// 使用固定地址映射,映射必须在指定地址
        const FIXED           = 0x10;
        /// 匿名映射,不与任何文件关联(内容初始化为 0)
        const ANONYMOUS       = 0x20;
        /// 不保留交换空间(swap)
        const NORESERVE       = 0x4000;
        /// 堆栈向下增长区域(如线程栈)
        const GROWSDOWN       = 0x0100;
        /// 拒绝写操作(通常用于文件系统写保护)
        const DENYWRITE       = 0x0800;
        /// 映射可执行代码(允许执行权限)
        const EXECUTABLE      = 0x1000;
        /// 映射锁定在内存中,避免换出
        const LOCKED          = 0x2000;
        /// 预先加载页面(降低缺页中断)
        const POPULATE        = 0x8000;
        /// 非阻塞映射
        const NONBLOCK        = 0x10000;
        /// 映射用作线程栈
        const STACK           = 0x20000;
        /// 使用大页(HugeTLB)
        const HUGETLB         = 0x40000;
        /// 同步映射(同步内存访问)
        const SYNC            = 0x80000;
        /// 固定映射,但不覆盖已有映射
        const FIXED_NOREPLACE = 0x100000;
        /// 文件映射(默认标志)
        const FILE            = 0;
    }


    #[derive(Debug, Clone, Copy)]
    /// 内存映射保护标志(mmap 的 prot 参数)
    /// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/mman.h#L57>
    pub struct MmapProt: u32 {
        /// 可读权限,映射区域可被读取
        const READ = bit!(0);
        /// 可写权限,映射区域可被写入
        const WRITE = bit!(1);
        /// 可执行权限,映射区域允许执行代码
        const EXEC = bit!(2);
    }

    #[derive(Debug)]
    /// msync 同步标志,用于控制 msync 行为
    ///
    /// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/mman.h#L64C9-L64C17>
    pub struct MSyncFlags: u32 {
        /// 异步同步(异步刷新内存映射区域到存储设备)
        const ASYNC = 1 << 0;
        /// 使其他缓存失效(使缓存区域无效)
        const INVALIDATE = 1 << 1;
        /// 同步同步(阻塞直到数据完全写入存储设备)
        const SYNC = 1 << 2;
    }


}