動機
1 つのプログラムがデータを読み取って内部形式に転送し、もう 1 つのプログラムが内部形式を別のものに転送する、一対のプログラムを作成したいと考えています。演習として、パイプを使用せずにこれらのプログラム間の相互作用をコーディングしたいと思います。シグナルと共有メモリを使用するのが好きです。
私が欲しいもの
A が B を呼び出すプログラム A と B があります。
- プログラム A からメモリ ブロックを作成する
- プログラム A からプログラム B を呼び出し、メモリ ブロックの場所に関する情報を提供します。
- 両方のプログラムのメモリ ブロックを使用します。
より具体的には、A はカスタム ビデオ形式をデコードし、1 つの非圧縮フレームを共有バッファーに配置します。B はバッファから読み取り、それを出力ストリームにエンコードします。デコーダーは、約 500 MiB/秒のメモリ トラフィックである、1 秒あたり最大 100 フレームをデコードします。データを頻繁にコピーする必要があり、バッファが正確に大きくないため、パイプは遅いことが判明しました。
うまくいくと思うこと
私の考えはmmap(NULL,len,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0)
、共有メモリのセクションを作成するために使用することです。問題は、次のexecve(2)
状態のマンページです。
メモリ マッピングは保持されません (mmap(2))。
では、そのメモリを他のプログラムと共有するにはどうすればよいでしょうか。両方の機能を 1 つのプログラムに入れ、fork
代わりに使用する方が良いでしょうか?