【发布时间】:2010-12-17 00:08:02
【问题描述】:
我正在寻找一种将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);
glibc 标头似乎表明可以使用挂钩函数设置 FILE 来执行实际的读取和写入。就我而言,我想我希望写钩子将字符串的副本附加到链接列表中,并且有一个 get_string_buffer 函数来计算列表的总长度,为其分配内存,然后复制将每个项目放入正确的位置。
我的目标是可以传递给诸如do_some_stuff 之类的函数的东西,而该函数不需要知道任何东西,除了它有一个可以写入的FILE *。
是否有这样的现有实现?这似乎是一件有用且对 C 友好的事情——假设我对 FILE 可扩展性的看法是正确的。
【问题讨论】:
标签: c string file stream printf