15

ファイルまたはメモリバッファのいずれかでデータを処理するプログラムがあります。これらのケースを処理するための統一された方法を提供したいと思います。

1)ファイルをmmapして、メモリバッファとして均一に処理できるようにします。2)fopenとfmemopenを使用してFILE *を作成し、FILE*として均一にアクセスします。

ただし、上記のどちらの方法も使用できません。私が使用するライブラリの1つはファイル記述子のみを取り、ファイル記述子をmmapするため、両方をファイル記述子として処理する必要があります。

だから私の質問は、メモリバッファ(4Kに調整されていると仮定できます)が与えられた場合、このメモリバッファに裏打ちされたファイル記述子を取得できますか?他のいくつかの質問でpopenが答えであることがわかりましたが、popenのfdをmmapできるとは思いません。

4

2 に答える 2

11

「メモリ領域」からファイル記述子(C標準ライブラリ以外は役に立たない)を簡単に作成することはできません。ただし、共有メモリ領域を作成して、ファイル記述子を取得することはできます。

shm_overview(7)から:

shm_open(3)
新しいオブジェクトを作成して開くか、既存のオブジェクトを開きます。これはopen(2)に似ています。この呼び出しは、以下にリストされている他のインターフェースで使用するためのファイル記述子を返します。

リストされているインターフェイスの中にはがmmapあります。これは、通常のファイルをメモリマップするのと同じように共有メモリを「メモリマップ」できることを意味します。

したがって、その「メモリバッファ」の作成を制御するのはあなただけmmapであれば、両方の状況(ファイルまたはメモリバッファ)での使用はシームレスに機能するはずです。

于 2012-08-24T08:57:55.093 に答える
1

mmapデータセグメントをtmpfsベースのファイル(おそらくディレクトリの下)に書き込み(おそらく使用して) /run/、開いたファイル記述子をライブラリに渡すことができます。

于 2012-08-22T21:35:50.473 に答える