libc_core/
mman.rs

1//! This module provides the `libc` types for MMAN (memory management).
2//!
3//! MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/mman.h>
4
5bitflags! {
6    /// MAP 标志位(用于 mmap 等内存映射操作)
7    ///
8    /// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/mman.h#L22>
9    #[derive(Debug)]
10    pub struct MapFlags: u32 {
11        /// 共享映射,写入会直接影响文件内容
12        const SHARED          = 0x01;
13        /// 私有映射,写入会产生写时复制(Copy-on-Write)
14        const PRIVATE         = 0x02;
15        /// 验证共享映射(共享或私有),与 MAP_SHARED_VALIDATE 相关
16        const SHARED_VALIDATE = 0x03;
17        /// 映射类型掩码(用于屏蔽高位判断映射类型)
18        const TYPE            = 0x0f;
19        /// 使用固定地址映射,映射必须在指定地址
20        const FIXED           = 0x10;
21        /// 匿名映射,不与任何文件关联(内容初始化为 0)
22        const ANONYMOUS       = 0x20;
23        /// 不保留交换空间(swap)
24        const NORESERVE       = 0x4000;
25        /// 堆栈向下增长区域(如线程栈)
26        const GROWSDOWN       = 0x0100;
27        /// 拒绝写操作(通常用于文件系统写保护)
28        const DENYWRITE       = 0x0800;
29        /// 映射可执行代码(允许执行权限)
30        const EXECUTABLE      = 0x1000;
31        /// 映射锁定在内存中,避免换出
32        const LOCKED          = 0x2000;
33        /// 预先加载页面(降低缺页中断)
34        const POPULATE        = 0x8000;
35        /// 非阻塞映射
36        const NONBLOCK        = 0x10000;
37        /// 映射用作线程栈
38        const STACK           = 0x20000;
39        /// 使用大页(HugeTLB)
40        const HUGETLB         = 0x40000;
41        /// 同步映射(同步内存访问)
42        const SYNC            = 0x80000;
43        /// 固定映射,但不覆盖已有映射
44        const FIXED_NOREPLACE = 0x100000;
45        /// 文件映射(默认标志)
46        const FILE            = 0;
47    }
48
49
50    #[derive(Debug, Clone, Copy)]
51    /// 内存映射保护标志(mmap 的 prot 参数)
52    /// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/mman.h#L57>
53    pub struct MmapProt: u32 {
54        /// 可读权限,映射区域可被读取
55        const READ = bit!(0);
56        /// 可写权限,映射区域可被写入
57        const WRITE = bit!(1);
58        /// 可执行权限,映射区域允许执行代码
59        const EXEC = bit!(2);
60    }
61
62    #[derive(Debug)]
63    /// msync 同步标志,用于控制 msync 行为
64    ///
65    /// MUSL: <https://github.com/bminor/musl/blob/c47ad25ea3b484e10326f933e927c0bc8cded3da/include/sys/mman.h#L64C9-L64C17>
66    pub struct MSyncFlags: u32 {
67        /// 异步同步(异步刷新内存映射区域到存储设备)
68        const ASYNC = 1 << 0;
69        /// 使其他缓存失效(使缓存区域无效)
70        const INVALIDATE = 1 << 1;
71        /// 同步同步(阻塞直到数据完全写入存储设备)
72        const SYNC = 1 << 2;
73    }
74
75
76}