Estoy buscando una manera de pasar en un FILE *
a alguna función para que la función pueda escribir con fprintf
. Esto es fácil si quiero que la salida aparezca en un archivo real en el disco, por ejemplo. Pero lo que me gustaría en cambio es obtener toda la salida como una cadena (char *
). El tipo de API que me gustaría es:Creando una secuencia FILE * que da como resultado una cadena
/** 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);
la glibc cabeceras parecen indicar que un archivo se puede configurar con funciones de enlace para realizar la lectura y la escritura real. En mi caso, creo que quiero que el gancho de escritura anexe una copia de la cadena a una lista vinculada, y que haya una función get_string_buffer
que resuelva la longitud total de la lista, le asigne memoria y luego copie cada elemento en él en el lugar correcto.
Me refiero a algo que se puede pasar a una función como do_some_stuff
sin que esa función necesite saber nada más que tiene un FILE *
al que puede escribir.
¿Existe una implementación existente de algo como esto? Parece una cosa útil y amigable para C, suponiendo que tenga razón sobre la extensibilidad FILE
.
open_memstream es exactamente lo que quiero. No estoy seguro de si está utilizando el enfoque de lista enlazada, pero no voy a escribir grandes cantidades para que no importe. – Edmund