vmsplice(2)

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

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#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);

DESCRIERE
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:

SPLICE_F_MOVE
    Unused for vmsplice(); see splice(2).

SPLICE_F_NONBLOCK
    Nu blochează operațiile de In/Ieș; a se vedea splice(2) pentru mai multe detalii.

SPLICE_F_MORE
    În prezent nu are niciun efect pentru vmsplice(), dar poate fi implementat în viitor; a se vedea splice(2).

SPLICE_F_GIFT
    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.

VALOAREA RETURNATĂ
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.

ERORI-IEȘIRE

EAGAIN
    SPLICE_F_NONBLOCK a fost specificat în flags, iar operația s-ar bloca.

EBADF
    fd fie nu este valid, fie nu se referă la o conductă.

EINVAL
    nr_segs este mai mare decât IOV_MAX; sau memoria nu este aliniată dacă este stabilit SPLICE_F_GIFT.

ENOMEM
    Memorie insuficientă.

STANDARDE
Linux.

ISTORIC
Linux 2.6.17, glibc 2.5.

NOTE
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.

CONSULTAȚI ȘI
splice(2), tee(2), pipe(7)

TRADUCERE
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.