2012-09-03 25 views
8

Estoy escribiendo un pequeño programa en C simple aquí. Lo que necesito es crear un archivo directamente dentro de la memoria (no está escrito en el disco duro) Actualmente puedo usar fopen("filename.txt,"wb") para escribir en el archivo.C - crear archivo en la memoria

Sé que en Linux puede usar fmemopen(). ¿Hay una solución similar para win32?

+1

¿Por qué? ¿Espera/necesita poder usar funciones de E/S 'FILE *' regulares como 'fread()' para leer desde el archivo, una vez creado? – unwind

+1

¿Qué estás tratando de resolver? ¿Cuál es tu objetivo final? – jweyrich

Respuesta

0

No utilizaría fopen ya que esto crea un archivo.

Para crear el archivo en la memoria tendrá que crear el archivo y almacenarlo de la manera que mejor le parezca.

Tendrá que crear una matriz de algún tipo de datos. Usaría char * pero podría usar lo que quiera para codificar la información. Luego puede leer y escribir en el archivo agregando información a la matriz.

+0

Gracias por responder, mi único problema es que me dijeron que use un programa externo que use * FILE, así que estoy obligado a usarlo. La segunda solicitud fue no escribir nada en el disco, estoy buscando algún tipo de solución, por ejemplo, archivo virtual en memoria, mapeo de memoria, etc. –

+0

@J Nash: los punteros de archivo están completamente implementados y no son portátiles en los compiladores. Si el programa externo sí mismo ARCHIVO internamente no puedo ver cómo afectaría eso a su programa. – Clifford

+0

Lamento no haberlo explicado completamente, estoy agregando cifrado al programa existente, que es bastante complejo. Lee los archivos de entrada existentes en el disco. Actualmente estoy encriptando esos archivos primero y descifré dentro de mi programa; sin embargo, crea archivos temporales "abiertos no codificados" que no son una solución segura. Gracias –

0

Podría lograr algo cerca con MapViewOfFile. Win32 API que debes usar para esto son:

CreateFile(...)

CreateFileMapping(...)

MapViewOfFile(...)

No se olvide de desasignar y la asignación del archivo de cerca una vez que haya terminado.

+0

¿hay funciones disponibles para la aplicación de consola simple C? –

+0

Win32 es una API simple c. Necesitará el SDK de Windows instalado y asegúrese de incluir los archivos de encabezado correctos especificados en las páginas de MSDN que he vinculado – Indy9000

+0

Para asignar un archivo a la memoria virtual no necesita el 'CreateFile', use un identificador de archivo de' INVALID_HANDLE_VALUE' (-1) en 'CreateFileMapping'. – cdarke

0

Tal funcionalidad no es intrínsecamente compatible con Windows. Sin embargo, podría reescribir las funciones stdio de alto nivel para acceder a un búfer de memoria en lugar de a un archivo, o simplemente implementar funciones tipo stdio. O puede implementar un RAM disk; sin embargo, la instalación del controlador de disco RAM puede no cumplir con la regla "no escribir en el disco".

Cuestiones relacionadas