Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
tee - Dupliquer le contenu d'un tube
SYNOPSIS
#define _GNU_SOURCE
#include <fcntl.h>
ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags);
DESCRIPTION
tee() duplique jusqu'a len octets de donnees du tube auquel le
descripteur de fichier fd_in fait reference vers le tube reference par
fd_out. Il ne consomme pas les donnees qui sont dupliquees depuis
fd_in ; ces donnees peuvent donc etre copiees par un futur appel a
splice(2).
flags est un ensemble de parametres modificateurs, dont l'espace de
nommage est partage avec splice(2) et vmsplice(2) :
SPLICE_F_MOVE N'a pas d'effet pour tee() actuellement ; consultez
splice(2).
SPLICE_F_NONBLOCK Ne pas bloquer pendant les entrees-sorties ;
consultez splice(2) pour plus de details.
SPLICE_F_MORE N'a pas d'effet pour tee() actuellement, mais
pourrait etre implemente un jour ; consultez
splice(2).
SPLICE_F_GIFT Inutilise pour tee() ; consultez vmsplice(2).
VALEUR RENVOY'EE
En cas de succes, tee() renvoie le nombre d'octets dupliques entre les
tubes d'entree et de sortie. La valeur de retour 0 signifie qu'il n'y
avait aucune donnee a transferer, et que bloquer n'aurait pas de sens
car il n'y a aucun ecrivain connecte a l'extremite d'ecriture du tube
reference par fd_in.
En cas d'erreur, tee() renvoie -1 et errno contient le code d'erreur.
ERREURS
EINVAL fd_in ou fd_out ne correspond pas a un tube ; ou bien fd_in et
fd_out font reference au meme tube.
ENOMEM Plus de memoire disponible.
VERSIONS
L'appel systeme tee() est apparu dans Linux 2.6.17.
CONFORMIT'E
Cet appel systeme est specifique a Linux.
NOTES
Conceptuellement, tee() copie les donnees entre deux tubes. En fait, il
n'y a pas de reelle copie de donnees : tee() attache les donnees au
tube de sortie en prenant une reference sur les donnees en entree.
EXEMPLE
L'exemple suivant implemente une version basique du programme tee(1) en
utilisant l'appel systeme tee().
#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, "Usage: %s <file>\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'entree 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'entree standard en la raccordant a 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
splice(2), vmsplice(2), feature_test_macros(7)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Julien Cristau et l'equipe francophone de traduction de
Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.