【发布时间】:2021-10-03 23:58:10
【问题描述】:
我需要在 C 和 Rust 应用程序之间共享内存。 Rust - 生产者,C - 消费者。
在 C 中,我会创建一个共享内存区域并将其传递给 Rust 进行编写。
在 C 端我使用这样的东西:
fd = shm_open(STORAGE_ID, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
res = ftruncate(fd, STORAGE_SIZE);
addr = mmap(NULL, STORAGE_SIZE, PROT_WRITE, MAP_SHARED, fd, 0);
// read from that memory after it is written by Rust app
char data[STORAGE_SIZE];
memcpy(data, addr, STORAGE_SIZE);
在 Rust 端,我该怎么做才能使用 STORAGE_ID 打开内存并写入它? 我想这是使用这个的路线,但找不到可靠的例子:
https://docs.rs/libc/0.2.77/libc/fn.shm_open.html
https://docs.rs/memmap/0.6.1/memmap/struct.Mmap.html
https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.clone_from_slice
基本上,我需要做这样的事情,但是 set.c 是用 Rust 编写的: POSIX shared memory IPC example (shm_open, mmap), working on Linux and macOS
【问题讨论】:
-
你认为 rust 使用的内核不是你的 C 程序吗?做完全相同的事情,但在 Rust 中
-
这就是我想要做的,但无法直接从 Rust 文档中弄清楚如何去做。因此试图找到一个例子。
-
Rust 和 C 的接口有很多帮助,我不知道你在这里做什么,但也许一个 crate 已经完成了所有这些,我用一些来与 wayland 共享内存例如。