Crates.io | mapped-file |
lib.rs | mapped-file |
version | 0.0.8-r1 |
source | src |
created_at | 2022-10-01 20:22:37.622736 |
updated_at | 2024-06-06 20:10:07.861236 |
description | Construct a memory mapping over any file object |
homepage | |
repository | https://github.com/notflan/mapped-file |
max_upload_size | |
id | 677991 |
size | 78,102 |
MemoryFile<T>
: Wrap memory mappings over any file-like objectA safe and ergonomic mmap()
wrapper for arbitrary file-descriptor handles.
NOTE: Working release, but still in development.
MemoryFile<T>
can be used to consume any type T
that implements AsRawFd
, form a mapping over that file-descriptor, and then unmap the memory before the T
itself is dropped (which can be a reference or value.)
The MemoryFile<T>
can also be consumed back into the T
, unmapping (and optionally syncing) the memory in the process.
A function mapping file memory working on arbitrary file-descriptor holding objects.
pub fn files_equal<T: ?Sized, U: ?Sized>(file1: &T, file2: &U, size: usize) -> io::Result<bool>
where T: AsRawFd,
U: AsRawFd
{
let file1 = MappedFile::try_new(file1, size, Perm::Readonly, Flags::Private)?.with_advice(Advice::Sequential)?;
let file2 = MappedFile::try_new(file2, size, Perm::Readonly, Flags::Private)?.with_advice(Advice::Sequential)?;
Ok(&file1[..] == &file2[..])
}
Although, it is probably a better pattern to allow the caller to handle the mapping, and the callee to take any kind of mapping like so:
pub fn files_equal<T: ?Sized, U: ?Sized>(file1: &MappedFile<T>, file2: &MappedFile<U>) -> bool
where T: AsRawFd,
U: AsRawFd
{
&file1[..] == &file2[..]
}
However, MappedFile<T>
also implements Borrow<[u8]>
, so any &MappedFile<T>
can be passed to any function as AsRef<[u8]>
too.
MIT