W3cubDocs

/Rust

Struct StdinLock

pub struct StdinLock<'a> { /* private fields */ }

A locked reference to the Stdin handle.

This handle implements both the Read and BufRead traits, and is constructed via the Stdin::lock method.

Note: Windows Portability Considerations

When operating in a console, the Windows implementation of this stream does not support non-UTF-8 byte sequences. Attempting to read bytes that are not valid UTF-8 will return an error.

In a process with a detached console, such as one using #![windows_subsystem = "windows"], or in a child process spawned from such a process, the contained handle will be null. In such cases, the standard library’s Read and Write will do nothing and silently succeed. All other I/O operations, via the standard library or via raw Windows API calls, will fail.

Examples

use std::io::{self, BufRead};

fn main() -> io::Result<()> {
    let mut buffer = String::new();
    let stdin = io::stdin(); // We get `Stdin` here.
    {
        let mut handle = stdin.lock(); // We get `StdinLock` here.
        handle.read_line(&mut buffer)?;
    } // `StdinLock` is dropped here.
    Ok(())
}

Trait Implementations

1.63.0Source
impl<'a> AsFd for StdinLock<'a>Available on Unix or HermitCore or target_os=trusty or WASI or target_os=motor only.
Source
fn as_fd(&self) -> BorrowedFd<'_>
Borrows the file descriptor. Read more
1.63.0Source
impl<'a> AsHandle for StdinLock<'a>Available on Windows only.
Source
fn as_handle(&self) -> BorrowedHandle<'_>
Borrows the handle. Read more
1.35.0Source
impl<'a> AsRawFd for StdinLock<'a>Available on (Unix or HermitCore or target_os=trusty or WASI or target_os=motor) and non-target_os=trusty only.
Source
fn as_raw_fd(&self) -> RawFd
Extracts the raw file descriptor. Read more
1.35.0Source
impl<'a> AsRawHandle for StdinLock<'a>Available on Windows only.
Source
fn as_raw_handle(&self) -> RawHandle
Extracts the raw handle. Read more
1.0.0Source
impl BufRead for StdinLock<'_>
Source
fn fill_buf(&mut self) -> Result<&[u8]>
Returns the contents of the internal buffer, filling it with more data, via Read methods, if empty. Read more
Source
fn consume(&mut self, n: usize)
Marks the given amount of additional bytes from the internal buffer as having been read. Subsequent calls to read only return bytes that have not been marked as read. Read more
Source
fn read_until(&mut self, byte: u8, buf: &mut Vec<u8>) -> Result<usize>
Reads all bytes into buf until the delimiter byte or EOF is reached. Read more
Source
fn read_line(&mut self, buf: &mut String) -> Result<usize>
Reads all bytes until a newline (the 0xA byte) is reached, and append them to the provided String buffer. Read more
Source
fn has_data_left(&mut self) -> Result<bool>
🔬This is a nightly-only experimental API. (buf_read_has_data_left #86423)
Checks if there is any data left to be read. Read more
1.83.0Source
fn skip_until(&mut self, byte: u8) -> Result<usize>
Skips all bytes until the delimiter byte or EOF is reached. Read more
1.0.0Source
fn split(self, byte: u8) -> Split<Self> ⓘwhere
    Self: Sized,
Returns an iterator over the contents of this reader split on the byte byte. Read more
1.0.0Source
fn lines(self) -> Lines<Self> ⓘwhere
    Self: Sized,
Returns an iterator over the lines of this reader. Read more
1.16.0Source
impl Debug for StdinLock<'_>
Source
fn fmt(&self, f: &mut Formatter<'_>) -> Result
Formats the value using the given formatter. Read more
1.70.0Source
impl IsTerminal for StdinLock<'_>
Source
fn is_terminal(&self) -> bool
Returns true if the descriptor/handle refers to a terminal/tty. Read more
1.0.0Source
impl Read for StdinLock<'_>
Source
fn read(&mut self, buf: &mut [u8]) -> Result<usize>
Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
Source
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<()>
🔬This is a nightly-only experimental API. (read_buf #78485)
Pull some bytes from this source into the specified buffer. Read more
Source
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize>
Like read, except that it reads into a slice of buffers. Read more
Source
fn is_read_vectored(&self) -> bool
🔬This is a nightly-only experimental API. (can_vector #69941)
Determines if this Reader has an efficient read_vectored implementation. Read more
Source
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
Reads all bytes until EOF in this source, placing them into buf. Read more
Source
fn read_to_string(&mut self, buf: &mut String) -> Result<usize>
Reads all bytes until EOF in this source, appending them to buf. Read more
Source
fn read_exact(&mut self, buf: &mut [u8]) -> Result<()>
Reads the exact number of bytes required to fill buf. Read more
Source
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<()>
🔬This is a nightly-only experimental API. (read_buf #78485)
Reads the exact number of bytes required to fill cursor. Read more
1.0.0Source
fn by_ref(&mut self) -> &mut Selfwhere
    Self: Sized,
Creates a “by reference” adapter for this instance of Read. Read more
1.0.0Source
fn bytes(self) -> Bytes<Self> ⓘwhere
    Self: Sized,
Transforms this Read instance to an Iterator over its bytes. Read more
1.0.0Source
fn chain<R: Read>(self, next: R) -> Chain<Self, R> ⓘwhere
    Self: Sized,
Creates an adapter which will chain this stream with another. Read more
1.0.0Source
fn take(self, limit: u64) -> Take<Self> ⓘwhere
    Self: Sized,
Creates an adapter which will read at most limit bytes from it. Read more
Source
fn read_array<const N: usize>(&mut self) -> Result<[u8; N]>where
    Self: Sized,
🔬This is a nightly-only experimental API. (read_array #148848)
Read and return a fixed array of bytes from this source. Read more

Auto Trait Implementations

impl<'a> Freeze for StdinLock<'a>
impl<'a> RefUnwindSafe for StdinLock<'a>
impl<'a> !Send for StdinLock<'a>
impl<'a> Sync for StdinLock<'a>
impl<'a> Unpin for StdinLock<'a>
impl<'a> UnwindSafe for StdinLock<'a>

Blanket Implementations

Source
impl<T> Any for Twhere
    T: 'static + ?Sized,
Source
fn type_id(&self) -> TypeId
Gets the TypeId of self. Read more
Source
impl<T> Borrow<T> for Twhere
    T: ?Sized,
Source
fn borrow(&self) -> &T
Immutably borrows from an owned value. Read more
Source
impl<T> BorrowMut<T> for Twhere
    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 Twhere
    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, U> TryFrom<U> for Twhere
    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 Twhere
    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.

© 2010 The Rust Project Developers
Licensed under the Apache License, Version 2.0 or the MIT license, at your option.
https://doc.rust-lang.org/std/io/struct.StdinLock.html