Provided by:
manpages-es_1.55-10_all 
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.