Struct userfaultfd::Uffd [−][src]
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]
&self,
src: *const c_void,
dst: *mut c_void,
len: usize,
wake: bool
) -> Result<usize>
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]
&self,
start: *mut c_void,
len: usize,
wake: bool
) -> Result<usize>
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]
&self,
buf: &'a mut EventBuffer
) -> Result<impl Iterator<Item = Result<Event>> + 'a>
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]
unsafe fn from_raw_fd(fd: RawFd) -> Self
[src]
impl IntoRawFd for Uffd
[src]
fn into_raw_fd(self) -> RawFd
[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]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,