17

を受け取る API をFILE *使用しており、それを使用してメモリ内にデータ バッファーを作成しています。

std::shared_ptr<FILE> f(tmpfile(), fclose);
write_to_file(f.get());
rewind(f.get());
auto data = make_file_buffer(f.get());
return data;

これは機能しますが、メモリ バッファへの書き込みよりも遅くなります。

これをメモリファイルに書き込み、ディスクへの読み取り/書き込みを回避することは可能ですか (stdin/stdout/stderr コンソールへの読み取り/書き込みなど)?

注: Linux を使用しているため、Linux および POSIX API にアクセスできます。

4

2 に答える 2

30

はい、可能です。 fmemopenを参照してください。

于 2013-05-29T13:56:32.013 に答える
2

上記のコメントを書きましたが、回答のために肉付けします。

API は FILE ハンドルを想定しているため、最も簡単な方法は、Linux の ramfs や tmpfs でマウントされたものなど、インメモリ ファイルシステムにファイルを作成することです。

/dev/shm の下にほとんどの Linux システムでデフォルトで作成されるこれらの 1 つがあるため、そこにファイルを作成しても実際のファイルとして存在しますが、メモリ内にのみ存在します。もちろん、再起動するとファイルの内容は失われます。また、ディスクにページングできるとは思わないので、巨大なファイルを書き込まないようにしてください。そうしないと、メモリ内のすべてのスペースが占有されます。

于 2013-05-29T13:56:16.303 に答える