pub struct OpenOptions {
read_write: bool,
unchecked: bool,
}
Expand description
Options and flags which can be used to configure how a FIFO file is opened.
This builder allows configuring how to create a pipe end from a FIFO file.
Generally speaking, when using OpenOptions
, you’ll first call new
,
then chain calls to methods to set each option, then call either
open_receiver
or open_sender
, passing the path of the FIFO file you
are trying to open. This will give you a io::Result
with a pipe end
inside that you can further operate on.
§Examples
Opening a pair of pipe ends from a FIFO file:
use tokio::net::unix::pipe;
const FIFO_NAME: &str = "path/to/a/fifo";
let rx = pipe::OpenOptions::new().open_receiver(FIFO_NAME)?;
let tx = pipe::OpenOptions::new().open_sender(FIFO_NAME)?;
Opening a Sender
on Linux when you are sure the file is a FIFO:
use tokio::net::unix::pipe;
use nix::{unistd::mkfifo, sys::stat::Mode};
// Our program has exclusive access to this path.
const FIFO_NAME: &str = "path/to/a/new/fifo";
mkfifo(FIFO_NAME, Mode::S_IRWXU)?;
let tx = pipe::OpenOptions::new()
.read_write(true)
.unchecked(true)
.open_sender(FIFO_NAME)?;
Fields§
§read_write: bool
§unchecked: bool
Implementations§
source§impl OpenOptions
impl OpenOptions
sourcepub fn new() -> OpenOptions
pub fn new() -> OpenOptions
Creates a blank new set of options ready for configuration.
All options are initially set to false
.
sourcepub fn read_write(&mut self, value: bool) -> &mut Self
pub fn read_write(&mut self, value: bool) -> &mut Self
Sets the option for read-write access.
This option, when true, will indicate that a FIFO file will be opened in read-write access mode. This operation is not defined by the POSIX standard and is only guaranteed to work on Linux.
§Examples
Opening a Sender
even if there are no open reading ends:
use tokio::net::unix::pipe;
let tx = pipe::OpenOptions::new()
.read_write(true)
.open_sender("path/to/a/fifo");
Opening a resilient Receiver
i.e. a reading pipe end which will not
fail with UnexpectedEof
during reading if all writing ends of the
pipe close the FIFO file.
use tokio::net::unix::pipe;
let tx = pipe::OpenOptions::new()
.read_write(true)
.open_receiver("path/to/a/fifo");
sourcepub fn unchecked(&mut self, value: bool) -> &mut Self
pub fn unchecked(&mut self, value: bool) -> &mut Self
Sets the option to skip the check for FIFO file type.
By default, open_receiver
and open_sender
functions will check
if the opened file is a FIFO file. Set this option to true
if you are
sure the file is a FIFO file.
§Examples
use tokio::net::unix::pipe;
use nix::{unistd::mkfifo, sys::stat::Mode};
// Our program has exclusive access to this path.
const FIFO_NAME: &str = "path/to/a/new/fifo";
mkfifo(FIFO_NAME, Mode::S_IRWXU)?;
let rx = pipe::OpenOptions::new()
.unchecked(true)
.open_receiver(FIFO_NAME)?;
sourcepub fn open_receiver<P: AsRef<Path>>(&self, path: P) -> Result<Receiver>
pub fn open_receiver<P: AsRef<Path>>(&self, path: P) -> Result<Receiver>
Creates a Receiver
from a FIFO file with the options specified by self
.
This function will open the FIFO file at the specified path, possibly check if it is a pipe, and associate the pipe with the default event loop for reading.
§Errors
If the file type check fails, this function will fail with io::ErrorKind::InvalidInput
.
This function may also fail with other standard OS errors.
§Panics
This function panics if it is not called from within a runtime with IO enabled.
The runtime is usually set implicitly when this function is called
from a future driven by a tokio runtime, otherwise runtime can be set
explicitly with Runtime::enter
function.
sourcepub fn open_sender<P: AsRef<Path>>(&self, path: P) -> Result<Sender>
pub fn open_sender<P: AsRef<Path>>(&self, path: P) -> Result<Sender>
Creates a Sender
from a FIFO file with the options specified by self
.
This function will open the FIFO file at the specified path, possibly check if it is a pipe, and associate the pipe with the default event loop for writing.
§Errors
If the file type check fails, this function will fail with io::ErrorKind::InvalidInput
.
If the file is not opened in read-write access mode and the file is not
currently open for reading, this function will fail with ENXIO
.
This function may also fail with other standard OS errors.
§Panics
This function panics if it is not called from within a runtime with IO enabled.
The runtime is usually set implicitly when this function is called
from a future driven by a tokio runtime, otherwise runtime can be set
explicitly with Runtime::enter
function.
fn open(&self, path: &Path, pipe_end: PipeEnd) -> Result<File>
Trait Implementations§
source§impl Clone for OpenOptions
impl Clone for OpenOptions
source§fn clone(&self) -> OpenOptions
fn clone(&self) -> OpenOptions
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for OpenOptions
impl Debug for OpenOptions
source§impl Default for OpenOptions
impl Default for OpenOptions
source§fn default() -> OpenOptions
fn default() -> OpenOptions
Auto Trait Implementations§
impl Freeze for OpenOptions
impl RefUnwindSafe for OpenOptions
impl Send for OpenOptions
impl Sync for OpenOptions
impl Unpin for OpenOptions
impl UnwindSafe for OpenOptions
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)