Provided by: manpages-fr-dev_4.15.0-9_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 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

       EAGAIN SPLICE_F_NONBLOCK was specified in flags or one of the file  descriptors  had  been
              marked as nonblocking (O_NONBLOCK), and the operation would block.

       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 assez de mémoire.

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

       splice(2), vmsplice(2), pipe(7)

COLOPHON

       Cette page fait partie de la publication 5.13 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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.