tee(2) System Calls Manual tee(2) NOM tee - Dupliquer le contenu d'un tube BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #define _GNU_SOURCE /* Consultez feature_test_macros(7) */ #include ssize_t tee(int fd_in, int fd_out, size_t len, unsigned int flags); DESCRIPTION tee() duplique jusqu'a len octets de donnees du tube auquel le descripteur de fichier fd_in fait reference vers le tube reference par fd_out. Il ne supprime pas les donnees qui sont dupliquees depuis fd_in ; ces donnees peuvent donc etre copiees par un futur appel a splice(2). L'argument flags est un masque de bits constitue 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 entrees-sorties ; consultez splice(2) pour plus de details. SPLICE_F_MORE N'a pas d'effet pour tee() actuellement, mais pourrait etre implemente un jour ; consultez splice(2). SPLICE_F_GIFT Inutilise pour tee() ; consultez vmsplice(2). VALEUR RENVOYEE En cas de succes, tee() renvoie le nombre d'octets dupliques entre les tubes d'entree et de sortie. La valeur de retour 0 signifie qu'il n'y avait aucune donnee a transferer, et que bloquer n'aurait pas de sens car il n'y a aucun ecrivain connecte a l'extremite d'ecriture du tube reference par fd_in. En cas d'erreur, tee() renvoie -1 et errno est defini pour preciser l'erreur. ERREURS EAGAIN SPLICE_F_NONBLOCK etait indique dans flags ou un des descripteurs de fichier a ete marque comme non bloquant (O_NONBLOCK), et l'operation pourrait bloquer. EINVAL fd_in ou fd_out ne correspond pas a un tube ; ou bien fd_in et fd_out font reference au meme tube. ENOMEM Plus assez de memoire. STANDARDS Linux. HISTORIQUE Linux 2.6.17, glibc 2.5. NOTES Conceptuellement, tee() copie les donnees entre deux tubes. En fait, il n'y a pas de reelle copie de donnees : sous cette apparence, tee() attache les donnees au tube de sortie en prenant simplement une reference sur les donnees en entree. EXEMPLES L'exemple suivant implemente une version basique du programme tee(1) en utilisant l'appel systeme 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 #include #include #include #include #include int main(int argc, char *argv[]) { int fd; ssize_t len, slen; if (argc != 2) { fprintf(stderr, "Utilisation : %s \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'entree 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'entree standard en la raccordant a 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 tee(2)