svc · unix #131
flock
Pose ou retire un verrou consultatif BSD sur un fichier entier via un descripteur ouvert.
Prototype
int flock(int fd, int how);Retour: int
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| fd | int | - | |
| how | int | - |
Historique des versions
| XNU tag | macOS | # |
|---|---|---|
| xnu-1456.1.26 | macOS 10.6 Snow Leopard | 131 |
| xnu-1699.24.8 | macOS 10.7 Lion | 131 |
| xnu-2050.18.24 | macOS 10.8 Mountain Lion | 131 |
| xnu-2422.115.4 | macOS 10.9 Mavericks | 131 |
| xnu-2782.40.9 | macOS 10.10 Yosemite | 131 |
| xnu-3247.1.106 | macOS 10.11 El Capitan | 131 |
| xnu-3789.1.32 | macOS 10.12 Sierra | 131 |
| xnu-4570.1.46 | macOS 10.13 High Sierra | 131 |
| xnu-4903.221.2 | macOS 10.14 Mojave | 131 |
| xnu-6153.11.26 | macOS 10.15 Catalina | 131 |
| xnu-1486.2.11 | — | 131 |
| xnu-1504.15.3 | — | 131 |
| xnu-1504.3.12 | — | 131 |
| xnu-1504.7.4 | — | 131 |
| xnu-1504.9.17 | — | 131 |
| xnu-1504.9.26 | — | 131 |
| xnu-1504.9.37 | — | 131 |
| xnu-1699.22.73 | — | 131 |
| xnu-1699.22.81 | — | 131 |
| xnu-1699.24.23 | — | 131 |
| xnu-1699.26.8 | — | 131 |
| xnu-1699.32.7 | — | 131 |
| xnu-2050.22.13 | — | 131 |
| xnu-2050.24.15 | — | 131 |
| xnu-2050.48.11 | — | 131 |
| xnu-2050.7.9 | — | 131 |
| xnu-2050.9.2 | — | 131 |
| xnu-2422.1.72 | — | 131 |
| xnu-2422.100.13 | — | 131 |
| xnu-2422.110.17 | — | 131 |
| xnu-2422.90.20 | — | 131 |
| xnu-2782.1.97 | — | 131 |
| xnu-2782.10.72 | — | 131 |
| xnu-2782.20.48 | — | 131 |
| xnu-2782.30.5 | — | 131 |
| xnu-3247.10.11 | — | 131 |
| xnu-3248.20.55 | — | 131 |
| xnu-3248.30.4 | — | 131 |
| xnu-3248.40.184 | — | 131 |
| xnu-3248.50.21 | — | 131 |
| xnu-3248.60.10 | — | 131 |
| xnu-3789.21.4 | — | 131 |
| xnu-3789.31.2 | — | 131 |
| xnu-3789.41.3 | — | 131 |
| xnu-3789.51.2 | — | 131 |
| xnu-3789.60.24 | — | 131 |
| xnu-3789.70.16 | — | 131 |
| xnu-4570.20.62 | — | 131 |
| xnu-4570.31.3 | — | 131 |
| xnu-4570.41.2 | — | 131 |
| xnu-4570.51.1 | — | 131 |
| xnu-4570.61.1 | — | 131 |
| xnu-4570.71.2 | — | 131 |
| xnu-4903.231.4 | — | 131 |
| xnu-4903.241.1 | — | 131 |
| xnu-4903.270.47 | — | 131 |
| xnu-6153.101.6 | — | 131 |
| xnu-6153.121.1 | — | 131 |
| xnu-6153.141.1 | — | 131 |
| xnu-6153.41.3 | — | 131 |
| xnu-6153.61.1 | — | 131 |
| xnu-6153.81.5 | — | 131 |
Exemples
C — non-blocking exclusive lock
if (flock(fd, LOCK_EX | LOCK_NB) == -1) {
if (errno == EWOULDBLOCK) /* another holder */;
}Notes
flock(2) pose un verrou consultatif partagé (LOCK_SH) ou exclusif (LOCK_EX) sur le fileglob derrière le fd ; LOCK_UN le libère. Le verrou est associé au fileglob, pas au processus — deux fds issus d'un même dup partagent l'état. macOS l'implémente sur fichiers réguliers, FIFOs et devices mais pas sur la plupart des systèmes de fichiers réseau. Le verrou est consultatif : seuls les processus coopérants qui appellent aussi flock seront bloqués. LOCK_NB rend l'appel non bloquant et retourne EWOULDBLOCK au lieu d'attendre.
Détection
syscall::flock:entry expose les drapeaux d'opération. Endpoint Security n'expose pas d'événement flock. Les verrous longs apparaissent typiquement comme une contention applicative plutôt que comme un signal noyau dédié.