在阅读有关字符串流的GNU文档时,我发现了两个类似的函数,它们的功能非常相似:
FILE * fmemopen (void *buf, size_t size, const char *opentype) FILE * open_memstream (char **ptr, size_t *sizeloc)
通过阅读文档,似乎open_memstream应该将其用于打开输出流和fmemopen输入。让我着迷的是opentype你可以接受的论点fmemopen。
open_memstream
fmemopen
opentype
linux手册页解释了:
如果将buf指定为NULL,则fmemopen()动态分配一个缓冲区大小的字节长。这对于想要将数据写入临时缓冲区然后再次读回的应用程序很有用。当关闭流时,缓冲区自动释放。注意,调用者无法获取指向此调用分配的临时缓冲区的指针(但请参见下面的open_memstream())。
那么,open_memstream如果fmemopen可以处理打开输入/输出流的用途,那将是什么呢?
使用fmemopen,缓冲区将在打开时或之前分配,并且以后不会更改大小。如果要编写它,则必须在开始之前知道输出的大小。随着open_memstream缓冲区的增长,随着您的写作。