|
|
1.1 ! root 1: .\" Copyright (c) 1983 The Regents of the University of California. ! 2: .\" All rights reserved. ! 3: .\" ! 4: .\" Redistribution and use in source and binary forms are permitted provided ! 5: .\" that: (1) source distributions retain this entire copyright notice and ! 6: .\" comment, and (2) distributions including binaries display the following ! 7: .\" acknowledgement: ``This product includes software developed by the ! 8: .\" University of California, Berkeley and its contributors'' in the ! 9: .\" documentation or other materials provided with the distribution and in ! 10: .\" all advertising materials mentioning features or use of this software. ! 11: .\" Neither the name of the University nor the names of its contributors may ! 12: .\" be used to endorse or promote products derived from this software without ! 13: .\" specific prior written permission. ! 14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 15: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 16: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 17: .\" ! 18: .\" @(#)flock.2 6.6 (Berkeley) 6/23/90 ! 19: .\" ! 20: .TH FLOCK 2 "June 23, 1990" ! 21: .UC 5 ! 22: .SH NAME ! 23: flock \- apply or remove an advisory lock on an open file ! 24: .SH SYNOPSIS ! 25: .nf ! 26: .ft B ! 27: #include <sys/file.h> ! 28: .PP ! 29: .ft B ! 30: .DT ! 31: #define LOCK_SH 1 /* shared lock */ ! 32: #define LOCK_EX 2 /* exclusive lock */ ! 33: #define LOCK_NB 4 /* don't block when locking */ ! 34: #define LOCK_UN 8 /* unlock */ ! 35: .PP ! 36: .ft B ! 37: flock(fd, operation) ! 38: int fd, operation; ! 39: .fi ! 40: .SH DESCRIPTION ! 41: .I Flock ! 42: applies or removes an ! 43: .I advisory ! 44: lock on the file associated with the file descriptor ! 45: .IR fd . ! 46: A lock is applied by specifying an ! 47: .I operation ! 48: parameter that is the inclusive or of ! 49: LOCK_SH or LOCK_EX and, possibly, LOCK_NB. To unlock ! 50: an existing lock ! 51: .I operation ! 52: should be LOCK_UN. ! 53: .PP ! 54: Advisory locks allow cooperating processes to perform ! 55: consistent operations on files, but do not guarantee ! 56: consistency (i.e., processes may still access files ! 57: without using advisory locks possibly resulting in ! 58: inconsistencies). ! 59: .PP ! 60: The locking mechanism allows two types of locks: ! 61: .I shared ! 62: locks and ! 63: .I exclusive ! 64: locks. ! 65: At any time multiple shared locks may be applied to a file, ! 66: but at no time are multiple exclusive, or both shared and exclusive, ! 67: locks allowed simultaneously on a file. ! 68: .PP ! 69: A shared lock may be ! 70: .I upgraded ! 71: to an exclusive lock, and vice versa, simply by specifying ! 72: the appropriate lock type; this results in the previous ! 73: lock being released and the new lock applied (possibly ! 74: after other processes have gained and released the lock). ! 75: .PP ! 76: Requesting a lock on an object that is already locked ! 77: normally causes the caller to be blocked until the lock may be ! 78: acquired. If LOCK_NB is included in ! 79: .IR operation , ! 80: then this will not happen; instead the call will fail and ! 81: the error EWOULDBLOCK will be returned. ! 82: .SH NOTES ! 83: Locks are on files, not file descriptors. That is, file descriptors ! 84: duplicated through ! 85: .IR dup (2) ! 86: or ! 87: .IR fork (2) ! 88: do not result in multiple instances of a lock, but rather multiple ! 89: references to a single lock. If a process holding a lock on a file ! 90: forks and the child explicitly unlocks the file, the parent will ! 91: lose its lock. ! 92: .PP ! 93: Processes blocked awaiting a lock may be awakened by signals. ! 94: .SH "RETURN VALUE ! 95: Zero is returned if the operation was successful; ! 96: on an error a \-1 is returned and an error code is left in ! 97: the global location \fIerrno\fP. ! 98: .SH "ERRORS ! 99: The \fIflock\fP call fails if: ! 100: .TP 20 ! 101: [EWOULDBLOCK] ! 102: The file is locked and the LOCK_NB option was specified. ! 103: .TP 20 ! 104: [EBADF] ! 105: The argument \fIfd\fP is an invalid descriptor. ! 106: .TP 20 ! 107: [EINVAL] ! 108: The argument \fIfd\fP refers to an object other than a file. ! 109: .SH "SEE ALSO" ! 110: 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.