Struct memfd::MemfdOptions
source · pub struct MemfdOptions { /* private fields */ }
Available on Android or Linux only.
Expand description
A Memfd
builder, providing advanced options and flags for specifying its behavior.
Implementations§
source§impl MemfdOptions
impl MemfdOptions
sourcepub const fn new() -> Self
pub const fn new() -> Self
Default set of options for Memfd
creation.
The default options are:
FileSeal::SealSeal
(i.e. no further sealing);- close-on-exec is enabled;
- hugetlb is disabled.
sourcepub const fn allow_sealing(self, value: bool) -> Self
pub const fn allow_sealing(self, value: bool) -> Self
Whether to allow adding seals to the created Memfd
.
Examples found in repository?
examples/sized.rs (line 14)
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
fn main() {
// Create a sealable memfd.
let opts = memfd::MemfdOptions::default().allow_sealing(true);
let mfd = opts.create("sized-1K").unwrap();
// Resize to 1024B.
mfd.as_file().set_len(1024).unwrap();
// Add seals to prevent further resizing.
mfd.add_seals(&[
memfd::FileSeal::SealShrink,
memfd::FileSeal::SealGrow
]).unwrap();
// Prevent further sealing changes.
mfd.add_seal(memfd::FileSeal::SealSeal).unwrap();
// Write 1K of data, allowed by size seals.
let data_1k = vec![0x00; 1024];
let r = mfd.as_file().write_all(&data_1k);
assert!(r.is_ok());
mfd.as_file().seek(SeekFrom::Start(0)).unwrap();
// Write 2K of data, now allowed by size seals.
let data_2k = vec![0x11; 2048];
let r = mfd.as_file().write_all(&data_2k);
assert!(r.is_err());
mfd.as_file().seek(SeekFrom::Start(0)).unwrap();
// Try to resize to 2048B, not allowed by size seals.
let r = mfd.as_file().set_len(2048);
assert!(r.is_err());
// Overwrite 1K of data, allowed by size seals.
let data_1k = vec![0x22; 1024];
let r = mfd.as_file().write_all(&data_1k);
assert!(r.is_ok());
}
sourcepub const fn close_on_exec(self, value: bool) -> Self
pub const fn close_on_exec(self, value: bool) -> Self
Whether to set the FD_CLOEXEC
flag on the created Memfd
.
sourcepub const fn hugetlb(self, size: Option<HugetlbSize>) -> Self
pub const fn hugetlb(self, size: Option<HugetlbSize>) -> Self
Optional hugetlb support and page size for the created Memfd
.
sourcepub fn create<T: AsRef<str>>(&self, name: T) -> Result<Memfd, Error>
pub fn create<T: AsRef<str>>(&self, name: T) -> Result<Memfd, Error>
Create a Memfd
according to configuration.
Examples found in repository?
examples/sized.rs (line 15)
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
fn main() {
// Create a sealable memfd.
let opts = memfd::MemfdOptions::default().allow_sealing(true);
let mfd = opts.create("sized-1K").unwrap();
// Resize to 1024B.
mfd.as_file().set_len(1024).unwrap();
// Add seals to prevent further resizing.
mfd.add_seals(&[
memfd::FileSeal::SealShrink,
memfd::FileSeal::SealGrow
]).unwrap();
// Prevent further sealing changes.
mfd.add_seal(memfd::FileSeal::SealSeal).unwrap();
// Write 1K of data, allowed by size seals.
let data_1k = vec![0x00; 1024];
let r = mfd.as_file().write_all(&data_1k);
assert!(r.is_ok());
mfd.as_file().seek(SeekFrom::Start(0)).unwrap();
// Write 2K of data, now allowed by size seals.
let data_2k = vec![0x11; 2048];
let r = mfd.as_file().write_all(&data_2k);
assert!(r.is_err());
mfd.as_file().seek(SeekFrom::Start(0)).unwrap();
// Try to resize to 2048B, not allowed by size seals.
let r = mfd.as_file().set_len(2048);
assert!(r.is_err());
// Overwrite 1K of data, allowed by size seals.
let data_1k = vec![0x22; 1024];
let r = mfd.as_file().write_all(&data_1k);
assert!(r.is_ok());
}
Trait Implementations§
source§impl Clone for MemfdOptions
impl Clone for MemfdOptions
source§fn clone(&self) -> MemfdOptions
fn clone(&self) -> MemfdOptions
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for MemfdOptions
impl Debug for MemfdOptions
Auto Trait Implementations§
impl RefUnwindSafe for MemfdOptions
impl Send for MemfdOptions
impl Sync for MemfdOptions
impl Unpin for MemfdOptions
impl UnwindSafe for MemfdOptions
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
Mutably borrows from an owned value. Read more