tee(2) System Calls Manual tee(2) NAVN tee - duplikere datakanalindhold BIBLIOTEK Standard C library (libc, -lc) SYNOPSIS #define _GNU_SOURCE /* Se feature_test_macros(7) */ #include ssize_t tee(int fd_in, int fd_out, size_t size, unsigned int flags); BESKRIVELSE tee() duplikerer op til size databyte fra datakanalen refereret til af fildeskriptoren fd_in til datakanalen refereret til af fildeskriptoren fd_out. Forbruger ikke dataene der er duplikeret fra fd_in; dataene kan derfor efterfolgende kopieres af en splice(2). flag er en bit-maske der er sammensat af at ORing'e sammen nul eller flere af de folgende vaerdier: SPLICE_F_MOVE Har i ojeblikket ingen effekt for tee(); se splice(2). SPLICE_F_NONBLOCK Bloker ikke en I/O; se splice(2) for yderligere detaljer. SPLICE_F_MORE Har i ojeblikket ingen effekt for tee(), men kan blive implementeret i fremtiden; se splice(2). SPLICE_F_GIFT Ubrugt for tee(); se vmsplice(2). RETURVAERDI Ved succesfuld fuldforelse returnerer tee() antallet af byte, der blev duplikeret mellem inddata og uddata. En returvaerdi pa 0 betyder at der ingen data var at overfore, og det ville give mening at blokere, da der ingen skrivere er forbundet til skriveslutningen af datakanalen refereret til af fd_in. Ved fejl returnerer tee() -1 og errno angives for at indikere fejlen. FEJL EAGAIN SPLICE_F_NONBLOCK var angivet i flag eller en af fildeskriptorerne er blevet markeret som ikkeblokerende (O_NONBLOCK), og operationen ville blokere. EINVAL fd_in eller fd_out refererer ikke til en datakanal; eller fd_in og fd_out refererer til den samme datakanal. ENOMEM Ikke nok hukommelse. STANDARDER Linux. HISTORIK Linux 2.6.17, glibc 2.5. NOTER Konceptuelt kopierer tee() dataene mellem de to datakanaler. I virkeligheden sker der dog ingen reel datakopiering: under overfladen tildeler tee() data til resultatet ved bare at fange en reference til dataene. EKSEMPLER Eksemplet nedenfor implementerer et grundlaeggende tee(1)-program via systemkaldet tee(). Her er et eksempel pa dets brug: $ 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 Programkilde #define _GNU_SOURCE #include #include #include #include #include #include #include int main(int argc, char *argv[]) { int fd; ssize_t size, ssize; if (argc != 2) { fprintf(stderr, "Brug: %s \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-standardind til standardud. */ size = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK); if (size < 0) { if (errno == EAGAIN) continue; perror("tee"); exit(EXIT_FAILURE); } if (size == 0) break; /* * Forbrug standardind ved at samle det i en fil. */ while (size > 0) { ssize = splice(STDIN_FILENO, NULL, fd, NULL, size, SPLICE_F_MOVE); if (ssize < 0) { perror("splice"); exit(EXIT_FAILURE); } size -= ssize; } } close(fd); exit(EXIT_SUCCESS); } SE OGSA splice(2), vmsplice(2), pipe(7) OVERSAETTELSE Oversaettere af denne manual til dansk Joe Hansen Denne oversaettelse er gratis dokumentation; laes GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. Hvis du stoder pa fejl i oversaettelsen af denne vejledning, skal du sende en besked til . Linux man-pages 6.17 8. februar 2026 tee(2)