Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       sendfile - transferă date între descriptori de fișiere

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <sys/sendfile.h>

       ssize_t sendfile(int out_fd, int in_fd, off_t *_Nullable offset,
                        size_t count);

DESCRIERE

       sendfile()  copiază  date  între  un  descriptor  de fișier și altul. Deoarece această copiere se face în
       interiorul nucleului, sendfile() este mai eficient decât combinația dintre read(2) și write(2),  care  ar
       necesita transferul de date către și din spațiul utilizatorului.

       in_fd  trebuie  să  fie  un  descriptor  de  fișier  deschis  pentru citire, iar out_fd trebuie să fie un
       descriptor deschis pentru scriere.

       Dacă offset nu este NULL, atunci indică o variabilă care conține poziția fișierului de la care sendfile()
       va începe să citească datele din in_fd. La returnarea lui sendfile(), această variabilă va  fi  stabilită
       la  poziția  octetului care urmează ultimului octet citit. Dacă offset nu este NULL, atunci sendfile() nu
       modifică poziția în fișier a lui in_fd; în caz contrar, poziția în fișier este ajustată pentru a reflecta
       numărul de octeți citiți din in_fd.

       Dacă offset este NULL, atunci datele vor fi citite din in_fd  începând  de  la  poziția  fișierului,  iar
       poziția fișierului va fi actualizată de apel.

       count este numărul de octeți care trebuie copiați între descriptorii de fișiere.

       Argumentul  in_fd  trebuie să corespundă unui fișier care acceptă operații de tip mmap(2) (adică nu poate
       fi un soclu). Mai puțin începând cu Linux 5.12 și dacă out_fd este o conductă, caz în care sendfile()  se
       transformă în splice(2) și se aplică restricțiile sale.

       Înainte  de  Linux  2.6.33,  out_fd  trebuie să se refere la un soclu. Începând cu Linux 2.6.33, poate fi
       vorba de orice fișier. Dacă acesta este explorabil,  atunci  sendfile()  modifică  în  mod  corespunzător
       poziția fișierului.

VALOAREA RETURNATĂ

       În  cazul în care transferul a avut succes, se returnează numărul de octeți scriși în out_fd. Rețineți că
       un apel reușit la sendfile() poate scrie mai puțini octeți decât cei solicitați; apelantul trebuie să fie
       pregătit să reia apelul în cazul în care există octeți care nu au fost trimiși. A se vedea, de  asemenea,
       secțiunea NOTE.

       În caz de eroare, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

       EAGAIN Ieșirea/ieșirea fără blocare a fost selectată folosind O_NONBLOCK și scrierea s-ar bloca.

       EBADF  Fișierul  de  intrare  nu  a  fost  deschis pentru citire sau fișierul de ieșire nu a fost deschis
              pentru scriere.

       EFAULT Adresă incorectă.

       EINVAL Descriptorul nu este valid sau blocat, sau o operație de tip mmap(2) nu  este  disponibilă  pentru
              in_fd, sau count este negativ.

       EINVAL out_fd are activat fanionul O_APPEND. În prezent, acest lucru nu este acceptat de sendfile().

       EIO    Eroare nespecificată în timpul citirii din in_fd.

       ENOMEM Memorie insuficientă pentru a citi din in_fd.

       EOVERFLOW
              count este prea mare, operația ar duce la depășirea dimensiunii maxime a fișierului de intrare sau
              a fișierului de ieșire.

       ESPIPE offset nu este NULL, dar fișierul de intrare nu poate fi explorat.

VERSIUNI

       Alte sisteme UNIX implementează sendfile() cu o semantică și prototipuri diferite. Acesta nu ar trebui să
       fie utilizat în programele portabile.

STANDARDE

       Niciunul.

ISTORIC

       Linux 2.2, glibc 2.1.

       În  Linux  2.4  și  versiunile  anterioare,  out_fd  se putea referi, de asemenea, la un fișier obișnuit;
       această posibilitate a dispărut în seria de nuclee Linux 2.6.x, dar a fost restabilită în Linux 2.6.33.

       Apelul de sistem original Linux sendfile() nu a fost conceput pentru a gestiona poziții din fișiere mari.
       În consecință, Linux 2.4 a adăugat sendfile64(), cu un tip mai larg pentru argumentul offset. Funcția  de
       învăluire glibc sendfile() se ocupă în mod transparent de diferențele din nucleu.

NOTE

       sendfile()  va  transfera  cel  mult  0x7ffff000  (2,147,479,552)  octeți,  returnând  numărul  de octeți
       transferați efectiv; (acest lucru este valabil atât pe sistemele pe 32 de biți, cât și pe cele pe  64  de
       biți).

       Dacă  intenționați  să  utilizați  sendfile() pentru a trimite fișiere către un soclu TCP, dar trebuie să
       trimiteți unele date de antet înainte de conținutul  fișierului,  veți  găsi  utilă  utilizarea  opțiunii
       TCP_CORK, descrisă în tcp(7), pentru a minimiza numărul de pachete și pentru a regla performanța.

       Este  posibil  ca  aplicațiile  să  dorească să revină la read(2) și write(2) în cazul în care sendfile()
       eșuează cu EINVAL sau ENOSYS.

       În cazul în care out_fd se referă la un soclu sau la o conductă cu  suport  de  copiere  zero,  apelanții
       trebuie  să  se  asigure  că  porțiunile  transferate  din  fișierul  la  care  face referire in_fd rămân
       nemodificate până când cititorul de la celălalt capăt al out_fd a consumat datele transferate.

       Apelul splice(2), specific Linux, permite transferul de date între descriptori de fișiere  arbitrari,  cu
       condiția ca unul (sau amândoi) dintre ei să fie o conductă.

CONSULTAȚI ȘI

       copy_file_range(2), mmap(2), open(2), socket(2), splice(2)

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

Pagini de manual de Linux 6.9.1                    2 mai 2024                                        sendfile(2)