fmemopen和open_memstream有什么区别?

Bry*_*Way 11 c linux stream

在阅读有关字符串流的GNU文档时,我发现了两个类似的函数,它们执行非常相似的操作:

FILE * fmemopen (void *buf, size_t size, const char *opentype)
FILE * open_memstream (char **ptr, size_t *sizeloc)
Run Code Online (Sandbox Code Playgroud)

从阅读文档,似乎open_memstream应该用于打开输出流和fmemopen输入.让我感到opentype惊讶的是你可以传递给我的论据fmemopen.

linux手册页说明:

如果将buf指定为NULL,则fmemopen()动态分配一个缓冲区大小为bytes的字节.这对于想要将数据写入临时缓冲区然后再次读取的应用程序非常有用.关闭流时,将自动释放缓冲区.请注意,调用者无法获取指向此调用分配的临时缓冲区的指针(但请参阅下面的open_memstream()).

那么,open_memstream如果fmemopen可以处理打开输入/输出流,那将是什么意义?

小智 14

使用时fmemopen,缓冲区在打开时或之前分配,并且稍后不会更改大小.如果您要写信给它,您必须知道在开始之前您的输出有多大.随着open_memstream缓冲区的增长,写入时也会增长