Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

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> >>.