¿Cómo Escribir Programas Seguros? - Gestión de bloqueos

7 - Gestión de bloqueos

[editar]
Tutorial creado por Mononeurona.org. Extraido de: http://www.mononeurona.org/index.php?idp=535
08 de Noviembre de 2005
La forma simple de hacer "locking" de ficheros consiste en utilizar la función "link()", que crea un enlace "hard" a un fichero ya existente. Ese enlace se puede borrar con un "unlink()". La ventaja de este sistema es que si el enlace ya existe, la llamada falla aunque seamos "root". Eso es muy importante, ya que llamadas como "creat()" tienen éxito si somos "root", aunque el fichero ya exista y especifiquemos modos "000".

Otra forma clásica de crear un "lock" es crear un fichero de forma exclusiva, haciendo un "open(O_CREAT|O_EXCL)", aunque ello consume espacio en disco y hay que tener cuidado con que ningún otro proceso pueda escribir en él.

Por último la mejor solución de todas es utilizar "flock()". Esta llamada permite crear bloqueos compartidos (lectura) y exclusivos (escritura), sin necesidad de pegarse creando ficheros marcadores por el disco. Además, los Unix modernos permiten hacer efectivos estos bloqueos incluso en una red NFS, por ejemplo.

En general todos estos bloqueos son recomendaciones. Es decir, el programa puede optar por acceder al fichero aunque no haya adquirido previamente un bloqueo, o aunque el turno esté en posesión de otro proceso. En algunos sistemas "flock()" tiene potestad para forzar los bloqueos de forma efectiva, haciendo uso de un flag especial en los modos de acceso del fichero, normalmente el flag SGID sin que el grupo tenga permiso de ejecución. En ese caso, si un fichero está bloqueado, cualquier llamada "read()" o "write()" por parte de otro proceso fallará o será detenida hasta que se libere el bloqueo.

En servidores "multithread" hay que proteger los recursos comunes con "mutex's".
[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.