.\" -*- coding: UTF-8 -*- .\" This manpage is Copyright (C) 2006 Jens Axboe .\" and Copyright (C) 2006 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH tee 2 "17 ноября 2024 г." "Linux man\-pages 6.12" .SH НАИМЕНОВАНИЕ tee \- повторяет содержимое канала .SH БИБЛИОТЕКА Standard C library (\fIlibc\fP,\ \fI\-lc\fP) .SH ОБЗОР .nf \fB#define _GNU_SOURCE\fP /* см. 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 ОПИСАНИЕ .\" 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() duplicates up to \fIsize\fP bytes of data from the pipe referred to by the file descriptor \fIfd_in\fP to the pipe referred to by the file descriptor \fIfd_out\fP. It does not consume the data that is duplicated from \fIfd_in\fP; therefore, that data can be copied by a subsequent \fBsplice\fP(2). .P Аргумент \fIflags\fP представляет собой битовую маску, которая составляется логическим сложением (OR) следующих значений: .TP 1.9i \fBSPLICE_F_MOVE\fP В данный момент никак не влияет при указании в \fBtee\fP(); см. \fBsplice\fP(2). .TP \fBSPLICE_F_NONBLOCK\fP Не блокировать ввод\-вывод; подробности в \fBsplice\fP(2). .TP \fBSPLICE_F_MORE\fP В данный момент никак не влияет при указании в \fBtee\fP(), но это может измениться; см. \fBsplice\fP(2). .TP \fBSPLICE_F_GIFT\fP Не используется для \fBtee\fP(); см. \fBvmsplice\fP(2). .SH "ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ" При успешном выполнении, \fBtee\fP() возвращает количество байт, которые были повторены из ввода в выводе. Возвращаемое значение 0 означает, что нет данных для передачи, и блокировка не имеет смысла, так как нет процессов\-писателей, подключённых к каналу для записи, на который указывает \fIfd_in\fP. .P В случае ошибки \fBtee\fP() возвращает \-1, а \fIerrno\fP устанавливается в соответствующее значение. .SH ОШИБКИ .TP \fBEAGAIN\fP В \fIflags\fP указан \fBSPLICE_F_NONBLOCK\fP или один из файловых дескрипторов был помечен как неблокирующий (\fBO_NONBLOCK\fP)\fB,\fP и операция вызвала бы блокировку. .TP \fBEINVAL\fP Значение \fIfd_in\fP или \fIfd_out\fP не указывает на канал; \fIfd_in\fP и \fIfd_out\fP указывают на один и тот же канал. .TP \fBENOMEM\fP Не хватает памяти. .SH СТАНДАРТЫ Linux. .SH ИСТОРИЯ Linux 2.6.17, glibc 2.5. .SH ПРИМЕЧАНИЯ Концептуально, \fBtee\fP() копирует данные между двумя каналами. В реальности, данные не копируются на самом деле: внутри, \fBtee\fP() назначает данные на вывод просто схватывая ссылку из ввода. .SH ПРИМЕРЫ В примере далее показана простая реализация программы \fBtee\fP(1) с помощью системного вызова \fBtee\fP(). Пример использования: .P .in +4n .EX $ \fBdate | ./a.out out.log | cat\fP Tue Oct 28 10:06:00 CET 2014 $ \fBcat out.log\fP Tue Oct 28 10:06:00 CET 2014 .EE .in .SS "Исходный код программы" .\" 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, "Usage: %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 (;;) { /* * tee stdin to stdout. */ 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; \& /* * Consume stdin by splicing it to a file. */ 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 "СМОТРИТЕ ТАКЖЕ" \fBsplice\fP(2), \fBvmsplice\fP(2), \fBpipe\fP(7) .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства разработал(и) Azamat Hackimov , Dmitry Bolkhovskikh , Yuri Kozlov , Иван Павлов и Kirill Rekhov . .PP Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, .UR https://www.gnu.org/licenses/gpl-3.0.html .UE версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ. .PP Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу .MT списка рассылки русских переводчиков .ME .