vmsplice(2) System Calls Manual vmsplice(2)

vmsplice - îmbină paginile de utilizator la/de la o conductă

Biblioteca C standard (libc, -lc)

#define _GNU_SOURCE         /* Consultați feature_test_macros(7) */
#include <fcntl.h>
ssize_t vmsplice(int fd, const struct iovec *iov,
                 size_t nr_segs, unsigned int flags);

Dacă fd este deschis pentru scriere, apelul de sistem vmsplice() cartografiază nr_segs intervale de memorie utilizator descrise de iov într-o conductă. Dacă fd este deschis pentru citire, apelul de sistem vmsplice() completează nr_segs intervale de memorie utilizator descrise de iov dintr-o conductă. Descriptorul de fișier fd trebuie să se refere la o conductă.

Indicatorul iov indică o matrice de structuri iovec, așa cum este descris în iovec(3type).

Argumentul flags este o mască de biți care se compune prin combinarea prin OR a zero sau mai multe dintre următoarele valori:

Unused for vmsplice(); see splice(2).
Nu blochează operațiile de In/Ieș; a se vedea splice(2) pentru mai multe detalii.
În prezent nu are niciun efect pentru vmsplice(), dar poate fi implementat în viitor; a se vedea splice(2).
Paginile de utilizator sunt un „cadou” pentru nucleu. Aplicația nu trebuie să modifice niciodată această memorie, în caz contrar, memoria cache a paginilor și datele de pe disc pot fi diferite. Donarea paginilor către nucleu înseamnă că un splice(2) SPLICE_F_MOVE ulterior poate muta cu succes paginile; dacă acest indicator nu este specificat, atunci un splice(2) SPLICE_F_MOVE ulterior trebuie să copieze paginile. Datele trebuie, de asemenea, să fie aliniate corect pe pagini, atât în memorie, cât și în lungime.

Upon successful completion, vmsplice() returns the number of bytes transferred to the pipe. On error, vmsplice() returns -1 and errno is set to indicate the error.

SPLICE_F_NONBLOCK a fost specificat în flags, iar operația s-ar bloca.
fd fie nu este valid, fie nu se referă la o conductă.
nr_segs este mai mare decât IOV_MAX; sau memoria nu este aliniată dacă este stabilit SPLICE_F_GIFT.
Memorie insuficientă.

Linux.

Linux 2.6.17, glibc 2.5.

vmsplice() urmează celelalte funcții de tip citire/scriere vectorizată în ceea ce privește limitările privind numărul de segmente transmise. Această limită este IOV_MAX așa cum este definită în <limits.h>. În prezent, această limită este de 1024.

vmsplice() acceptă cu adevărat o îmbinare adevărată numai din memoria utilizatorului către o conductă. În direcția opusă, de fapt, copiază doar datele în spațiul utilizatorului. Dar acest lucru face ca interfața să fie plăcută și simetrică și permite oamenilor să construiască pe baza vmsplice() cu spațiu pentru îmbunătățirea viitoare a performanțelor.

splice(2), tee(2), pipe(7)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

2 mai 2024 Pagini de manual de Linux 6.8