¿Cómo Escribir Programas Seguros? - Ficheros temporales

8 - Ficheros temporales

[editar]
Tutorial creado por Mononeurona.org. Extraido de: http://www.mononeurona.org/index.php?idp=535
08 de Noviembre de 2005
En muchas ocasiones es preciso crear ficheros temporales de muy corta duración para, por ejemplo, servir de intercomunicación entre procesos. El lugar habitual es "/tmp", lo que siempre es delicado, entre otras cosas, porque ese directorio tiene permiso de escritura para todo el mundo. Con suerte el administrador habrá puesto el "sticky bit" en los modos de "/tmp", lo que evita que cualquiera nos los pueda borrar o renombrar, si los creamos con los permisos adecuados.

Cuando es necesario evitar colisiones en el nombre, muchos procesos utilizan la función "mktemp()" para generar un nombre pseudoaleatorio. Sin embargo esta llamada está sujeta a "race condition" y realmente no asegura la unicidad, lo que hace imprescindible seguir los pasos indicados en el punto 5. Resulta mucho más conveniente el empleo de la función "tmpfile()", al menos cuando se dispone de una "libc" actualizada que cree el fichero con "O_EXCL". Además, esta rutina se encarga de borrar el fichero en cuestión cuando el programa termina o cierra el fichero.

En las implementaciones recientes, "tmpfile()" hace lo siguiente:

  • Elegir un nombre único con "tmpnam()".
  • Crea el fichero con "O_EXCL" y retorna un "File Descriptor" ("fd").
  • Si el fichero ya existe, vuelve al primer punto.
  • Borra el fichero con "unlink()". Desaparece del directorio, pero sigue siendo accesible a través del "fd".
  • Ahora el programa puede escribir en el fichero usando el "fd".
  • Cuando el programa quiere leer el fichero, vuelve al principio con un "rewind()" o un "fseek()".
  • Cuando el programa termina o cierra el "fd", el fichero desaparece del todo.

Este esquema tiene el inconveniente de que:

  1. El fichero, mientras sigue abierto, es invisible en el directorio pero ocupa espacio en el disco.
  2. No se puede utilizar para comunicarse con un proceso independiente, ya que no aparece en el directorio.

Para la comunicación entre procesos a veces resulta rentable crear ficheros FIFO, que tienen un tratamiento especial por parte del Kernel.
[editar]

Sé el primero en opinar


Tutoriales relacionados con '¿Cómo Escribir Programas Seguros?'

En este artículo vamos a intentar dar algunos consejos para la programación segura en C.... Más »
El objetivo de este documento es enseñar las bases de la instalación de un cortafuegos... Más »
Esta guía no es un documento general de seguridad. Esta guía está específicamente orientada a... Más »
Documento con fundamentos teóricos de control de accesos en redes telemáticas; se tratan temas como... Más »
Bienvenidos al manual de HTML de Indaya.A través de todos estos capítulos vamos a descubrir... Más »

Autor y licencia de '¿Cómo Escribir Programas Seguros?'


Tutorial de Mononeurona.org. Extraido de: http://www.mononeurona.org/index.php?idp=535 CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.