%20como%20directorio%20temporal.png)
¿Es una buena práctica crear un directorio en /run/shm
(anteriormente /dev/shm
) y usarlo como un directorio temporal para una aplicación?
Antecedentes: estoy escribiendo pruebas de caja negra para un programa que hace muchas cosas con archivos y directorios. Para cada prueba creo muchos archivos y directorios y luego ejecuto el programa y luego creo el conjunto esperado de archivos y directorios y luego ejecuto diff para comparar. Ahora tengo alrededor de 40 pruebas y ya tardan más de 2 segundos en ejecutarse. Con la esperanza de acelerar las cosas, quiero ejecutar las pruebas en un directorio en algún tipo de disco RAM.
Investigando sobre el disco RAM con el que me topéuna preguntacon una respuesta que indica que está bien crear un directorio /dev/shm
y usarlo como un directorio temporal. Investigando un poco más sin embargo me topé conuna página wikide Debian indicando que es un error usarlo /dev/shm
directamente. Debería usar las shm_*
funciones. Lamentablemente, las shm_*
funciones parecen no estar disponibles para su uso en un script de shell.
Ahora estoy confundido. ¿Está bien o no utilizar /run/shm
(anteriormente /dev/shm
) como directorio temporal?
Respuesta1
Está perfectamente bien utilizar algún directorio /run
siempre que tenga los derechos adecuados sobre él. En algunas distribuciones modernas, /tmp
ya hay un sistema de archivos virtual en la memoria o un enlace simbólico a un directorio dentro /run
. Si este es tu caso (puedes comprobarlo en /etc/fstab
o escribiendo mtab
), puedes utilizarlo /tmp
como directorio temporal.
Además, no se confunda con el artículo de Debian. shm_*
Las funciones se utilizan para crear segmentos de memoria compartida para la comunicación entre procesos. Con esas funciones, puede compartir un fragmento de memoria entre dos o más procesos para que se comuniquen o colaboren utilizando los mismos datos. Los procesos tienen el segmento de memoria adjunto en su propio espacio de direcciones y pueden leer y escribir allí como de costumbre. El núcleo se ocupa de la complejidad. Esas funciones no están disponibles como funciones de Shell (y no serían muy útiles en un contexto de Shell). Para más información, echa un vistazo a man 7 shm_overview
. El objetivo del artículo es que ningún programa debería gestionar directamente los pseudoarchivos que representan segmentos compartidos, sino utilizar las funciones apropiadas para crear, adjuntar y eliminar segmentos de memoria compartida.