1 | //! Platform-specific extensions to `std` for Unix platforms. |
2 | //! |
3 | //! Provides access to platform-level information on Unix platforms, and |
4 | //! exposes Unix-specific functions that would otherwise be inappropriate as |
5 | //! part of the core `std` library. |
6 | //! |
7 | //! It exposes more ways to deal with platform-specific strings ([`OsStr`], |
8 | //! [`OsString`]), allows to set permissions more granularly, extract low-level |
9 | //! file descriptors from files and sockets, and has platform-specific helpers |
10 | //! for spawning processes. |
11 | //! |
12 | //! # Examples |
13 | //! |
14 | //! ```no_run |
15 | //! use std::fs::File; |
16 | //! use std::os::unix::prelude::*; |
17 | //! |
18 | //! fn main() -> std::io::Result<()> { |
19 | //! let f = File::create("foo.txt" )?; |
20 | //! let fd = f.as_raw_fd(); |
21 | //! |
22 | //! // use fd with native unix bindings |
23 | //! |
24 | //! Ok(()) |
25 | //! } |
26 | //! ``` |
27 | //! |
28 | //! [`OsStr`]: crate::ffi::OsStr |
29 | //! [`OsString`]: crate::ffi::OsString |
30 | |
31 | #![stable (feature = "rust1" , since = "1.0.0" )] |
32 | #![doc (cfg(unix))] |
33 | |
34 | // Use linux as the default platform when documenting on other platforms like Windows |
35 | #[cfg (doc)] |
36 | use crate::os::linux as platform; |
37 | |
38 | #[cfg (not(doc))] |
39 | mod platform { |
40 | #[cfg (target_os = "aix" )] |
41 | pub use crate::os::aix::*; |
42 | #[cfg (target_os = "android" )] |
43 | pub use crate::os::android::*; |
44 | #[cfg (target_os = "dragonfly" )] |
45 | pub use crate::os::dragonfly::*; |
46 | #[cfg (target_os = "emscripten" )] |
47 | pub use crate::os::emscripten::*; |
48 | #[cfg (target_os = "espidf" )] |
49 | pub use crate::os::espidf::*; |
50 | #[cfg (target_os = "freebsd" )] |
51 | pub use crate::os::freebsd::*; |
52 | #[cfg (target_os = "fuchsia" )] |
53 | pub use crate::os::fuchsia::*; |
54 | #[cfg (target_os = "haiku" )] |
55 | pub use crate::os::haiku::*; |
56 | #[cfg (target_os = "horizon" )] |
57 | pub use crate::os::horizon::*; |
58 | #[cfg (target_os = "hurd" )] |
59 | pub use crate::os::hurd::*; |
60 | #[cfg (target_os = "illumos" )] |
61 | pub use crate::os::illumos::*; |
62 | #[cfg (target_os = "ios" )] |
63 | pub use crate::os::ios::*; |
64 | #[cfg (target_os = "l4re" )] |
65 | pub use crate::os::l4re::*; |
66 | #[cfg (target_os = "linux" )] |
67 | pub use crate::os::linux::*; |
68 | #[cfg (target_os = "macos" )] |
69 | pub use crate::os::macos::*; |
70 | #[cfg (target_os = "netbsd" )] |
71 | pub use crate::os::netbsd::*; |
72 | #[cfg (target_os = "nto" )] |
73 | pub use crate::os::nto::*; |
74 | #[cfg (target_os = "openbsd" )] |
75 | pub use crate::os::openbsd::*; |
76 | #[cfg (target_os = "redox" )] |
77 | pub use crate::os::redox::*; |
78 | #[cfg (target_os = "solaris" )] |
79 | pub use crate::os::solaris::*; |
80 | #[cfg (target_os = "tvos" )] |
81 | pub use crate::os::tvos::*; |
82 | #[cfg (target_os = "visionos" )] |
83 | pub use crate::os::visionos::*; |
84 | #[cfg (target_os = "vita" )] |
85 | pub use crate::os::vita::*; |
86 | #[cfg (target_os = "vxworks" )] |
87 | pub use crate::os::vxworks::*; |
88 | #[cfg (target_os = "watchos" )] |
89 | pub use crate::os::watchos::*; |
90 | } |
91 | |
92 | pub mod ffi; |
93 | pub mod fs; |
94 | pub mod io; |
95 | pub mod net; |
96 | pub mod process; |
97 | pub mod raw; |
98 | pub mod thread; |
99 | |
100 | /// A prelude for conveniently writing platform-specific code. |
101 | /// |
102 | /// Includes all extension traits, and some important type definitions. |
103 | #[stable (feature = "rust1" , since = "1.0.0" )] |
104 | pub mod prelude { |
105 | #[doc (no_inline)] |
106 | #[stable (feature = "rust1" , since = "1.0.0" )] |
107 | pub use super::ffi::{OsStrExt, OsStringExt}; |
108 | #[doc (no_inline)] |
109 | #[stable (feature = "rust1" , since = "1.0.0" )] |
110 | pub use super::fs::DirEntryExt; |
111 | #[doc (no_inline)] |
112 | #[stable (feature = "file_offset" , since = "1.15.0" )] |
113 | pub use super::fs::FileExt; |
114 | #[doc (no_inline)] |
115 | #[stable (feature = "rust1" , since = "1.0.0" )] |
116 | pub use super::fs::{FileTypeExt, MetadataExt, OpenOptionsExt, PermissionsExt}; |
117 | #[doc (no_inline)] |
118 | #[stable (feature = "rust1" , since = "1.0.0" )] |
119 | pub use super::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd}; |
120 | #[doc (no_inline)] |
121 | #[stable (feature = "rust1" , since = "1.0.0" )] |
122 | pub use super::process::{CommandExt, ExitStatusExt}; |
123 | #[doc (no_inline)] |
124 | #[stable (feature = "rust1" , since = "1.0.0" )] |
125 | pub use super::thread::JoinHandleExt; |
126 | } |
127 | |