Provided by: manpages-fr-dev_4.23.1-1_all bug

NOM

       tee - Dupliquer le contenu d'un tube

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

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

       L'argument flags est un masque de bits constitué par un OU binaire entre une ou  plusieurs
       des valeurs suivantes :

       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 est défini pour préciser l'erreur.

ERREURS

       EAGAIN SPLICE_F_NONBLOCK était indiqué dans flags ou un des descripteurs de fichier a  été
              marqué comme non bloquant (O_NONBLOCK), et l'opération pourrait bloquer.

       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.

STANDARDS

       Linux.

HISTORIQUE

       Linux 2.6.17, glibc 2.5.

NOTES

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

EXEMPLES

       L'exemple suivant implémente une version basique du programme tee(1) en utilisant  l'appel
       système tee(). Voici un exemple de cette utilisation :

           $ 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 <errno.h>
       #include <fcntl.h>
       #include <limits.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <sys/types.h>
       #include <unistd.h>

       int
       main(int argc, char *argv[])
       {
           int      fd;
           ssize_t  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);
           }

           for (;;) {
               /*
                * Dupliquer 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);
               }
               if (len == 0)
                   break;

               /*
                * Consommer 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");
                       exit(EXIT_FAILURE);
                   }
                   len -= slen;
               }
           }

           close(fd);
           exit(EXIT_SUCCESS);
       }

VOIR AUSSI

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

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>,  David  Prévot  <david@tilapin.org>  et  Jean-Pierre  Giraud
       <jean-pierregiraud@neuf.fr>

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