我正在寻找一种方法来传递一个FILE *函数,以便函数可以写入它fprintf.如果我想让输出在磁盘上的实际文件中出现,这很容易.但我想要的是将所有输出作为字符串(char *).我喜欢的那种API是:
/** 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);
Run Code Online (Sandbox Code Playgroud)
在glibc的头似乎表明,一个文件可能被设置了挂钩函数来执行实际的读写.在我的情况下,我想我希望写钩子将字符串的副本附加到链表,并且有一个get_string_buffer函数可以计算出列表的总长度,为它分配内存,然后将每个项目复制到它在正确的地方.
我的目标是可以传递给函数的东西,比如do_some_stuff …