Я ищу способ передать 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 , кажется, указывают, что ФАЙЛ может быть установлен с функциями ловушки для выполнения фактического чтения и записи. В моем случае я думаю, что я хочу, чтобы ловушка записи добавляла копию строки к связанному списку, и чтобы существовала функция get_string_buffer
, которая вычисляет общую длину списка, выделяет для него память и затем копирует каждый предмет в него в правильном месте.
Я стремлюсь к чему-то, что может быть передано в функцию, такую как do_some_stuff
, и этой функции не нужно знать ничего, кроме того, что она имеет FILE *
, в которую она может писать.
Существует ли существующая реализация чего-то подобного? Это кажется полезным и дружественным к C вещам - при условии, что я прав насчет расширяемости FILE
.