bionic (2) flock.2.gz

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.