我正在寻找一种方法将FILE *
传递给某个函数,以便该函数可以使用fprintf
写入该函数。如果我想让输出在磁盘上的实际文件中出现,这很容易。但我想要的是将所有输出作为字符串(char *
)。我想那种API的是:创建导致字符串的FILE *流
/** Create a FILE object that will direct writes into an in-memory buffer. */
FILE *open_string_buffer(void);
/** Get the combined string contents of a FILE created with open_string_buffer
(result will be allocated using malloc). */
char *get_string_buffer(FILE *buf);
/* Sample usage. */
FILE *buf;
buf = open_string_buffer();
do_some_stuff(buf); /* do_some_stuff will use fprintf to write to buf */
char *str = get_string_buffer(buf);
fclose(buf);
free(str);
的的glibc头似乎表明,一个文件可能被设置了挂钩函数来执行实际的读写。在我的情况下,我想我希望写钩子将一个字符串的副本附加到一个链表中,并且要有一个函数来计算列表的总长度,为它分配内存,然后复制每个项目进入正确的地方。
我瞄准的东西,可以传递给一个功能,如do_some_stuff
没有该功能需要知道任何东西,但它有一个FILE *
它可以写入。
有没有像这样的现有实现?这似乎是一个有用的和C友好的事情要做 - 假设我是对的FILE
扩展性。
open_memstream正是我想要的。我不确定它是否使用链表方式,但我不会为它编写大量数据,因此无关紧要。 – Edmund 2009-11-16 19:32:34