Skip to content
Syscall BSD#337

svc · unix #337

sendfile

Transfère un fichier directement depuis un descripteur de fichier vers une socket sans copie en espace utilisateur.

Prototype

int sendfile(int fd, int s, off_t offset, off_t *nbytes, struct sf_hdtr *hdtr, int flags);

Retour: int

Arguments

NameTypeDirDescription
fdint-
sint-
offsetoff_t-
nbytesoff_t-
hdtrstruct sf_hdtr-
flagsint-

Historique des versions

XNU tagmacOS#
xnu-1456.1.26macOS 10.6 Snow Leopard337
xnu-1699.24.8macOS 10.7 Lion337
xnu-2050.18.24macOS 10.8 Mountain Lion337
xnu-2422.115.4macOS 10.9 Mavericks337
xnu-2782.40.9macOS 10.10 Yosemite337
xnu-3247.1.106macOS 10.11 El Capitan337
xnu-3789.1.32macOS 10.12 Sierra337
xnu-4570.1.46macOS 10.13 High Sierra337
xnu-4903.221.2macOS 10.14 Mojave337
xnu-6153.11.26macOS 10.15 Catalina337
xnu-7195.50.7.100.1macOS 11.0 Big Sur337
xnu-8019.41.5macOS 12.0 Monterey337
xnu-8792.41.9macOS 13.0 Ventura337
xnu-10002.1.13macOS 14.0 Sonoma337
xnu-11215.1.10macOS 15.0 Sequoia337
xnu-11417.101.15macOS 15.4 Sequoia337
xnu-12377.1.9macOS 26.0 Tahoe337
xnu-10002.41.9—337
xnu-10002.61.3—337
xnu-10002.81.5—337
xnu-10063.101.15—337
xnu-10063.121.3—337
xnu-10063.141.1—337
xnu-11215.41.3—337
xnu-11215.61.5—337
xnu-11215.81.4—337
xnu-11417.121.6—337
xnu-11417.140.69—337
xnu-12377.101.15—337
xnu-12377.41.6—337
xnu-12377.61.12—337
xnu-12377.81.4—337
xnu-1486.2.11—337
xnu-1504.15.3—337
xnu-1504.3.12—337
xnu-1504.7.4—337
xnu-1504.9.17—337
xnu-1504.9.26—337
xnu-1504.9.37—337
xnu-1699.22.73—337
xnu-1699.22.81—337
xnu-1699.24.23—337
xnu-1699.26.8—337
xnu-1699.32.7—337
xnu-2050.22.13—337
xnu-2050.24.15—337
xnu-2050.48.11—337
xnu-2050.7.9—337
xnu-2050.9.2—337
xnu-2422.1.72—337
xnu-2422.100.13—337
xnu-2422.110.17—337
xnu-2422.90.20—337
xnu-2782.1.97—337
xnu-2782.10.72—337
xnu-2782.20.48—337
xnu-2782.30.5—337
xnu-3247.10.11—337
xnu-3248.20.55—337
xnu-3248.30.4—337
xnu-3248.40.184—337
xnu-3248.50.21—337
xnu-3248.60.10—337
xnu-3789.21.4—337
xnu-3789.31.2—337
xnu-3789.41.3—337
xnu-3789.51.2—337
xnu-3789.60.24—337
xnu-3789.70.16—337
xnu-4570.20.62—337
xnu-4570.31.3—337
xnu-4570.41.2—337
xnu-4570.51.1—337
xnu-4570.61.1—337
xnu-4570.71.2—337
xnu-4903.231.4—337
xnu-4903.241.1—337
xnu-4903.270.47—337
xnu-6153.101.6—337
xnu-6153.121.1—337
xnu-6153.141.1—337
xnu-6153.41.3—337
xnu-6153.61.1—337
xnu-6153.81.5—337
xnu-7195.101.1—337
xnu-7195.121.3—337
xnu-7195.141.2—337
xnu-7195.60.75—337
xnu-7195.81.3—337
xnu-8019.61.5—337
xnu-8019.80.24—337
xnu-8020.101.4—337
xnu-8020.121.3—337
xnu-8020.140.41—337
xnu-8792.61.2—337
xnu-8792.81.2—337
xnu-8796.101.5—337
xnu-8796.121.2—337
xnu-8796.141.3—337

Notes

sendfile sur macOS a la signature BSD (in_fd, out_socket, offset, *len, *hdtr, flags) — pas celle de Linux. Le noyau utilise les pages UBC (Unified Buffer Cache) et, pour TCP, les fusionne dans la file d'envoi via sosend_list, ce qui peut engager TSO (TCP Segmentation Offload) sur les NIC supportées. L'argument hdtr permet d'attacher en-têtes et fin-de-bandes dans la même opération atomique, utile pour les réponses HTTP.

Détection

Les octets transitent toujours par NEFilterDataProvider, comme avec sendto. L'activité côté fichier (la lecture) est également invisible pour ES car les données ne reviennent jamais en espace utilisateur.

API associées

writesendmsgreadmmap