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

VERSIONS

       L'appel système tee() est apparu dans Linux 2.6.17, la prise en charge a été ajoutéé  dans
       la glibc 2.5.

STANDARDS

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