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}