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

NOMBRE

       flock  -  impone  o  elimina  un candado de recomendacion en un fichero
       abierto.

SINOPSIS

       #include <sys/file.h>

       int flock(int fd, int operation);

DESCRIPCI'ON

       Impone o elimina un candado de recomendacion (advisory lock)  sobre  el
       fichero  abierto  especificado  por  fd.   El parametro operation puede
       tener uno de los siguientes valores:

              LOCK_SH   Pone un candado compartido.  Mas 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, mas
       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.  Ademas, el candado es bloqueado bien por  una  operacion
       LOCK_UN  explicita 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 convertiran 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 exito, cero, En caso de error, -1 , y se pone  en  errno  un
       codigo apropiado.

ERRORES

       EWOULDBLOCK
              El  fichero  esta  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  notificacion de una senal atrapada por un
              manejador.

       EINVAL operation no es valido.

       ENOLCK El nucleo se quedo  sin  memoria  para  almacenar  registros  de
              candados.

CONFORME A

       4.4BSD  (la  llamada  al  sistema  flock(2) aparecio por primera vez en
       4.2BSD).   Una  version  de  flock(2),  posiblemente  implementada   en
       terminos de fcntl(2), aparece en la mayoria de Unix's.

OBSERVACIONES

       flock(2)  no  impone candados en ficheros sobre NFS. Use fcntl(2) en su
       lugar: funcionara sobre NFS, dada una version suficientemente  reciente
       de Linux y un servidor que soporte candados.

       Desde  la  version  2.0 del nucleo, flock(2) esta 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 semantica BSD: no hay
       interaccion entre  los  tipos  de  candado  colocados  por  flock(2)  y
       fcntl(2), y flock(2) no detecta interbloqueo.

       flock(2)  coloca  candados de recomendacion 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 semanticas diferentes con
       respecto a los procesos creados con fork y con respecto a dup(2).

V'EASE TAMBI'EN

       open(2), close(2), dup(2), execve(2), fcntl(2), fork(2), lockf(3)

       Tambien      estan       locks.txt       y       mandatory.txt       en
       /usr/src/linux/Documentation.