LOCKF(3)

NOMBRE
lockf - aplica, comprueba o elimina un bloqueo POSIX sobre un fichero abierto

SINOPSIS
#include <sys/file.h>

int lockf(int fd, int cmd, off_t len);

DESCRIPCIÓN
Aplica, comprueba o elimina un bloqueo POSIX sobre una sección de un fichero abierto. El fichero está especificado por fd, un descriptor de fichero abierto para escritura, la acción por cmd, y la sección consiste en las posiciones de byte pos..pos+len-1, si len es positivo, y pos-len..pos-1, si len es negativo, donde pos es la posición actual del fichero. Si len es cero, la sección se extiende desde la posición actual del fichero al infinito, abarcando las posiciones actual y futura de «fin de fichero». En todos los casos, la sección se puede extender más alla del «fin de fichero» actual.

En Linux, esta llamada es tan solo una interfaz para fcntl(2). (En general, la relación entre lockf y fcntl es indefinida.)

Las operaciones válidas son:

F_LOCK
    Establece un bloqueo exclusivo en la sección especificada del fichero. Si (parte de) esta sección ya está bloqueada, la llamada se bloquea hasta que el bloqueo anterior sea liberado. Si esta sección se solapa con una sección previamente bloqueada, ambas se fusionan. Los bloqueos sobre el fichero son liberados tan pronto como el proceso que mantiene los bloqueos cierre algunos descriptores de fichero para el fichero. Un proceso hijo no hereda estos bloqueos.

F_TLOCK
    Igual que F_LOCK pero la llamada nunca se bloquea y devuelve un error en su lugar si el fichero ya está bloqueado.

F_ULOCK
    Desbloquea la sección indicada del fichero. Ésto puede provocar que una sección bloqueada se divida en dos secciones bloqueadas.

F_TEST
    Comprueba el bloqueo: devuelve 0 si la sección especificada está desbloqueada o bloqueada por este proceso; devuelve -1 y asigna a errno el valor EACCES si otro proceso mantiene un bloqueo.

VALOR DEVUELTO
En caso de éxito, se devuelve cero. En caso de error, se devuelve -1 y se modifica errno apropiadamente.

ERRORES

EAGAIN
    El fichero está bloqueado y se especificó F_TLOCK o F_TEST, o se prohibe la operación porque el fichero ha sido ubicado en memoria por otro proceso.

EBADF
    fd no es un descriptor de fichero abierto.

EDEADLK
    La orden fue T_LOCK y esta operación de bloqueo causaría una situación de interbloqueo.

EINVAL
    Se especificó una operación inválida en fd.

ENOLCK
    Demasiados bloqueos de segmento abiertos, la tabla de bloqueos está llena.

CONFORME A
SYSV, POSIX 1003.1-2001

VÉASE TAMBIÉN
fcntl(2), flock(2)
Pueden encontrarse también los ficheros locks.txt y mandatory.txt en /usr/src/linux/Documentation.