|
|
1.1 root 1: .TH FLOCK 2 "27 July 1983"
2: .UC 4
3: .SH NAME
4: flock \- apply or remove an advisory lock on an open file
5: .SH SYNOPSIS
6: .nf
7: .ft B
8: #include <sys/file.h>
9: .PP
10: .ft B
11: .DT
12: #define LOCK_SH 1 /* shared lock */
13: #define LOCK_EX 2 /* exclusive lock */
14: #define LOCK_NB 4 /* don't block when locking */
15: #define LOCK_UN 8 /* unlock */
16: .PP
17: .ft B
18: flock(fd, operation)
19: int fd, operation;
20: .fi
21: .SH DESCRIPTION
22: .I Flock
23: applies or removes an
24: .I advisory
25: lock on the file associated with the file descriptor
26: .IR fd .
27: A lock is applied by specifying an
28: .I operation
29: parameter which is the inclusive or of
30: LOCK_SH or LOCK_EX and, possibly, LOCK_NB. To unlock
31: an existing lock
32: .I operation
33: should be LOCK_UN.
34: .PP
35: Advisory locks allow cooperating processes to perform
36: consistent operations on files, but do not guarantee
37: consistency (i.e. processes may still access files
38: without using advisory locks possibly resulting in
39: inconsistencies).
40: .PP
41: The locking mechanism allows two types of locks:
42: .I shared
43: locks and
44: .I exclusive
45: locks.
46: At any time multiple shared locks may be applied to a file,
47: but at no time are multiple exclusive, or both shared and exclusive,
48: locks allowed simultaneously on a file.
49: .PP
50: A shared lock may be
51: .I upgraded
52: to an exclusive lock, and vice versa, simply by specifying
53: the appropriate lock type; this results in the previous
54: lock being released and the new lock applied (possibly
55: after other processes have gained and released the lock).
56: .PP
57: Requesting a lock on an object which is already locked
58: normally causes the caller to blocked until the lock may be
59: acquired. If LOCK_NB is included in
60: .IR operation ,
61: then this will not happen; instead the call will fail and
62: the error EWOULDBLOCK will be returned.
63: .SH NOTES
64: Locks are on files, not file descriptors. That is, file descriptors
65: duplicated through
66: .IR dup (2)
67: or
68: .IR fork (2)
69: do not result in multiple instances of a lock, but rather multiple
70: references to a single lock. If a process holding a lock on a file
71: forks and the child explicitly unlocks the file, the parent will
72: lose its lock.
73: .PP
74: Processes blocked awaiting a lock may be awakened by signals.
75: .SH "RETURN VALUE
76: Zero is returned if the operation was successful;
77: on an error a \-1 is returned and an error code is left in
78: the global location \fIerrno\fP.
79: .SH "ERRORS
80: The \fIflock\fP call fails if:
81: .TP 20
82: [EWOULDBLOCK]
83: The file is locked and the LOCK_NB option was specified.
84: .TP 20
85: [EBADF]
86: The argument \fIfd\fP is an invalid descriptor.
87: .TP 20
88: [EINVAL]
89: The argument \fIfd\fP refers to an object other than a file.
90: .SH "SEE ALSO"
91: open(2), close(2), dup(2), execve(2), fork(2)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.