Struct compio_fs::pipe::OpenOptions
source · pub struct OpenOptions { /* private fields */ }
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 compio_fs::pipe;
const FIFO_NAME: &str = "path/to/a/fifo";
let rx = pipe::OpenOptions::new().open_receiver(FIFO_NAME).await?;
let tx = pipe::OpenOptions::new().open_sender(FIFO_NAME).await?;
Opening a Sender
on Linux when you are sure the file is a FIFO:
use compio_fs::pipe;
use nix::{sys::stat::Mode, unistd::mkfifo};
// 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)?;
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
Available on Linux only.
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 compio_fs::pipe;
let tx = pipe::OpenOptions::new()
.read_write(true)
.open_sender("path/to/a/fifo")
.await;
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 compio_fs::pipe;
let tx = pipe::OpenOptions::new()
.read_write(true)
.open_receiver("path/to/a/fifo")
.await;
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 compio_fs::pipe;
use nix::{sys::stat::Mode, unistd::mkfifo};
// 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)
.await?;
sourcepub async fn open_receiver<P: AsRef<Path>>(&self, path: P) -> Result<Receiver>
pub async 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.
sourcepub async fn open_sender<P: AsRef<Path>>(&self, path: P) -> Result<Sender>
pub async 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.
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
)