打开文件*以增加内存空间
Open FILE* to a growing memory space
我正在使用的库需要一个 FILE* 作为输入来存储未知数量的文本。通常我可以将 cout 作为 FILE* 传递,但我想将这个未知大小的文本捕获到变量中。
有没有一种好方法可以创建一个 FILE* 到要填充的越来越大的缓冲区?
我知道这样的事情——
char output[1024]
FILE *foutput = fmemopen(output, 1024, "w");
但据我了解,这将打开一个可以写入的 1024 字节的固定大小缓冲区。
char *ptr = NULL;
size_t size = 0;
FILE *fp = open_memstream(&ptr, &size);
现在,您可以将fp
与stdio
功能一起使用,并通过ptr
访问"打印"输出。缓冲区是自动增长的,应在fclose
流后free
。
open_memstream
不是标准C,而是由POSIX.1-2008指定的。不过有一个关于它的 ISO C TR。
对于open_memstream
不可用的系统(如macOS),您可以使用fopencookie
或funopen
来实现它,这允许您定义自己的fread
,fwrite
,fseek
和fclose
函数,这些函数将在流上操作时调用。两者都不是标准化的(第一个是GNU扩展,第二个是BSD特定的)。
你可以在这样的系统上使用 BSD libc 的实现。
对于仅实现 C 标准规定的 API 的系统,您就不走运了。你能做的最好的事情是将输出写入临时文件(可能保存在 ramfs 或类似文件中),然后从中读取。
不过,仅当您与使用 IO 的 API 交互时,才应执行此操作FILE
。如果这不是必需的,请考虑改用std::stringstream
或类似
相关文章:
- 内存增加和字符串流?
- ActiveMQ使用者的内存使用量在onMessage调用后不断增加
- SQLite C/C++ 接口:将数据插入表时内存增加
- 为什么将鼠标悬停在静态 Win32 控件上会增加内存并删除我的 GUI?
- 标准::矢量增加峰值内存
- 打开文件*以增加内存空间
- 使用新线程池而无需重新启动的新线程池后,Jemalloc的内存大大增加
- 为什么内存访问时间远远超过CPU缓存大小时会增加
- C :当居民记忆缓慢增加时,是否存在内存泄漏
- 程序C++中的虚拟内存大小增加
- FFMPEG 内存增加
- 如何增加机器的内存和CPU消耗
- 为什么在保留向量中插入空结构会增加内存
- 为什么 q网页测试的内存一直在增加?
- Win32 C++中的DrawText会增加内存使用率
- 内存占用增加
- Qt qml 应用程序增加内存使用量
- 内联函数是如何增加内存缓存未命中的,以及与替代函数相比,它为什么不好
- 导致Seg故障的地图.如何增加内存
- 增加内存映射文件的大小