mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-27 00:00:12 +02:00
This patch adds a new crate: tokio-fs. This crate provides a wrapper around `std` functionality that can only be performed using blocking operations. This primarily includes filesystem operations, but it also includes standard input, output, and error access as these streams cannot be safely switched to non-blocking mode in a portable way. These wrappers call the `std` functions from within a `blocking` annotation which allows the runtime to compensate for the fact that the thread will potentially remain blocked in a system call.
45 lines
1.0 KiB
Rust
45 lines
1.0 KiB
Rust
use tokio_io::{AsyncWrite};
|
|
|
|
use futures::Poll;
|
|
|
|
use std::io::{self, Write, Stdout as StdStdout};
|
|
|
|
/// A handle to the standard output stream of a process.
|
|
///
|
|
/// The handle implements the [`AsyncWrite`] trait, but beware that concurrent
|
|
/// writes to `Stdout` must be executed with care.
|
|
///
|
|
/// Created by the [`stdout`] function.
|
|
///
|
|
/// [`stdout`]: fn.stdout.html
|
|
/// [`AsyncWrite`]: trait.AsyncWrite.html
|
|
#[derive(Debug)]
|
|
pub struct Stdout {
|
|
std: StdStdout,
|
|
}
|
|
|
|
/// Constructs a new handle to the standard output of the current process.
|
|
///
|
|
/// The returned handle allows writing to standard out from the within the Tokio
|
|
/// runtime.
|
|
pub fn stdout() -> Stdout {
|
|
let std = io::stdout();
|
|
Stdout { std }
|
|
}
|
|
|
|
impl Write for Stdout {
|
|
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
|
|
::would_block(|| self.std.write(buf))
|
|
}
|
|
|
|
fn flush(&mut self) -> io::Result<()> {
|
|
::would_block(|| self.std.flush())
|
|
}
|
|
}
|
|
|
|
impl AsyncWrite for Stdout {
|
|
fn shutdown(&mut self) -> Poll<(), io::Error> {
|
|
Ok(().into())
|
|
}
|
|
}
|