¡Ya estamos en Twitter!

Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad

Usar flock()

por Uriel Lizama

Introducción

Perl tiene una función llamada flock() que sirve para "cerrar" los archivos mientras los estas utilizando. Esta función solo puede ser utilizada en UNIX debido a que no esta implementada en Windows.

¿Por qué es necesario?

Digamos que tienes un script que permite a las personas que navegan en tu sitio dejar un mensaje, y este mensaje lo escribes sobre un archivo que se llama "mensajes.txt", entonces veamos una pequeña linea de acciones:

  • 1. Juanita entra a tu sitio y decide dejar un mensaje.
  • 2. Pepé entra al sitio y se dirije a leer los mensajes dejados.
  • 3. Junita escribe el mensaje y manda el post.
  • 4. Pepé cliquea sobre la liga de "Leer Mensajes".
  • 5. El script abre el archivo para escirbirlo, mientras también se abre para leerlo.
  • 6. Resultado: Archivo Corrupto!

Si un archivo es accesado al mismo tiempo para realizar dos acciones diferentes, puede ocasionar ya sea que se corrompa el archivo o información incompleta.

Para evitar esto perl tiene implementada la función flock().

Tipos de flock()

Hay distintos tipos de flock() pero esta vez vamos a ver sólo dos, que creó que son los mas utilizados.

flock(IDENTIFICADOR_ARCHIVO,1); #bloquea el archivo para que solo pueda ser leído
flock(IDENTIFICADOR_ARCHIVO,2); #bloquea el archivo por completo

Como vemos usaríamos el primer flock() en caso de que sólo estemos leyendo el archivo para evitar que se intente modificarlo mientras tanto, por ejemplo:

open(FILE, "mensajes.txt");
flock(FILE,1);
my @mensajes = <FILE>;
close(FILE);

En el segundo caso bloquea el archivo por completo para evitar que se lea o se modifique mientras se esta utilizando:

open(FILE, ">>mensajes.txt");
flock(FILE,2);
print FILE "milinea\n";
close(FILE);

Conclusiones

Ya vimos como bloquear nuestros archivos cuando los estamos utilizando, de esta manera podemos evitar tener archivos corruptos o recibir mala información.

Si estamos haciendo código para Windows como para UNIX podríamos incluir una variable para preguntar cual es el sistema operativo:

my $os = "windows";

Ya de esa manera podemos aumentar en nuestras lineas de flock() lo siguiente:

flock(IDENTIFICADOR,1) if $os !~ /windows/i;
¿Quiéres más tutoriales como este? Escribir tutoriales toma una gran cantidad de tiempo y esfuerzo. Si este tutorial te ayudó a aprender o a solucionar algo, por favor considera dejar alguna donación en apoyo a Perl en Español.

Cliquea en el botón de abajo para dejar tu donación por medio de PayPal.

Comparte:
Categorías de Tutoriales:
En Nuestros Foros:

    Software error:

    junk after document element at line 1, column 32, byte 32 at /usr/lib64/perl5/vendor_perl/XML/Parser.pm line 187.
    

    For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error.

  • Entra a los foros »
Socializa:
Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Perl en Español es mantenido con Movable Type
Todo el contenido de Perl en Español está bajo una licencia CC:
Creative Commons License