char *ptr = NULL;
size_t size = 0;
FILE *fp = open_memstream(&ptr, &size);
今、あなたはfp
stdio
を持つ関数を使用してptr
を経由して「印刷」出力にアクセスすることができます。バッファは自動的に拡張され、fclose
のストリームの後にfree
dになるはずです。
open_memstream
は標準Cではありませんが、POSIX.1-2008で指定されています。しかし、それについてのISO C TRがあります。上の操作中に呼び出されますあなたがあなた自身のfread
、fwrite
、fseek
とfclose
関数を定義することができopen_memstream
は(MacOSのように)利用できない、あなたがfopencookie
やfunopen
を使用してそれを実装できるシステム、、、については
ストリーム。どちらも標準化されていません(最初はGNU拡張、2番目はBSD固有)。
このようなシステムではBSD libc's implementationを使用できます。
C標準で義務付けられているAPIのみを実装するシステムの場合、あなたは不運です。あなたができることは、出力を一時ファイルに書き込んだり(おそらくramfsなどに保存しておきます)、そこから読み込むことです。
あなたががFILE
IOを使用してAPIと対話している場合にのみ行ってください。これが要件でない場合は、代わりにstd::stringstream
などを使用することを検討してください。
出典
2017-03-24 16:37:58
a3f
動的に割り当てられたメモリのようなものをお探しですか?または、あなたの問題はリダイレクト標準出力に関連していますか? –
可能な複製http://stackoverflow.com/questions/539537/memory-buffer-as-file/8908037 – kennytm
CはOOP言語ではありません。演算子の拡張/オーバーロードや型の拡張はできません。また、 'FILE'は実装定義の不透明型です(これは1つとして扱う必要があります)。 – Olaf