.\" -*- coding: UTF-8 -*- .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH tee 2 "17 maja 2025 r." "Linux man\-pages 6.15" .SH NAZWA tee \- powiela zawartość potoku .SH BIBLIOTEKA Standardowa biblioteka C (\fIlibc\fP,\ \fI\-lc\fP) .SH SKŁADNIA .nf \fB#define _GNU_SOURCE\fP /* Patrz feature_test_macros(7) */ \fB#include \fP .P \fBssize_t tee(int \fP\fIfd_in\fP\fB, int \fP\fIfd_out\fP\fB, size_t \fP\fIsize\fP\fB, unsigned int \fP\fIflags\fP\fB);\fP .fi .\" Return type was long before glibc 2.7 .SH OPIS .\" Example programs http://brick.kernel.dk/snaps .\" .\" .\" add a "tee(in, out1, out2)" system call that duplicates the pages .\" (again, incrementing their reference count, not copying the data) from .\" one pipe to two other pipes. \fBtee\fP() powiela maksymalnie \fIsize\fP bajtów danych z potoku, do którego odnosi się deskryptor pliku \fIfd_in\fP, do potoku, do którego odnosi się deskryptor pliku \fIfd_out\fP. Nie konsumuje danych duplikowanych z \fIfd_in\fP, zatem dane te można skopiować kolejnym wywołaniem \fBsplice\fP(2). .P \fIflags\fP jest maską bitową tworzoną jako suma logiczna (OR) zera lub większej liczby następujących wartości: .TP 1.9i \fBSPLICE_F_MOVE\fP Obecnie nie wpływa na \fBtee\fP(); zob. \fBsplice\fP(2). .TP \fBSPLICE_F_NONBLOCK\fP Nie blokuje wejścia/wyjścia; więcej informacji w podręczniku \fBsplice\fP(2). .TP \fBSPLICE_F_MORE\fP Obecnie nie wpływa na \fBtee\fP(), lecz może być zaimplementowane w przyszłości; zob. \fBsplice\fP(2). .TP \fBSPLICE_F_GIFT\fP Nieużywane w \fBtee\fP(); zob. \fBvmsplice\fP(2). .SH "WARTOŚĆ ZWRACANA" Po pomyślnym zakończeniu, \fBtee\fP() zwraca liczbę zduplikowanych między wejściem i wyjściem bajtów. Zwracana wartość 0 oznacza, że nie wystąpiły dane do przetransferowania, zatem blokowanie nie miało sensu, ponieważ do końca do zapisu potoku, do którego odnosi się \fIfd_in\fP, nie było zapisujących. .P W razie wystąpienia błędu \fBtee\fP zwraca \-1 i ustawia \fIerrno\fP, wskazując błąd. .SH BŁĘDY .TP \fBEAGAIN\fP We \fIflags\fP podano \fBSPLICE_F_NONBLOCK\fP lub jeden z deskryptorów plików oznaczono jako nieblokujący (\fBO_NONBLOCK\fP), natomiast operacja spowodowałaby blokowanie. .TP \fBEINVAL\fP \fIfd_in\fP lub \fIfd_out\fP nie odnoszą się do potoku; albo \fIfd_in\fP i \fIfd_out\fP odnoszą się do tego samego potoku. .TP \fBENOMEM\fP Brak pamięci. .SH STANDARDY Linux. .SH HISTORIA Linux 2.6.17, glibc 2.5. .SH UWAGI Kopiowanie danych pomiędzy potokami przez \fBtee\fP() jest tylko konceptem. Tak naprawdę nie dochodzi do kopiowania: za kulisami \fBtee\fP() przypisuje dane z wyjścia, jedynie przez przechwycenie odniesienia do wejścia. .SH PRZYKŁADY Poniższy przykład implementuje prosty program \fBtee\fP(1) za pomocą wywołania systemowego \fBtee\fP(). Oto przykład jego użycia: .P .in +4n .EX $\fB date | ./a.out out.log | cat\fP; wto, 28 paź 2014, 10:06:00 CET $\fB cat out.log\fP; wto, 28 paź 2014, 10:06:00 CET .EE .in .SS "Kod źródłowy programu" .\" SRC BEGIN (tee.c) \& .EX #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, "Użycie: %s \[rs]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 (;;) { /* * Użyj tee ze standardowego wejścia do st. wyjścia. */ 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; \& /* * Skonsumuj st. wejście dokonując splice do pliku. */ 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); } .EE .\" SRC END .SH "ZOBACZ TAKŻE" \fBsplice\fP(2), \fBvmsplice\fP(2), \fBpipe\fP(7) .PP .SH TŁUMACZENIE Tłumaczenie niniejszej strony podręcznika: Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .