2012-09-03 20 views
8

Sto scrivendo un piccolo programma in chiaro C qui. Quello che mi serve è creare un file direttamente nella memoria (non scritto sul disco rigido) Attualmente posso usare fopen("filename.txt,"wb") per scrivere nel file.C - crea file in memoria

So che in linux è possibile utilizzare fmemopen(). C'è una soluzione simile per win32?

+1

Perché? Ti aspetti/devi essere in grado di usare le normali funzioni di I/O di 'FILE *' come 'fread()' per leggere dal file, una volta creato? – unwind

+1

Cosa stai cercando di risolvere? Qual è il tuo obiettivo finale? – jweyrich

risposta

0

Non vorrei utilizzare fopen in quanto crea un file.

Per creare il file in memoria è necessario creare il file e memorizzarlo come meglio credi.

Sarà necessario creare una matrice di alcuni tipi di dati. Userei char * ma potresti usare qualsiasi cosa tu voglia codificare per l'informazione. È quindi possibile leggere e scrivere sul file aggiungendo informazioni all'array.

+0

Grazie per la risposta, il mio unico problema è che mi è stato detto di usare un programma esterno che usa * FILE, quindi sono costretto a usarlo. La seconda richiesta era di non scrivere nulla sul disco, sto cercando una soluzione alternativa, ad esempio un file virtuale in memoria, mappatura della memoria ecc. –

+0

@J Nash: I puntatori FILE sono interamente definiti dall'implementazione e non sono trasferibili tra i compilatori. Se il programma esterno stesso FILE internamente non riesco a vedere come ciò influenzerebbe il tuo programma. – Clifford

+0

Mi spiace di non averlo spiegato a fondo, sto aggiungendo la crittografia al programma esistente, che è piuttosto complesso. Legge i file di input esistenti sul disco. Attualmente sto crittografando quei file per primi e decifro di nuovo all'interno del mio programma, tuttavia crea file temporanei "aperti non codificati" che non è una soluzione sicura. Grazie –

0

È possibile ottenere risultati simili con MapViewOfFile. API Win32 si dovrebbe usare per questo sono:

CreateFile(...)

CreateFileMapping(...)

MapViewOfFile(...)

Non dimenticare di eliminare la mappatura e vicino mapping dei file una volta che si è fatto.

+0

ci sono funzioni disponibili per l'app per console C semplice? –

+0

Win32 è una semplice API c. Avresti bisogno dell'SDK di Windows installato e assicurati di includere i file di intestazione corretti specificati nelle pagine MSDN che ho collegato – Indy9000

+0

Per mappare un file nella memoria virtuale non hai bisogno di 'CreateFile', usa un handle di file di 'INVALID_HANDLE_VALUE' (-1) in "CreateFileMapping". – cdarke

0

Tale funzionalità non è intrinsecamente supportata in Windows. Tuttavia è possibile riscrivere le funzioni di stdio di alto livello per accedere a un buffer di memoria anziché a un file, o semplicemente implementare funzioni simili a quelle di stdio. Oppure è possibile implementare un RAM disk, tuttavia l'installazione del driver del disco RAM potrebbe non soddisfare la regola "non scrivere sul disco".