FLOCK(2) | Manual del Programador de Linux | FLOCK(2) |
flock - impone o elimina un candado de recomendación en un fichero abierto.
#include <sys/file.h>
int flock(int fd, int operation);
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:
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.
En caso de éxito, cero, En caso de error, -1 , y se pone en errno un código apropiado.
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.
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).
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.
24 abril 2002 | Linux |