一尘不染

fmemopen和open_memstream有什么区别?

linux

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

FILE * fmemopen (void *buf, size_t size, const char *opentype)
FILE * open_memstream (char **ptr, size_t *sizeloc)

通过阅读文档,似乎open_memstream应该将其用于打开输出流和fmemopen输入。让我着迷的是opentype你可以接受的论点fmemopen

linux手册页解释了

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

那么,open_memstream如果fmemopen可以处理打开输入/输出流的用途,那将是什么呢?


阅读 789

收藏
2020-06-07

共1个答案

一尘不染

使用fmemopen,缓冲区将在打开时或之前分配,并且以后不会更改大小。如果要编写它,则必须在开始之前知道输出的大小。随着open_memstream缓冲区的增长,随着您的写作。

2020-06-07