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.
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.