Cómo tratar los datos RAM como si fuera un archivo real?
Pregunta
Así que tengo algunos datos temporales en mi programa (en la RAM). Quiero hacer de alguna manera que parezca que se trata de un archivo (por ejemplo, para enviarlo en otro programa que tiene un enlace de archivos como argumento)?
¿Es posible?
¿Cómo hacer tal cosa?
Solución
Puede hacerlo en C usando la función popen()
:
FILE *f = popen("program args", "w");
// write your output to f here using stdio
pclose(f);
Esto es posible si su programa externo lee su entrada de stdin
.
Otros consejos
¿Por qué no simplemente escribir el archivo en el disco? Si escribir en el disco es demasiado lento, puede pasar a la bandera FILE_ATTRIBUTE_TEMPORARY
CreateFile para mantener los datos en la memoria caché (y evitar escribirla en el dispositivo físico).
A veces las soluciones obvias son la mejor ...
Si es compatible con su sistema operativo (sistemas de Windows Unixoid y lo hacen), usted podría tratar de usar archivos mapeados en memoria .
Se puede utilizar tubería ()
The pipe() function shall create a pipe and place two file descriptors, one each into the arguments fildes[0] and fildes[1], that refer to the open file descriptions for the read and write ends of the pipe. Their integer values shall be the two lowest available at the time of the pipe() call. The O_NONBLOCK and FD_CLOEXEC flags shall be clear on both file descriptors. (The fcntl() function can be used to set both these flags.)
Sí, es posible. Usted puede transferir sus datos a su aplicación a través de otro mecanismo de un de comunicación entre procesos :
- En función de su sistema operativo, tiene diferentes opciones aquí. Se puede crear un tubo, como otros críticos han mencionado aquí, ya que muchos sistemas operativos tienen tuberías.
- También es posible usar la memoria compartida.
- Usted simplemente podría escribirlo en un archivo, y luego abrir ese archivo en la otra aplicación.
- Muchos sistemas operativos tienen otras técnicas que puede utilizar.
EDIT: listas de MSDN todos los mecanismos IPC disponibles para Windows aquí .