#内存映射 #mmap #通用 #Unix #fd #文件

mapped-file

在任意文件对象上构建内存映射

9次发布

0.0.8 2023年3月10日
0.0.8-r12024年6月6日
0.0.7 2023年2月10日
0.0.5 2022年11月2日
0.0.4 2022年10月23日

#139 in 内存管理

Download history 77/week @ 2024-06-04 4/week @ 2024-06-11 2/week @ 2024-06-18 19/week @ 2024-07-02 40/week @ 2024-07-23 23/week @ 2024-07-30

63每月下载

MIT许可证

77KB
2.5K SLoC

MemoryFile<T>: 包装任何类似文件的对象的内存映射

A safe and ergonomic mmap() wrapper for arbitrary file-descriptor handles.

注意: 正在工作的版本,但仍在开发中。

使用方法

MemoryFile<T>可以用于消耗任何实现AsRawFd的类型T,在该文件描述符上形成映射,然后在T本身被丢弃之前取消映射内存(这可以是一个引用或值)。MemoryFile<T>也可以被消耗回T,在这个过程中取消映射(并可选地同步)内存。

示例

一个映射任意文件描述符持有对象的文件内存的函数。

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[..])
}

尽管,允许调用者处理映射,而受调用者以任何方式映射可能是更好的模式,如下所示

pub fn files_equal<T: ?Sized, U: ?Sized>(file1: &MappedFile<T>, file2: &MappedFile<U>) -> bool
	where T: AsRawFd,
		  U: AsRawFd
{
	&file1[..] == &file2[..]
}

但是,MappedFile<T>也实现了Borrow<[u8]>,因此任何&MappedFile<T>也可以作为AsRef<[u8]>传递给任何函数。

许可证

MIT

依赖

~115–305KB