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.