Provided by: manpages-es_1.55-8_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.