Linux で単純な C プログラムを作成しており、ファイルからのデータを期待する既存のライブラリの API を使用したいと考えています。const char* としてファイル名を入力する必要があります。しかし、ファイルのコンテンツと同じように、ヒープに割り当てられたバッファーに既にデータがあります。十分な RAM があり、高性能が必要です。一時ファイルをディスクに書き込むのを避けたいのですが、ファイルのように見える方法でこの API にデータを供給する良い方法は何ですか?
これが私のコードの安価なふりバージョンです:
marvelouslibrary.h:
int marvelousfunction(const char *filename);
ライブラリが最初に設計された normal-persons-usage.cpp:
#include "marvelouslibrary.h"
int somefunction(char *somefilename)
{
return marvelousfunction(somefilename);
}
myprogram.cpp:
#include "marvelouslibrary.h"
int one_of_my_routines()
{
byte* stuff = new byte[1000000];
// fill stuff[] with...stuff!
// stuff[] holds same bytes as might be found in a file
/* magic goes here: make filename referring to stuff[] */
return marvelousfunction( ??? );
}
明確にするために言うと、marvelouslibrary はポインターによってデータを受け入れる API 関数を提供していません。ファイルの読み取りのみが可能です。
パイプと mkfifo() を考えましたが、プロセス間の通信を目的としているようです。私はこれらのことについて専門家ではありません。名前付きパイプは、同じプロセスで読み取りと書き込みを行っても問題ありませんか? これは賢明なアプローチですか?
または、賢いことをスキップして、シャッドアップして一時ファイルを書き込むという計画「B」に進みます。しかし、新しいことを学び、この状況で何ができるかを知りたいと思っています。