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 est un ensemble de paramètres modificateurs, dont l'espace de nommage est partagé avec splice(2) et vmsplice(2) :
- 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
- 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 de mémoire disponible.
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
Conceptuellement, tee() copie les données entre deux tubes. En fait, il n'y a pas de réelle copie de données : tee() attache les données au tube de sortie en prenant une référence sur les données en entrée.EXEMPLE
L'exemple suivant implémente une version basique du programme tee(1) en utilisant l'appel système tee().#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); }
COLOPHON
Cette page fait partie de la publication 3.65 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse http://www.kernel.org/doc/man-pages/.TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <http://perkamon.alioth.debian.org/>.Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à <[email protected]> ou par un rapport de bogue sur le paquet manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « man -L C <section> <page_de_man> ».