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

Pages du manuel de Linux 6.9.1                    15 juin 2024                                            tee(2)