| 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 = "cygwin" )] |
| 45 | pub use crate::os::cygwin::*; |
| 46 | #[cfg (target_vendor = "apple" )] |
| 47 | pub use crate::os::darwin::*; |
| 48 | #[cfg (target_os = "dragonfly" )] |
| 49 | pub use crate::os::dragonfly::*; |
| 50 | #[cfg (target_os = "emscripten" )] |
| 51 | pub use crate::os::emscripten::*; |
| 52 | #[cfg (target_os = "espidf" )] |
| 53 | pub use crate::os::espidf::*; |
| 54 | #[cfg (target_os = "freebsd" )] |
| 55 | pub use crate::os::freebsd::*; |
| 56 | #[cfg (target_os = "fuchsia" )] |
| 57 | pub use crate::os::fuchsia::*; |
| 58 | #[cfg (target_os = "haiku" )] |
| 59 | pub use crate::os::haiku::*; |
| 60 | #[cfg (target_os = "horizon" )] |
| 61 | pub use crate::os::horizon::*; |
| 62 | #[cfg (target_os = "hurd" )] |
| 63 | pub use crate::os::hurd::*; |
| 64 | #[cfg (target_os = "illumos" )] |
| 65 | pub use crate::os::illumos::*; |
| 66 | #[cfg (target_os = "l4re" )] |
| 67 | pub use crate::os::l4re::*; |
| 68 | #[cfg (target_os = "linux" )] |
| 69 | pub use crate::os::linux::*; |
| 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 = "nuttx" )] |
| 75 | pub use crate::os::nuttx::*; |
| 76 | #[cfg (target_os = "openbsd" )] |
| 77 | pub use crate::os::openbsd::*; |
| 78 | #[cfg (target_os = "redox" )] |
| 79 | pub use crate::os::redox::*; |
| 80 | #[cfg (target_os = "rtems" )] |
| 81 | pub use crate::os::rtems::*; |
| 82 | #[cfg (target_os = "solaris" )] |
| 83 | pub use crate::os::solaris::*; |
| 84 | #[cfg (target_os = "vita" )] |
| 85 | pub use crate::os::vita::*; |
| 86 | #[cfg (target_os = "vxworks" )] |
| 87 | pub use crate::os::vxworks::*; |
| 88 | } |
| 89 | |
| 90 | pub mod ffi; |
| 91 | pub mod fs; |
| 92 | pub mod io; |
| 93 | pub mod net; |
| 94 | pub mod process; |
| 95 | pub mod raw; |
| 96 | pub mod thread; |
| 97 | |
| 98 | /// A prelude for conveniently writing platform-specific code. |
| 99 | /// |
| 100 | /// Includes all extension traits, and some important type definitions. |
| 101 | #[stable (feature = "rust1" , since = "1.0.0" )] |
| 102 | pub mod prelude { |
| 103 | #[doc (no_inline)] |
| 104 | #[stable (feature = "rust1" , since = "1.0.0" )] |
| 105 | pub use super::ffi::{OsStrExt, OsStringExt}; |
| 106 | #[doc (no_inline)] |
| 107 | #[stable (feature = "rust1" , since = "1.0.0" )] |
| 108 | pub use super::fs::DirEntryExt; |
| 109 | #[doc (no_inline)] |
| 110 | #[stable (feature = "file_offset" , since = "1.15.0" )] |
| 111 | pub use super::fs::FileExt; |
| 112 | #[doc (no_inline)] |
| 113 | #[stable (feature = "rust1" , since = "1.0.0" )] |
| 114 | pub use super::fs::{FileTypeExt, MetadataExt, OpenOptionsExt, PermissionsExt}; |
| 115 | #[doc (no_inline)] |
| 116 | #[stable (feature = "rust1" , since = "1.0.0" )] |
| 117 | pub use super::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd}; |
| 118 | #[doc (no_inline)] |
| 119 | #[stable (feature = "rust1" , since = "1.0.0" )] |
| 120 | pub use super::process::{CommandExt, ExitStatusExt}; |
| 121 | #[doc (no_inline)] |
| 122 | #[stable (feature = "rust1" , since = "1.0.0" )] |
| 123 | pub use super::thread::JoinHandleExt; |
| 124 | } |
| 125 | |