flock

FLOCK(2)                Manual del Programador de Linux               FLOCK(2)



NOMBRE
       flock - impone o elimina un candado de recomendación en un fichero
       abierto.

SINOPSIS
       #include <sys/file.h>

       int flock(int fd, int operation);

DESCRIPCIÃN
       Impone o elimina un candado de recomendación (advisory lock) sobre el
       fichero abierto especificado por fd.  El parámetro operation puede
       tener uno de los siguientes valores:


              LOCK_SH   Pone un candado compartido.  Más de un proceso puede
                        tener un candado compartido para un fichero en un
                        momento dado.

              LOCK_EX   Pone un candado exclusivo.  Solamente un proceso puede
                        tener un candado exclusivo para un fichero en un
                        momento dado.

              LOCK_UN   Elimina un candado existente mantenido por este
                        proceso.


       Una llamada a flock() puede bloquearse si otro proceso mantiene un
       candado incompatible.  Para hacer una solicitud no bloqueante, incluya
       LOCK_NB (mediante operaciones OR) con cualquiera de las operaciones de
       arriba.

       Un fichero no puede tener simultaneamente candados compartido y
       exclusivo.

       Los candados creados por flock() se asocian con un fichero, o, más
       concretamente, con una entrada de la tabla de ficheros abiertos. Esto
       significa que los descriptores de fichero duplicados (creados con, por
       ejemplo, fork(2) o dup(2)) hacen referencia al mismo candado, y este
       candado puede ser modificado o liberado usando cualquiera de estos
       descriptores.  Además, el candado es bloqueado bien por una operación
       LOCK_UN explÃcita sobre cualquiera de estos descriptores duplicados, o
       cuando todos estos descriptores han sido cerrados.

       Un proceso puede tener solamente un tipo de candado (compartido o
       exclusivo) sobre un fichero.  Las llamadas posteriores a flock() sobre
       un fichero ya bloqueado convertirán un candado existente al nuevo modo
       de bloqueo.

       Los candados creados con flock() se preservan tras un execve(2).

       Un candado compartido o exclusivo puede ponerse sobre un fichero sin
       importar el modo en el que fue abierto dicho fichero.

VALOR DEVUELTO
       En caso de éxito, cero, En caso de error, -1 , y se pone en errno un
       código apropiado.

ERRORES
       EWOULDBLOCK
              El fichero está encadenado  y la bandera LOCK_NB ha sido
              elegida.  TP EBADF fd no es un descriptor de fichero abierto.

       EINTR  Mientras se esperaba por adquirir un candado, la llamada fue
              interrumpida por la notificación de una señal atrapada por un
              manejador.

       EINVAL operation no es válido.

       ENOLCK El núcleo se quedó sin memoria para almacenar registros de
              candados.

CONFORME A
       4.4BSD (la llamada al sistema flock(2) apareció por primera vez en
       4.2BSD).  Una versión de flock(2), posiblemente implementada en
       términos de fcntl(2), aparece en la mayorÃa de Unix's.

OBSERVACIONES
       flock(2) no impone candados en ficheros sobre NFS. Use fcntl(2) en su
       lugar: funcionará sobre NFS, dada una versión suficientemente
       reciente de Linux y un servidor que soporte candados.

       Desde la versión 2.0 del núcleo, flock(2) está implementada como una
       llamada al sistema en lugar de ser emulada en la biblioteca C de GNU
       como una llamada a fcntl(2).  Esto da verdadera semántica BSD: no hay
       interacción entre los tipos de candado colocados por flock(2) y
       fcntl(2), y flock(2) no detecta interbloqueo.

       flock(2) coloca candados de recomendación solamente; con los permisos
       adecuados sobre un fichero, un proceso es libre de ignorar el uso de
       flock(2) y realizar E/S sobre el fichero.

       Los candados de flock(2) y fcntl(2) tienen semánticas diferentes con
       respecto a los procesos creados con fork y con respecto a dup(2).

VÃASE TAMBIÃN
       open(2), close(2), dup(2), execve(2), fcntl(2), fork(2), lockf(3)

       También están locks.txt y mandatory.txt en
       /usr/src/linux/Documentation.



Linux                            24 abril 2002                        FLOCK(2)