Provided by: manpages-ro-dev_4.26.0-1_all 

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)