PipeReader in std::io - Rust (original) (raw)
Struct PipeReader
1.87.0 · Source
pub struct PipeReader(/* private fields */);
Expand description
Read end of an anonymous pipe.
1.87.0 · Source
Create a new PipeReader instance that shares the same underlying file description.
§Examples
use std::fs;
use std::io::{pipe, Write};
use std::process::Command;
const NUM_SLOT: u8 = 2;
const NUM_PROC: u8 = 5;
const OUTPUT: &str = "work.txt";
let mut jobs = vec![];
let (reader, mut writer) = pipe()?;
// Write NUM_SLOT characters the pipe.
writer.write_all(&[b'|'; NUM_SLOT as usize])?;
// Spawn several processes that read a character from the pipe, do some work, then
// write back to the pipe. When the pipe is empty, the processes block, so only
// NUM_SLOT processes can be working at any given time.
for _ in 0..NUM_PROC {
jobs.push(
Command::new("bash")
.args(["-c",
&format!(
"read -n 1\n\
echo -n 'x' >> '{OUTPUT}'\n\
echo -n '|'",
),
])
.stdin(reader.try_clone()?)
.stdout(writer.try_clone()?)
.spawn()?,
);
}
// Wait for all jobs to finish.
for mut job in jobs {
job.wait()?;
}
// Check our work and clean up.
let xs = fs::read_to_string(OUTPUT)?;
fs::remove_file(OUTPUT)?;
assert_eq!(xs, "x".repeat(NUM_PROC.into()));
Available on Windows only.
Available on Windows only.
Converts to this type from the input type.
Available on Windows only.
Converts to this type from the input type.
Converts to this type from the input type.
Available on Windows only.
Converts to this type from the input type.
Converts to this type from the input type.
Constructs a new instance of Self
from the given raw file descriptor. Read more
Available on Windows only.
Consumes this object, returning the raw underlying file descriptor. Read more
Available on Windows only.
Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
Like read
, except that it reads into a slice of buffers. Read more
🔬This is a nightly-only experimental API. (can_vector
#69941)
Determines if this Read
er has an efficient read_vectored
implementation. Read more
Reads all bytes until EOF in this source, placing them into buf
. Read more
🔬This is a nightly-only experimental API. (read_buf
#78485)
Pull some bytes from this source into the specified buffer. Read more
Reads all bytes until EOF in this source, appending them to buf
. Read more
Reads the exact number of bytes required to fill buf
. Read more
🔬This is a nightly-only experimental API. (read_buf
#78485)
Reads the exact number of bytes required to fill cursor
. Read more
Creates a “by reference” adaptor for this instance of Read
. Read more
Transforms this Read
instance to an Iterator over its bytes. Read more
Creates an adapter which will chain this stream with another. Read more
Creates an adapter which will read at most limit
bytes from it. Read more
Pull some bytes from this source into the specified buffer, returning how many bytes were read. Read more
Like read
, except that it reads into a slice of buffers. Read more
🔬This is a nightly-only experimental API. (can_vector
#69941)
Determines if this Read
er has an efficient read_vectored
implementation. Read more
Reads all bytes until EOF in this source, placing them into buf
. Read more
🔬This is a nightly-only experimental API. (read_buf
#78485)
Pull some bytes from this source into the specified buffer. Read more
Reads all bytes until EOF in this source, appending them to buf
. Read more
Reads the exact number of bytes required to fill buf
. Read more
🔬This is a nightly-only experimental API. (read_buf
#78485)
Reads the exact number of bytes required to fill cursor
. Read more
Creates a “by reference” adaptor for this instance of Read
. Read more
Transforms this Read
instance to an Iterator over its bytes. Read more
Creates an adapter which will chain this stream with another. Read more
Creates an adapter which will read at most limit
bytes from it. Read more