0

重複の可能性:
メモリ内のバッファのファイル記述子を取得する方法は?

FILEクラスを使用するライブラリに、ファイルではなくメモリ内のバッファを強制的に使用させようとしています。私は試しfmemopenましたが、ライブラリはfileno-1 を返すものを使用し、ライブラリをクラッシュさせます。そのため、ファイル記述子が必要であり、パイプ コマンドを使用して作成できることを読みました。何をしたかは完全には理解できませんが、機能するようになりました。しかし、私がしたことが実際に安全かどうかはわかりません。コードは次のとおりです。

int fstr[2];
pipe(fstr);
write(fstr[1], src, strlen(src));
close(fstr[1]);
FILE* file = fdopen( fstr[0], "r" );

それでこれは安全ですか?

4

2 に答える 2

2

fmemopen(3)代わりに使用してください。この関数は、すでにメモリ バッファへの書き込み/メモリ バッファからの読み取りを容易にします。

于 2013-01-02T21:11:15.447 に答える
1

本当にファイル ハンドルが必要な場合は、これで十分です。

発生する可能性のある問題の 1 つは、パイプのバッファー サイズが制限されていることです。文字列がバッファ サイズよりも大きい場合、パイプへの接続は、データがもう一方の端からwrite(...)来るまでブロックされます。read(...)

ワーカー スレッドがパイプに書き込むのが理想的ですが、これが不可能な場合や難しすぎる場合は、fcntl(fd, F_SETPIPE_SZ, ...).

于 2013-01-02T21:38:31.427 に答える