Я ищу способ передать 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
расширяемости.