tee(2) | System Calls Manual | tee(2) |
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
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
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.
15 iunie 2024 | Pagini de manual de Linux 6.9.1 |