table of contents
- bullseye 4.10.0-1
- bullseye-backports 4.18.1-1~bpo11+1
- testing 4.18.1-1
- unstable 4.18.1-1
TEE(2) | Manuel du programmeur Linux | TEE(2) |
NOM¶
tee - Dupliquer le contenu d'un tube
SYNOPSIS¶
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */ #include <fcntl.h>
ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags);
DESCRIPTION¶
tee() duplique jusqu'à len octets de données du tube auquel le descripteur de fichier fd_in fait référence vers le tube référencé par fd_out. Il ne consomme pas les données qui sont dupliquées depuis fd_in ; ces données peuvent donc être copiées par un futur appel à splice(2).
flags is a bit mask that is composed by ORing together zero or more of the following values:
- SPLICE_F_MOVE
- N'a pas d'effet pour tee() actuellement ; consultez splice(2).
- SPLICE_F_NONBLOCK
- Ne pas bloquer pendant les entrées-sorties ; consultez splice(2) pour plus de détails.
- SPLICE_F_MORE
- N'a pas d'effet pour tee() actuellement, mais pourrait être implémenté un jour ; consultez splice(2).
- SPLICE_F_GIFT
- Inutilisé pour tee() ; consultez vmsplice(2).
VALEUR RENVOYÉE¶
En cas de succès, tee() renvoie le nombre d'octets dupliqués entre les tubes d'entrée et de sortie. La valeur de retour 0 signifie qu'il n'y avait aucune donnée à transférer, et que bloquer n'aurait pas de sens car il n'y a aucun écrivain connecté à l'extrémité d'écriture du tube référencé par fd_in.
En cas d'erreur, tee() renvoie -1 et errno contient le code d'erreur.
ERREURS¶
VERSIONS¶
L'appel système tee() est apparu dans Linux 2.6.17, la glibc le gère depuis la version 2.5.
CONFORMITɶ
Cet appel système est spécifique à Linux.
NOTES¶
Conceptually, tee() copies the data between the two pipes. In reality no real data copying takes place though: under the covers, tee() assigns data to the output by merely grabbing a reference to the input.
EXEMPLES¶
The example below implements a basic tee(1) program using the tee() system call. Here is an example of its use:
$ 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
Source du programme¶
#define _GNU_SOURCE #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <limits.h> int main(int argc, char *argv[]) {
int fd;
int len, slen;
if (argc != 2) {
fprintf(stderr, "Utilisation : %s <fichier>\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);
}
do {
/*
* Duplique l'entrée standard dans la sortie standard.
*/
len = tee(STDIN_FILENO, STDOUT_FILENO,
INT_MAX, SPLICE_F_NONBLOCK);
if (len < 0) {
if (errno == EAGAIN)
continue;
perror("tee");
exit(EXIT_FAILURE);
} else
if (len == 0)
break;
/*
* Consomme l'entrée standard en la raccordant à un fichier.
*/
while (len > 0) {
slen = splice(STDIN_FILENO, NULL, fd, NULL,
len, SPLICE_F_MOVE);
if (slen < 0) {
perror("splice");
break;
}
len -= slen;
}
} while (1);
close(fd);
exit(EXIT_SUCCESS); }
VOIR AUSSI¶
COLOPHON¶
Cette page fait partie de la publication 5.10 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.
TRADUCTION¶
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org> et David Prévot <david@tilapin.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
9 juin 2020 | Linux |