Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

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 est un ensemble de paramètres modificateurs, dont l'espace de  nommage  est  partagé
       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 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

       EINVAL fd_in ou fd_out ne correspond pas  à  un  tube ;  ou  bien  fd_in  et  fd_out  font
              référence au même tube.

       ENOMEM Plus de mémoire disponible.

VERSIONS

       L'appel système tee() est apparu dans Linux 2.6.17.

CONFORMITÉ

       Cet appel système est spécifique à Linux.

NOTES

       Conceptuellement,  tee()  copie  les  données  entre  deux tubes. En fait, il n'y a pas de
       réelle copie de données : tee() attache les données au  tube  de  sortie  en  prenant  une
       référence sur les données en entrée.

EXEMPLE

       L'exemple  suivant implémente une version basique du programme tee(1) en utilisant l'appel
       système 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'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

       splice(2), vmsplice(2)

COLOPHON

       Cette page fait partie de la publication 3.32 du projet man-pages Linux.  Une  description
       du  projet  et  des  instructions  pour  signaler  des  anomalies  peuvent être trouvées à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <URL:http://po4a.alioth.debian.org/>  par  l'équipe  de  traduction francophone au sein du
       projet perkamon <URL:http://perkamon.alioth.debian.org/>.

       Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>   ou   par   un  rapport  de  bogue  sur  le  paquet
       manpages-fr.

       Vous pouvez toujours avoir accès à la version anglaise de  ce  document  en  utilisant  la
       commande « man -L C <section> <page_de_man> ».