svc · unix #92
fcntl
Appel multiplexé de contrôle de descripteur couvrant la duplication, la manipulation des drapeaux, le verrouillage et des opérations spécifiques à macOS.
Prototype
int fcntl(int fd, int cmd, long arg);Retour: int
Arguments
| Name | Type | Dir | Description |
|---|---|---|---|
| fd | int | - | |
| cmd | int | - | |
| arg | long | - |
Historique des versions
| XNU tag | macOS | # |
|---|---|---|
| xnu-1456.1.26 | macOS 10.6 Snow Leopard | 92 |
| xnu-1486.2.11 | — | 92 |
| xnu-1504.15.3 | — | 92 |
| xnu-1504.3.12 | — | 92 |
| xnu-1504.7.4 | — | 92 |
| xnu-1504.9.17 | — | 92 |
| xnu-1504.9.26 | — | 92 |
| xnu-1504.9.37 | — | 92 |
Exemples
C — set close-on-exec
int fl = fcntl(fd, F_GETFD);
fcntl(fd, F_SETFD, fl | FD_CLOEXEC);C — durable flush
if (fcntl(fd, F_FULLFSYNC) == -1)
fsync(fd); // fall backNotes
macOS étend fcntl POSIX avec un large jeu de commandes F_*: F_PREALLOCATE, F_PUNCHHOLE, F_FULLFSYNC, F_NOCACHE, F_GETPATH, F_BARRIERFSYNC, F_SETBACKINGSTORE et bien d'autres. F_FULLFSYNC est requis lorsqu'un appelant a besoin que les données soient sur support stable; fsync ne vide que le cache du disque. Les commandes F_GETLK/F_SETLK/F_SETLKW implémentent les verrous consultatifs POSIX par fileglob.
Détection
syscall::fcntl:entry en DTrace expose l'argument cmd. Endpoint Security ne détaille pas les variantes de fcntl, mais les trous percés via F_PUNCHHOLE laissent des évènements d'écriture VFS.