2010-05-19 12 views
8

Sto usando open_memstream in una mia libreria, ma mi piacerebbe portare questa libreria su MSVC. Sembra che non ci siano funzioni equivalenti disponibili, ma c'è qualcosa di abbastanza simile?Equivalente di open_memstream per MSVC

Cosa open_memstream fa è che ci vuole un char ** destinazione e dimensione e restituisce un file * che molti di scrittura per, i dati vengono memorizzati in un buffer allocato dinamicamente (accessibile dal char ** argomento). Quando si chiude il FILE, il char ** contiene i dati che sono stati scritti nello stream. Questo rende un modo semplice per costruire stream di stringa grandi e complessi.

Mentre è possibile sia leggere che cercare dal memstream, scrivo solo su di esso.

C'è un modo per aprire un flusso di memoria FILE simile in MSVC? Inoltre, questo è puro C, non C++.

+0

Ho notato BSD ha una funzione chiamata funopen che consente di creare uno stream personalizzato impostando i callback, forse c'è qualcosa di simile per MSVC? – ext

risposta

2

Una funzione simile su Windows sarebbe CreateStreamOnHGlobal(). Tuttavia, funziona con l'interfaccia COM di IStream, non è una sostituzione drop-in per FILE. Potresti dare un'occhiata al codice sorgente di Cygwin per vedere cosa hanno fatto.

+0

Cygwin sembra utilizzare la libreria runtime newlib, che implementa la propria struttura FILE e quindi implementa fopencookie (e open_memstream). Almeno questo è quello che trovo nella fonte. – ext

+0

Sì, non è improbabile. Dovrebbe sapere che il FILE * fa riferimento a una risorsa di tipo non file. Se non vuoi usare Cygwin, allora sei un po 'condannato a sostituire il tuo codice di streaming della memoria. –