3 个版本 (重大变更)
0.3.0 | 2021 年 3 月 28 日 |
---|---|
0.2.1 | 2021 年 1 月 23 日 |
0.2.0 |
|
0.1.0 | 2020 年 10 月 20 日 |
#744 in 操作系统
18KB
370 代码行数(不包括注释)
typed_shmem
使用映射文件在 *nix 和 Windows 上公开共享内存。这项工作深受 shared_memory crate 的启发,但 typed_shmem 并不仅仅是一个模仿者,它提供了一种类型化的共享内存区域映射。
使用方法
首先,一个进程必须创建共享区域
use typed_shmem as sh;
use typed_shmem::error::ShMemErr;
use typed_shmem::common::ShMemOps;
fn main() -> Result<(), ShMemErr> {
let mut mem = sh::ShMemCfg::<u32>::default()
.set_owner()
.on_file("test_program")
.build()?;
//Writing
unsafe { *mem.get_t_mut() = 10; }
//Reading
let val = unsafe { mem.get_t() };
assert_eq!(*val, 10);
loop {} //Used to keep the process alive, thus the allocated shared memory too.
Ok(())
然后,任何其他进程都可以加入相同的区域
use typed_shmem as sh;
use typed_shmem::error::ShMemErr;
use typed_shmem::common::ShMemOps;
fn main() -> Result<(), ShMemErr> {
let mut mem = sh::ShMemCfg::<u32>::default()
.on_file("test_program")
.build()?;
let val = unsafe { mem.get_t() };
assert_eq!(*val, 10);
Ok(())
}
待办事项(无特定顺序)
- 实现自定义错误而不是将所有内容都
Box<dyn Error>
。 - 实现可选的共享/同步机制。
- 检查并重写不安全块(那里肯定有错误)。
- 创建测试(使用 *nix 中的
fork()
,不确定 windows?)。 - 更多内容即将到来...
贡献
本项目所有贡献均受 Apache-2.0 许可证保护。
依赖项
~4.5MB
~88K SLoC