flock(2) System Calls Manual flock(2) NOMBRE flock - impone o elimina un bloqueo de recomendacion en un archivo abierto. BIBLIOTECA Biblioteca Estandar C (libc, -lc) SINOPSIS #include int flock(int fd, int operation); DESCRIPCION Impone o elimina un bloqueo 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 bloqueo compartido. Mas de un proceso puede tener un bloqueo compartido para un fichero en un momento dado. LOCK_EX Pone un bloqueo exclusivo. Solamente un proceso puede tener un bloqueo exclusivo para un fichero en un momento dado. LOCK_UN Elimina un bloqueo existente mantenido por este proceso. Una llamada a flock() puede bloquearse si otro proceso mantiene un bloqueo 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 bloqueo compartido y exclusivo. Locks created by flock() are associated with an open file description (see open(2)). This means that duplicate file descriptors (created by, for example, fork(2) or dup(2)) refer to the same lock, and this lock may be modified or released using any of these file descriptors. Furthermore, the lock is released either by an explicit LOCK_UN operation on any of these duplicate file descriptors, or when all such file descriptors have been closed. If a process uses open(2) (or similar) to obtain more than one file descriptor for the same file, these file descriptors are treated independently by flock(). An attempt to lock the file using one of these file descriptors may be denied by a lock that the calling process has already placed via another file descriptor. Un proceso puede tener solamente un tipo de bloqueo (compartido o exclusivo) sobre un fichero. Las llamadas posteriores a flock() sobre un fichero ya bloqueado convertiran un bloqueo existente al nuevo modo de bloqueo. Los bloqueos creados con flock() se preservan tras un execve(2). Un bloqueo 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 se devuelve cero. En caso de error se devuelve -1, y errno se configura para indicar el error. ERRORES EBADF fd no es un descriptor de archivos abiertos. EINTR Mientras se esperaba por adquirir un bloqueo, la llamada fue interrumpida por la notificacion de una senal atrapada por un manejador; vea signal(7). EINVAL operation no es valido. ENOLCK El nucleo se quedo sin memoria para almacenar registros de bloqueos. EWOULDBLOCK El fichero esta encadenado y la bandera LOCK_NB ha sido elegida. TP EBADF fd no es un descriptor de fichero abierto. VERSIONES Since Linux 2.0, flock() is implemented as a system call in its own right rather than being emulated in the GNU C library as a call to fcntl(2). With this implementation, there is no interaction between the types of lock placed by flock() and fcntl(2), and flock() does not detect deadlock. (Note, however, that on some systems, such as the modern BSDs, flock() and fcntl(2) locks do interact with one another.) Detalles de CIFS A partir de la version 5.4, flock() no se despliega sobre SMB. Un archivo con estos bloqueos, no aparecera bloqueado para usuarios remotos. Since Linux 5.5, flock() locks are emulated with SMB byte-range locks on the entire file. Similarly to NFS, this means that fcntl(2) and flock() locks interact with one another. Another important side-effect is that the locks are not advisory anymore: any IO on a locked file will always fail with EACCES when done from a separate file descriptor. This difference originates from the design of locks in the SMB protocol, which provides mandatory locking semantics. Remote and mandatory locking semantics may vary with SMB protocol, mount options and server type. See mount.cifs(8) for additional information. ESTANDARES BSD. HISTORIAL 4.4BSD (la llamada al sistema flock() aparecio por primera vez en 4.2BSD). Una version de flock(), posiblemente implementada en terminos de fcntl(2), aparece en la mayoria de UNIX's. Detalles de NFS Up to Linux 2.6.11, flock() does not lock files over NFS (i.e., the scope of locks was limited to the local system). Instead, one could use fcntl(2) byte-range locking, which does work over NFS, given a sufficiently recent version of Linux and a server which supports locking. Since Linux 2.6.12, NFS clients support flock() locks by emulating them as fcntl(2) byte-range locks on the entire file. This means that fcntl(2) and flock() locks do interact with one another over NFS. It also means that in order to place an exclusive lock, the file must be opened for writing. Since Linux 2.6.37, the kernel supports a compatibility mode that allows flock() locks (and also fcntl(2) byte region locks) to be treated as local; see the discussion of the local_lock option in nfs(5). NOTAS flock() coloca bloqueos de recomendacion solamente; con los permisos adecuados sobre un fichero, un proceso es libre de ignorar el uso de flock() y realizar E/S sobre el fichero. flock() and fcntl(2) locks have different semantics with respect to forked processes and dup(2). On systems that implement flock() using fcntl(2), the semantics of flock() will be different from those described in this manual page. Converting a lock (shared to exclusive, or vice versa) is not guaranteed to be atomic: the existing lock is first removed, and then a new lock is established. Between these two steps, a pending lock request by another process may be granted, with the result that the conversion either blocks, or fails if LOCK_NB was specified. (This is the original BSD behavior, and occurs on many other implementations.) VEASE TAMBIEN flock(1), close(2), dup(2), execve(2), fcntl(2), fork(2), open(2), lockf(3), lslocks(8) Documentation/filesystems/locks.txt in the Linux kernel source tree (Documentation/locks.txt in older kernels) TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Gerardo Aburruzaga Garcia , Juan Piernas , Miguel Perez Ibars y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de manual de Linux 6.06 31 Octubre 2023 flock(2)