Rechercher une page de manuel
tee
Langue: fr
Version: 28 avril 2006 (mandriva - 01/05/08)
Section: 2 (Appels système)
Sommaire
NOM
tee - Dupliquer le contenu d'un tubeSYNOPSIS
#define _GNU_SOURCE #include <fcntl.h> long tee(int fd_in, int fd_out, size_t len, unsigned int flags);
DESCRIPTION
tee() duplique jusqu'à len octets de données à partir du tube référencé par le descripteur de fichier fd_in vers le tube référencé par le descripteur de fichier fd_out. Il ne consomme pas les données dupliquées depuis fd_in ; ainsi, ces données pourront être copiées par un appel ultérieur à splice(2).flags est une série d'attributs modificateurs qui partage le même espace de nommage avec splice(2) et vmsplice(2) :
- SPLICE_F_MOVE
- Actuellement sans effet pour tee() ; voir splice(2).
- SPLICE_F_NONBLOCK
- Ne pas bloquer sur les E/S ; voir splice(2) pour plus de détails.
- SPLICE_F_MORE
- Actuellement sans effet pour tee(), mais peut être implémenté dans le futur ; voir splice(2).
- SPLICE_F_GIFT
- Inutilisé pour tee() ; voir vmsplice(2).
VALEUR RENVOYÉE
En cas de réussite, tee() renvoie le nombre d'octets dupliqués entre l'entrée et la sortie. Une valeur de retour nulle signifie qu'il n'y avait pas de donnée à transférer, et qu'il n'y aurait aucun sens à bloquer étant donné qu'il n'y a pas d'écrivain connecté du coté écriture du tube référencé par fd_in.En cas d'erreur, tee() renvoie -1 et errno est positionnée en conséquence pour indiquer l'erreur.
ERREURS
- EINVAL
- fd_in ou fd_out ne fait pas référence à un tube ; ou fd_in et fd_out font référence au même tube.
- ENOMEM
- Pas assez de mémoire.
VERSIONS
L'appel système tee(2) est apparu pour la première fois dans Linux 2.6.17.CONFORMITÉ
Cet appel système est spécifique à Linux.NOTES
Conceptuellement, tee() copie les données entre deux tubes. En réalité, aucune donnée n'est réellement copiée : tee() affecte les données à la sortie en prenant une référence sur l'entrée.EXEMPLE
L'exemple suivant implémente un programme basique tee(1) en utilisant l'appel système tee(2).#define _GNU_SOURCE #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <errno.h> #include <limits.h> int main(int argc, char *argv[]) { int fd; int len, slen; assert(argc == 2); fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644); if (fd == -1) { perror("open"); exit(EXIT_FAILURE); } do { /* * dupliquer stdin sur stdout. */ 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; /* * Consume stdin by splicing it to a file. */ 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); }
VOIR AUSSI
splice(2), vmsplice(2), feature_test_macros(7)TRADUCTION
Ce document est une traduction réalisée par Alain Portal <aportal AT univ-montp2 DOT fr> le 24 octobre 2007 et révisée le 26 novembre 2007.
L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 tee ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre