Provided by: manpages-fr-dev_3.57d1p1-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,  la  glibc  le  gère  depuis  la
       version 2.5.

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, "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

       splice(2), vmsplice(2)

COLOPHON

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

TRADUCTION

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