Provided by: manpages-es_1.55-10_all bug

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)