9次发布
0.0.8 | 2023年3月10日 |
---|---|
0.0.8-r1 | 2024年6月6日 |
0.0.7 | 2023年2月10日 |
0.0.5 | 2022年11月2日 |
0.0.4 | 2022年10月23日 |
#139 in 内存管理
63每月下载
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