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