Skip to main content

RealSystem

Struct RealSystem 

Source
pub struct RealSystem(/* private fields */);
Expand description

Implementation of system traits that actually interact with the underlying system

RealSystem is an empty struct because the underlying operating system manages the system’s internal state.

Some trait methods implemented by RealSystem (such as SendSignal::kill) return futures, but the returned futures do not perform asynchronous operations. Those methods block the current thread until the underlying system calls complete and then return ready futures. See also the system module documentation.

Implementations§

Source§

impl RealSystem

Source

pub unsafe fn new() -> Self

Returns an instance of RealSystem.

§Safety

This function is marked unsafe because improper use of RealSystem may lead to undefined behavior. Remember that most operations performed on the system by Env are not thread-safe. You should never use RealSystem in a multi-threaded program, and it is your responsibility to make sure you are using only one instance of ReadSystem in the process.

Trait Implementations§

Source§

impl CaughtSignals for RealSystem

Source§

fn caught_signals(&self) -> Vec<Number>

Returns signals this process has caught, if any. Read more
Source§

impl Chdir for RealSystem

Source§

fn chdir(&self, path: &CStr) -> Result<()>

Changes the working directory.
Source§

impl Clock for RealSystem

Source§

fn now(&self) -> Instant

Returns the current time.
Source§

impl Close for RealSystem

Source§

fn close(&self, fd: Fd) -> Result<()>

Closes a file descriptor. Read more
Source§

impl Debug for RealSystem

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Dup for RealSystem

Source§

fn dup(&self, from: Fd, to_min: Fd, flags: EnumSet<FdFlag>) -> Result<Fd>

Duplicates a file descriptor. Read more
Source§

fn dup2(&self, from: Fd, to: Fd) -> Result<Fd>

Duplicates a file descriptor. Read more
Source§

impl Exec for RealSystem

Source§

fn execve( &self, path: &CStr, args: &[CString], envs: &[CString], ) -> impl Future<Output = Result<Infallible>> + use<>

Replaces the current process with an external utility. Read more
Source§

impl Exit for RealSystem

Source§

fn exit( &self, exit_status: ExitStatus, ) -> impl Future<Output = Infallible> + use<>

Terminates the current process. Read more
Source§

impl Fcntl for RealSystem

Source§

fn ofd_access(&self, fd: Fd) -> Result<OfdAccess>

Returns the open file description access mode.
Source§

fn get_and_set_nonblocking(&self, fd: Fd, nonblocking: bool) -> Result<bool>

Gets and sets the non-blocking mode for the open file description. Read more
Source§

fn fcntl_getfd(&self, fd: Fd) -> Result<EnumSet<FdFlag>>

Returns the attributes for the file descriptor.
Source§

fn fcntl_setfd(&self, fd: Fd, flags: EnumSet<FdFlag>) -> Result<()>

Sets attributes for the file descriptor.
Source§

impl Fork for RealSystem

Source§

fn new_child_process(&self) -> Result<ChildProcessStarter<Self>>

Creates a new child process.

This implementation calls the fork system call and returns both in the parent and child process. In the parent, the returned ChildProcessStarter ignores any arguments and returns the child process ID. In the child, the starter runs the task and exits the process.

Source§

impl Fstat for RealSystem

Source§

fn fstat(&self, fd: Fd) -> Result<Stat>

Retrieves metadata of a file. Read more
Source§

fn fstatat( &self, dir_fd: Fd, path: &CStr, follow_symlinks: bool, ) -> Result<Stat>

Retrieves metadata of a file. Read more
Source§

fn is_directory(&self, path: &CStr) -> bool

Whether there is a directory at the specified path.
Source§

fn fd_is_pipe(&self, fd: Fd) -> bool

Tests if a file descriptor is a pipe.
Source§

impl GetCwd for RealSystem

Source§

fn getcwd(&self) -> Result<PathBuf>

Returns the current working directory path.
Source§

impl GetPid for RealSystem

Source§

fn getsid(&self, pid: Pid) -> Result<Pid>

Returns the session ID of the specified process. Read more
Source§

fn getpid(&self) -> Pid

Returns the process ID of the current process. Read more
Source§

fn getppid(&self) -> Pid

Returns the process ID of the parent process. Read more
Source§

fn getpgrp(&self) -> Pid

Returns the process group ID of the current process. Read more
Source§

impl GetPw for RealSystem

Source§

fn getpwnam_dir(&self, name: &CStr) -> Result<Option<PathBuf>>

Returns the home directory path of the given user. Read more
Source§

impl GetRlimit for RealSystem

Source§

fn getrlimit(&self, resource: Resource) -> Result<LimitPair>

Returns the limits for the specified resource. Read more
Source§

impl GetSigaction for RealSystem

Source§

fn get_sigaction(&self, signal: Number) -> Result<Disposition>

Gets the disposition for a signal. Read more
Source§

impl GetUid for RealSystem

Source§

fn getuid(&self) -> Uid

Returns the real user ID of the current process.
Source§

fn geteuid(&self) -> Uid

Returns the effective user ID of the current process.
Source§

fn getgid(&self) -> Gid

Returns the real group ID of the current process.
Source§

fn getegid(&self) -> Gid

Returns the effective group ID of the current process.
Source§

impl IsExecutableFile for RealSystem

Source§

fn is_executable_file(&self, path: &CStr) -> bool

Whether there is an executable regular file at the specified path.
Source§

impl Isatty for RealSystem

Source§

fn isatty(&self, fd: Fd) -> bool

Tests if a file descriptor is associated with a terminal device. Read more
Source§

impl Open for RealSystem

Source§

fn open( &self, path: &CStr, access: OfdAccess, flags: EnumSet<OpenFlag>, mode: Mode, ) -> Result<Fd>

Opens a file descriptor. Read more
Source§

fn open_tmpfile(&self, parent_dir: &Path) -> Result<Fd>

Opens a file descriptor associated with an anonymous temporary file. Read more
Source§

fn fdopendir(&self, fd: Fd) -> Result<impl Dir + use<>>

Opens a directory for enumerating entries. Read more
Source§

fn opendir(&self, path: &CStr) -> Result<impl Dir + use<>>

Opens a directory for enumerating entries. Read more
Source§

impl Pipe for RealSystem

Source§

fn pipe(&self) -> Result<(Fd, Fd)>

Creates an unnamed pipe. Read more
Source§

impl Read for RealSystem

Source§

fn read(&self, fd: Fd, buffer: &mut [u8]) -> Result<usize>

Reads from the file descriptor. Read more
Source§

impl Seek for RealSystem

Source§

fn lseek(&self, fd: Fd, position: SeekFrom) -> Result<u64>

Moves the position of the open file description. Read more
Source§

impl Select for RealSystem

Source§

fn select( &self, readers: &mut Vec<Fd>, writers: &mut Vec<Fd>, timeout: Option<Duration>, signal_mask: Option<&[Number]>, ) -> Result<c_int>

Waits for a next event. Read more
Source§

impl SendSignal for RealSystem

Source§

fn kill( &self, target: Pid, signal: Option<Number>, ) -> impl Future<Output = Result<()>> + use<>

Sends a signal. Read more
Source§

fn raise(&self, signal: Number) -> impl Future<Output = Result<()>> + use<>

Sends a signal to the current process. Read more
Source§

impl SetPgid for RealSystem

Source§

fn setpgid(&self, pid: Pid, pgid: Pid) -> Result<()>

Modifies the process group ID of a process. Read more
Source§

impl SetRlimit for RealSystem

Source§

fn setrlimit(&self, resource: Resource, limits: LimitPair) -> Result<()>

Sets the limits for the specified resource. Read more
Source§

impl ShellPath for RealSystem

Source§

fn shell_path(&self) -> CString

Returns the path to the shell.

On Linux, this function returns /proc/self/exe. On other platforms, it searches for an executable sh from the default PATH returned by confstr_path.

Source§

impl Sigaction for RealSystem

Source§

fn sigaction( &self, signal: Number, handling: Disposition, ) -> Result<Disposition>

Gets and sets the disposition for a signal. Read more
Source§

impl Sigmask for RealSystem

Source§

fn sigmask( &self, op: Option<(SigmaskOp, &[Number])>, old_mask: Option<&mut Vec<Number>>, ) -> Result<()>

Gets and/or sets the signal blocking mask. Read more
Source§

impl Signals for RealSystem

Source§

const SIGABRT: Number

The signal number for SIGABRT
Source§

const SIGALRM: Number

The signal number for SIGALRM
Source§

const SIGBUS: Number

The signal number for SIGBUS
Source§

const SIGCHLD: Number

The signal number for SIGCHLD
Source§

const SIGCLD: Option<Number> = None

The signal number for SIGCLD, if available on the system
Source§

const SIGCONT: Number

The signal number for SIGCONT
Source§

const SIGEMT: Option<Number> = None

The signal number for SIGEMT, if available on the system
Source§

const SIGFPE: Number

The signal number for SIGFPE
Source§

const SIGHUP: Number

The signal number for SIGHUP
Source§

const SIGILL: Number

The signal number for SIGILL
Source§

const SIGINFO: Option<Number> = None

The signal number for SIGINFO, if available on the system
Source§

const SIGINT: Number

The signal number for SIGINT
Source§

const SIGIO: Option<Number>

The signal number for SIGIO, if available on the system
Source§

const SIGIOT: Number

The signal number for SIGIOT
Source§

const SIGKILL: Number

The signal number for SIGKILL
Source§

const SIGLOST: Option<Number> = None

The signal number for SIGLOST, if available on the system
Source§

const SIGPIPE: Number

The signal number for SIGPIPE
Source§

const SIGPOLL: Option<Number>

The signal number for SIGPOLL, if available on the system
Source§

const SIGPROF: Number

The signal number for SIGPROF
Source§

const SIGPWR: Option<Number>

The signal number for SIGPWR, if available on the system
Source§

const SIGQUIT: Number

The signal number for SIGQUIT
Source§

const SIGSEGV: Number

The signal number for SIGSEGV
Source§

const SIGSTKFLT: Option<Number>

The signal number for SIGSTKFLT, if available on the system
Source§

const SIGSTOP: Number

The signal number for SIGSTOP
Source§

const SIGSYS: Number

The signal number for SIGSYS
Source§

const SIGTERM: Number

The signal number for SIGTERM
Source§

const SIGTHR: Option<Number> = None

The signal number for SIGTHR, if available on the system
Source§

const SIGTRAP: Number

The signal number for SIGTRAP
Source§

const SIGTSTP: Number

The signal number for SIGTSTP
Source§

const SIGTTIN: Number

The signal number for SIGTTIN
Source§

const SIGTTOU: Number

The signal number for SIGTTOU
Source§

const SIGURG: Number

The signal number for SIGURG
Source§

const SIGUSR1: Number

The signal number for SIGUSR1
Source§

const SIGUSR2: Number

The signal number for SIGUSR2
Source§

const SIGVTALRM: Number

The signal number for SIGVTALRM
Source§

const SIGWINCH: Number

The signal number for SIGWINCH
Source§

const SIGXCPU: Number

The signal number for SIGXCPU
Source§

const SIGXFSZ: Number

The signal number for SIGXFSZ
Source§

fn sigrt_range(&self) -> Option<RangeInclusive<Number>>

Returns the range of real-time signals supported by the system. Read more
Source§

const NAMED_SIGNALS: &'static [(&'static str, Option<Number>)] = _

List of all signal names and their numbers, excluding real-time signals Read more
Source§

fn iter_sigrt(&self) -> impl DoubleEndedIterator<Item = Number> + use<Self>

Returns an iterator over all real-time signals supported by the system. Read more
Source§

fn to_signal_number<N: Into<RawNumber>>(&self, number: N) -> Option<Number>

Tests if a signal number is valid and returns its signal number. Read more
Source§

fn sig2str<N: Into<RawNumber>>(&self, signal: N) -> Option<Cow<'static, str>>

Converts a signal number to its string representation. Read more
Source§

fn str2sig(&self, name: &str) -> Option<Number>

Converts a string representation of a signal to its signal number. Read more
Source§

fn validate_signal(&self, number: RawNumber) -> Option<(Name, Number)>

Tests if a signal number is valid and returns its name and number. Read more
Source§

fn signal_name_from_number(&self, number: Number) -> Name

Returns the signal name for the signal number. Read more
Source§

fn signal_number_from_name(&self, name: Name) -> Option<Number>

Gets the signal number from the signal name. Read more
Source§

impl Sysconf for RealSystem

Source§

fn confstr_path(&self) -> Result<UnixString>

Returns the standard $PATH value where all standard utilities are expected to be found. Read more
Source§

impl TcGetPgrp for RealSystem

Source§

fn tcgetpgrp(&self, fd: Fd) -> Result<Pid>

Returns the current foreground process group ID. Read more
Source§

impl TcSetPgrp for RealSystem

Source§

fn tcsetpgrp( &self, fd: Fd, pgid: Pid, ) -> impl Future<Output = Result<()>> + use<>

Switches the foreground process group. Read more
Source§

impl Times for RealSystem

Source§

fn times(&self) -> Result<CpuTimes>

Returns consumed CPU times.

This function actually uses getrusage rather than times because it provides better resolution on many systems.

Source§

impl Umask for RealSystem

Source§

fn umask(&self, new_mask: Mode) -> Mode

Gets and sets the file creation mode mask. Read more
Source§

impl Wait for RealSystem

Source§

fn wait(&self, target: Pid) -> Result<Option<(Pid, ProcessState)>>

Reports updated status of a child process. Read more
Source§

impl Write for RealSystem

Source§

fn write(&self, fd: Fd, buffer: &[u8]) -> Result<usize>

Writes to the file descriptor. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> SystemEx for T
where T: System + ?Sized,

Source§

fn move_fd_internal(&mut self, from: Fd) -> Result<Fd>

👎Deprecated since 0.11.0: use yash_env::io::move_fd_internal instead
Moves a file descriptor to MIN_INTERNAL_FD or larger. Read more
Source§

fn fd_is_pipe(&self, fd: Fd) -> bool

👎Deprecated since 0.11.0: use yash_env::system::Fstat::fd_is_pipe instead
Tests if a file descriptor is a pipe.
Source§

fn tcsetpgrp_with_block( &mut self, fd: Fd, pgid: Pid, ) -> impl Future<Output = Result<()>>

👎Deprecated since 0.11.0: use yash_env::job::tcsetpgrp_with_block instead
Switches the foreground process group with SIGTTOU blocked. Read more
Source§

fn tcsetpgrp_without_block( &mut self, fd: Fd, pgid: Pid, ) -> impl Future<Output = Result<()>>

👎Deprecated since 0.11.0: use yash_env::job::tcsetpgrp_without_block instead
Switches the foreground process group with the default SIGTTOU settings. Read more
Source§

fn signal_name_from_number(&self, number: Number) -> Name

👎Deprecated since 0.11.0: use yash_env::system::Signals::signal_name_from_number instead
Returns the signal name for the signal number. Read more
Source§

fn exit_or_raise( &mut self, exit_status: ExitStatus, ) -> impl Future<Output = Infallible>

👎Deprecated since 0.11.0: use yash_env::semantics::exit_or_raise instead
Terminates the current process with the given exit status, possibly sending a signal to kill the process. Read more
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> System for T