     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
    76
    77
    78

    //! Platform-specific extensions to `std` for Unix platforms.
    //!
    //! Provides access to platform-level information on Unix platforms, and
    //! exposes Unix-specific functions that would otherwise be inappropriate as
    //! part of the core `std` library.
    //!
    //! It exposes more ways to deal with platform-specific strings (`OsStr`,
    //! `OsString`), allows to set permissions more granularly, extract low-level
    //! file descriptors from files and sockets, and has platform-specific helpers
    //! for spawning processes.
    //!
    //! # Examples
    //!
    //! ```no_run
    //! use std::fs::File;
    //! use std::os::unix::prelude::*;
    //!
    //! fn main() -> std::io::Result<()> {
    //!     let f = File::create("foo.txt")?;
    //!     let fd = f.as_raw_fd();
    //!
    //!     // use fd with native unix bindings
    //!
    //!     Ok(())
    //! }
    //! ```

    #![stable(feature = "rust1", since = "1.0.0")]
    #![doc(cfg(unix))]
    #![allow(missing_docs)]

    pub mod ffi;
    pub mod fs;
    pub mod io;
    pub mod net;
    pub mod process;
    pub mod raw;
    pub mod thread;

    #[unstable(feature = "peer_credentials_unix_socket", issue = "42839", reason = "unstable")]
    #[cfg(any(
        target_os = "android",
        target_os = "linux",
        target_os = "dragonfly",
        target_os = "freebsd",
        target_os = "ios",
        target_os = "macos",
        target_os = "openbsd"
    ))]
    pub mod ucred;

    /// A prelude for conveniently writing platform-specific code.
    ///
    /// Includes all extension traits, and some important type definitions.
    #[stable(feature = "rust1", since = "1.0.0")]
    pub mod prelude {
        #[doc(no_inline)]
        #[stable(feature = "rust1", since = "1.0.0")]
        pub use super::ffi::{OsStrExt, OsStringExt};
        #[doc(no_inline)]
        #[stable(feature = "rust1", since = "1.0.0")]
        pub use super::fs::DirEntryExt;
        #[doc(no_inline)]
        #[stable(feature = "file_offset", since = "1.15.0")]
        pub use super::fs::FileExt;
        #[doc(no_inline)]
        #[stable(feature = "rust1", since = "1.0.0")]
        pub use super::fs::{FileTypeExt, MetadataExt, OpenOptionsExt, PermissionsExt};
        #[doc(no_inline)]
        #[stable(feature = "rust1", since = "1.0.0")]
        pub use super::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
        #[doc(no_inline)]
        #[stable(feature = "rust1", since = "1.0.0")]
        pub use super::process::{CommandExt, ExitStatusExt};
        #[doc(no_inline)]
        #[stable(feature = "rust1", since = "1.0.0")]
        pub use super::thread::JoinHandleExt;
    }