Struct userfaultfd::Uffd[][src]

pub struct Uffd { /* fields omitted */ }

The userfaultfd object.

The userspace representation of the object is a file descriptor, so this type implements AsRawFd, FromRawFd, and IntoRawFd. These methods should be used with caution, but can be essential for using functions like poll on a worker thread.

Implementations

impl Uffd[src]

pub fn register(&self, start: *mut c_void, len: usize) -> Result<IoctlFlags>[src]

Register a memory address range with the userfaultfd object, and returns the IoctlFlags that are available for the selected range.

While the underlying ioctl call accepts mode flags, only one mode (UFFDIO_REGISTER_MODE_MISSING) is currently supported.

pub fn unregister(&self, start: *mut c_void, len: usize) -> Result<()>[src]

Unregister a memory address range from the userfaultfd object.

pub unsafe fn copy(
    &self,
    src: *const c_void,
    dst: *mut c_void,
    len: usize,
    wake: bool
) -> Result<usize>
[src]

Atomically copy a continuous memory chunk into the userfaultfd-registed range, and return the number of bytes that were successfully copied.

If wake is true, wake up the thread waiting for pagefault resolution on the memory range.

pub unsafe fn zeropage(
    &self,
    start: *mut c_void,
    len: usize,
    wake: bool
) -> Result<usize>
[src]

Zero out a memory address range registered with userfaultfd, and return the number of bytes that were successfully zeroed.

If wake is true, wake up the thread waiting for pagefault resolution on the memory address range.

pub fn wake(&self, start: *mut c_void, len: usize) -> Result<()>[src]

Wake up the thread waiting for pagefault resolution on the specified memory address range.

pub fn read_event(&self) -> Result<Option<Event>>[src]

Read an Event from the userfaultfd object.

If the Uffd object was created with non_blocking set to false, this will block until an event is successfully read (returning Some(event), or an error is returned.

If non_blocking was true, this will immediately return None if no event is ready to read.

Note that while this method doesn’t require a mutable reference to the Uffd object, it does consume bytes (thread-safely) from the underlying file descriptor.

Examples

fn read_event(uffd: &Uffd) -> Result<()> {
    // Read a single event
    match uffd.read_event()? {
        Some(e) => {
            // Do something with the event
        },
        None => {
            // This was a non-blocking read and the descriptor was not ready for read
        },
    }
    Ok(())
}

pub fn read_events<'a>(
    &self,
    buf: &'a mut EventBuffer
) -> Result<impl Iterator<Item = Result<Event>> + 'a>
[src]

Read multiple events from the userfaultfd object using the given event buffer.

If the Uffd object was created with non_blocking set to false, this will block until an event is successfully read or an error is returned.

If non_blocking was true, this will immediately return an empty iterator if the file descriptor is not ready for reading.

Examples

fn read_events(uffd: &Uffd) -> userfaultfd::Result<()> {
    // Read up to 100 events at a time
    let mut buf = EventBuffer::new(100);
    for event in uffd.read_events(&mut buf)? {
        let event = event?;
        // Do something with the event...
    }
    Ok(())
}

Trait Implementations

impl AsRawFd for Uffd[src]

impl Debug for Uffd[src]

impl Drop for Uffd[src]

impl FromRawFd for Uffd[src]

impl IntoRawFd for Uffd[src]

Auto Trait Implementations

impl RefUnwindSafe for Uffd

impl Send for Uffd

impl Sync for Uffd

impl Unpin for Uffd

impl UnwindSafe for Uffd

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.