动机
我想编写一对程序,其中一个程序读取数据并将其转换为内部格式,另一个程序将内部格式转换为其他格式。作为练习,我想在不使用管道的情况下编写这些程序之间的交互。我更喜欢使用信号和共享内存。
我的要求
我有程序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)
的manpage声明:
内存映射不会被保存(mmap(2))。
那么,我该如何与其他程序共享该内存?把两个功能放入一个程序中并使用fork
是否更好?