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

NUME

       tee - duplică conținutul conductelor

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #define _GNU_SOURCE         /* Consultați feature_test_macros(7) */
       #include <fcntl.h>

       ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags);

DESCRIERE

       tee()  duplică  până la len octeți de date din conducta la care se referă descriptorul de fișier fd_in în
       conducta la care se referă descriptorul de fișier fd_out. Nu  consumă  datele  care  sunt  duplicate  din
       fd_in; prin urmare, datele respective pot fi copiate de un splice(2) subsecvent.

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

       SPLICE_F_MOVE      În prezent nu are efect pentru tee(); a se vedea splice(2).

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

       SPLICE_F_MORE      Currently has no effect  for  tee(),  but  may  be  implemented  in  the  future;  see
                          splice(2).

       SPLICE_F_GIFT      Neutilizat pentru tee(); a se vedea vmsplice(2).

VALOAREA RETURNATĂ

       La  finalizarea  cu  succes,  tee()  returnează numărul de octeți care au fost duplicați între intrare și
       ieșire. O valoare de returnare 0 înseamnă că nu a existat nici un transfer de date și nu ar avea sens  să
       se  blocheze,  deoarece  nu  există  scriitori  conectați la capătul de scriere al conductei la care face
       referire fd_in.

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

ERORI-IEȘIRE

       EAGAIN SPLICE_F_NONBLOCK a fost specificat în fanioane sau unul dintre descriptorii  de  fișiere  a  fost
              marcat ca neblocant (O_NONBLOCK), și operația s-ar putea bloca.

       EINVAL fd_in sau fd_out nu se referă la o conductă; sau fd_in și fd_out se referă la aceeași conductă.

       ENOMEM Memorie insuficientă.

STANDARDE

       Linux.

ISTORIC

       Linux 2.6.17, glibc 2.5.

NOTE

       Din  punct  de vedere conceptual, tee() copiază datele între cele două conducte. În realitate, nu are loc
       nicio copiere reală de date: sub acoperire, tee() atribuie date la ieșire prin  simpla  preluare  a  unei
       referințe la intrare.

EXEMPLE

       Exemplul  de  mai  jos  implementează un program de bază tee(1) utilizând apelul de sistem tee(). Iată un
       exemplu de utilizare a acestuia:

           $ date | ./a.out out.log | cat
           Tue Oct 28 10:06:00 CET 2014
           $ cat out.log
           Tue Oct 28 10:06:00 CET 2014

   Sursa programului

       #define _GNU_SOURCE
       #include <errno.h>
       #include <fcntl.h>
       #include <limits.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <sys/types.h>
       #include <unistd.h>

       int
       main(int argc, char *argv[])
       {
           int      fd;
           ssize_t  len, slen;

           if (argc != 2) {
               fprintf(stderr, "Utilizare: %s <fișier>\n", argv[0]);
               exit(EXIT_FAILURE);
           }

           fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644);
           if (fd == -1) {
               perror("open");
               exit(EXIT_FAILURE);
           }

           for (;;) {
               /*
                * tee „stdin” la „stdout”.
                */
               len = tee(STDIN_FILENO, STDOUT_FILENO,
                         INT_MAX, SPLICE_F_NONBLOCK);
               if (len < 0) {
                   if (errno == EAGAIN)
                       continue;
                   perror("tee");
                   exit(EXIT_FAILURE);
               }
               if (len == 0)
                   break;

               /*
                * Consumă „stdin” prin introducerea acesteia într-un fișier.
                */
               while (len > 0) {
                   slen = splice(STDIN_FILENO, NULL, fd, NULL,
                                 len, SPLICE_F_MOVE);
                   if (slen < 0) {
                       perror("splice");
                       exit(EXIT_FAILURE);
                   }
                   len -= slen;
               }
           }

           close(fd);
           exit(EXIT_SUCCESS);
       }

CONSULTAȚI ȘI

       splice(2), vmsplice(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 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                   15 iunie 2024                                           tee(2)