动机
我想编写一对程序,其中一个程序读取数据并将其转换为内部格式,另一个程序将内部格式转换为其他格式。作为练习,我想在不使用管道的情况下编写这些程序之间的交互。我更喜欢使用信号和共享内存。
我想要的是
我有 A 调用 B 的程序 A 和 B。我该怎么做
- 从程序 A 创建一个内存块
- 从程序 A 调用程序 B,给它关于在哪里找到内存块的信息
- 使用两个程序中的内存块。
更具体地说,A 解码自定义视频格式并将单个未压缩帧放入共享缓冲区。B 从缓冲区中读取数据并将其编码为输出流。解码器每秒解码高达 100 帧,这大约是 500 MiB/s 的内存流量。管道变得很慢,因为必须经常复制数据并且缓冲区不是很大。
我认为可能有效
我的想法是用来mmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0)
创建一段共享内存。问题是,execve(2)
状态手册页:
不保留内存映射 (mmap(2))。
那么,我怎样才能与其他程序共享该内存呢?将这两种功能都放在一个程序中并改用是更好的主意fork
吗?