Durante la lettura attraverso la documentazione GNU su string streams ho trovato due funzioni simili che fanno cose molto simili:Qual è la differenza tra fmemopen e open_memstream?
FILE * fmemopen (void *buf, size_t size, const char *opentype)
FILE * open_memstream (char **ptr, size_t *sizeloc)
Dalla lettura della documentazione, sembra open_memstream
deve essere utilizzato per l'apertura di un flusso di output e fmemopen
per l'ingresso. Quello che mi sorprende è l'argomento opentype
che puoi passare a fmemopen
.
Il Linux manpage explains:
Se buf è specificato come NULL, fmemopen() alloca dinamicamente una dimensione di buffer byte. Ciò è utile per un'applicazione che richiede per scrivere dati su un buffer temporaneo e quindi leggerlo di nuovo. Il buffer viene liberato automaticamente quando lo streaming viene chiuso. Notare che il chiamante non ha modo di ottenere un puntatore al buffer temporaneo assegnato da questa chiamata (ma vedere open_memstream() di seguito).
Quindi quale sarebbe il punto di usare open_memstream
se fmemopen
in grado di gestire l'apertura di un flusso di input/output?
Ah, capisco. Buona intuizione, la pagina man di fmemopen non ha detto esplicitamente, ma ora vedo che è implicita. –