tee(2) System Calls Manual tee(2) NUME tee - duplica coninutul conductelor BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #define _GNU_SOURCE /* Consultai feature_test_macros(7) */ #include ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags); DESCRIERE tee() duplica pana la len octei de date din conducta la care se refera descriptorul de fiier fd_in in conducta la care se refera descriptorul de fiier fd_out. Nu consuma datele care sunt duplicate din fd_in; prin urmare, datele respective pot fi copiate de un splice(2) subsecvent. flags este o masca de bii care se compune prin combinarea prin OR impreuna cu zero sau mai multe dintre urmatoarele valori: SPLICE_F_MOVE In prezent nu are efect pentru tee(); a se vedea splice(2). SPLICE_F_NONBLOCK Nu blocheaza operaiile 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 RETURNATA La finalizarea cu succes, tee() returneaza numarul de octei care au fost duplicai intre intrare i ieire. O valoare de returnare 0 inseamna ca nu a existat nici un transfer de date i nu ar avea sens sa se blocheze, deoarece nu exista scriitori conectai la capatul de scriere al conductei la care face referire fd_in. In caz de eroare, tee() returneaza -1, iar errno este configurata pentru a indica eroarea. ERORI-IEIRE EAGAIN SPLICE_F_NONBLOCK a fost specificat in fanioane sau unul dintre descriptorii de fiiere a fost marcat ca neblocant (O_NONBLOCK), i operaia s-ar putea bloca. EINVAL fd_in sau fd_out nu se refera la o conducta; sau fd_in i fd_out se refera la aceeai conducta. ENOMEM Memorie insuficienta. STANDARDE Linux. ISTORIC Linux 2.6.17, glibc 2.5. NOTE Din punct de vedere conceptual, tee() copiaza datele intre cele doua conducte. In realitate, nu are loc nicio copiere reala de date: sub acoperire, tee() atribuie date la ieire prin simpla preluare a unei referine la intrare. EXEMPLE Exemplul de mai jos implementeaza un program de baza tee(1) utilizand apelul de sistem tee(). Iata 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 #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd; ssize_t len, slen; if (argc != 2) { fprintf(stderr, "Utilizare: %s 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; /* * Consuma ,,stdin" prin introducerea acesteia intr-un fiier. */ 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); } CONSULTAI I splice(2), vmsplice(2), pipe(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.8 2 mai 2024 tee(2)