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
//! 平台相关的平台抽象。
//!
//! `std::sys` 模块是抽象接口,`std` 通过该接口与基础操作系统进行对话。
//! 对于不同的操作系统系列,它具有不同的实现方式,今天只有 Unix 和 Windows,并且最初支持 Redox。
//!
//! 该模块中特定于平台的代码的集中由 `tools/tidy/src/pal.rs` 中的 "platform abstraction layer" 整洁脚本强制执行。
//!
//! 该模块与 `std::sys_common` 中与平台无关的系统集成代码紧密相关。有关详细信息,请参见该模块的文档。
//!
//! 在 future 中,希望将此模块的独立实现提取到 `std` 可以链接到其自己的 crates,从而通过 crate 替换使其实现树外。
//!
//! 尽管由于 `std` 中复杂的相互依赖关系,这将是一个具有挑战性的目标。
//!
//!
//!
//!
//!
//!
//!
//!
//!

#![allow(missing_debug_implementations)]

mod common;

cfg_if::cfg_if! {
    if #[cfg(unix)] {
        mod unix;
        pub use self::unix::*;
    } else if #[cfg(windows)] {
        mod windows;
        pub use self::windows::*;
    } else if #[cfg(target_os = "hermit")] {
        mod hermit;
        pub use self::hermit::*;
    } else if #[cfg(target_os = "wasi")] {
        mod wasi;
        pub use self::wasi::*;
    } else if #[cfg(target_arch = "wasm32")] {
        mod wasm;
        pub use self::wasm::*;
    } else if #[cfg(all(target_vendor = "fortanix", target_env = "sgx"))] {
        mod sgx;
        pub use self::sgx::*;
    } else {
        mod unsupported;
        pub use self::unsupported::*;
    }
}

// 记录时从 `std::os` 中使用的平台导入基本模块。
//
// 请注意,在某些平台上,这些模块不会编译 (`libc` 中缺少内容,它是空的),因此它们不包含在 `std::os` 中,也可以在此处省略。
//
//

#[cfg(doc)]
#[cfg(not(any(
    all(target_arch = "wasm32", not(target_os = "wasi")),
    all(target_vendor = "fortanix", target_env = "sgx")
)))]
cfg_if::cfg_if! {
    if #[cfg(not(windows))] {
        // 在非 Windows 平台 (也就是 linux/osx/etc) 上引入 "minimal" 数量的 windows goop,最终编译
        //

        #[macro_use]
        #[path = "windows/compat.rs"]
        pub mod compat;

        #[path = "windows/c.rs"]
        pub mod c;
    }
}