[−][src]Function piper::pipe
pub fn pipe(cap: usize) -> (Reader, Writer)
Creates a bounded single-producer single-consumer pipe.
A pipe is a ring buffer of cap
bytes that implements traits AsyncRead
and AsyncWrite
.
When the sender is dropped, remaining bytes in the pipe can still be read. After that, attempts
to read will result in Ok(0)
, i.e. they will always 'successfully' read 0 bytes.
When the receiver is dropped, the pipe is closed and no more bytes and be written into it.
Further writes will result in Ok(0)
, i.e. they will always 'successfully' write 0 bytes.
Panics
If the capacity is 0, a panic will be thrown.
Examples
use futures::prelude::*; // Write a message into the pipe. let (mut r, mut w) = piper::pipe(1024); w.write_all(b"hello").await?; // Close the pipe so that the read below doesn't run forever. drop(w); // Read the message. let mut msg = String::new(); r.read_to_string(&mut msg).await?; assert_eq!(msg, "hello");