#共享内存 #共享 #内存 #ipc #通信 #inter #内存区域

typed_shmem

适用于 *nix 和 Windows 的类型化共享内存 crate

3 个版本 (重大变更)

0.3.0 2021 年 3 月 28 日
0.2.1 2021 年 1 月 23 日
0.2.0 2021 年 1 月 23 日
0.1.0 2020 年 10 月 20 日

#744 in 操作系统

Apache-2.0

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