Skip to content
Syscall BSD#92

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

NameTypeDirDescription
fdint-
cmdint-
arglong-

Historique des versions

XNU tagmacOS#
xnu-1456.1.26macOS 10.6 Snow Leopard92
xnu-1486.2.1192
xnu-1504.15.392
xnu-1504.3.1292
xnu-1504.7.492
xnu-1504.9.1792
xnu-1504.9.2692
xnu-1504.9.3792

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 back

Notes

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.

API associées

openopenatflockfsyncguarded_open_npdup