tee   Début   Suivant   Sommaire   Préc.page.lue   Accueil

Section: Manuel du programmeur Linux (2)
Updated: 28 avril 2006
Sommaire  




NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

tee - Dupliquer le contenu d'un tube  




SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

#define _GNU_SOURCE
#include <fcntl.h>

long tee(int fd_in, int fd_out, size_t len, unsigned int flags);
 



DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 dont l'espace de nommage est partagé 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 entrées-sorties ; voir splice(2) pour plus de détails.

SPLICE_F_MORE

Actuellement sans effet pour tee(), mais pourrait être implémenté un jour ; voir splice(2).

SPLICE_F_GIFT

Inutilisé pour tee() ; voir vmsplice(2).

 



VALEUR RENVOYÉE   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 aucune donnée à transférer, et que bloquer n'aurait pas de sens étant donné qu'il n'y a pas d'écrivain connecté à l'extrémité écriture du tube référencé par fd_in.

En cas d'erreur, tee() renvoie -1 auquel cas errno contient le code d'erreur.  




ERREURS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

EINVAL

fd_in ou fd_out ne fait pas référence à un tube ; ou bien fd_in et fd_out font référence au même tube.

ENOMEM

Pas assez de mémoire.

 



VERSIONS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

L'appel système tee() a été introduit dans le noyau Linux dans sa version 2.6.17.  




CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Cet appel système est spécifique à Linux.  




NOTES   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Conceptuellement, tee() copie les données entre deux tubes.

En réalité, aucune donnée n'est vraiement copiée : tee() affecte les données à la sortie en prenant une référence sur l'entrée.  




EXEMPLE   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 <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 l'entrée standard sur 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);
}
 



VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

splice(2), vmsplice(2), feature_test_macros(7)  




TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 23 juin 2008.

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.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil

NOM

SYNOPSIS

DESCRIPTION

VALEUR RENVOYÉE

ERREURS

VERSIONS

CONFORMITÉ

NOTES

EXEMPLE

VOIR AUSSI

TRADUCTION


Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
EINVALERREURS
ENOMEMERREURS
SPLICE_F_GIFTDESCRIPTION
SPLICE_F_MOREDESCRIPTION
SPLICE_F_MOVEDESCRIPTION
SPLICE_F_NONBLOCKDESCRIPTION



Ce document a été créé par man2html suivi de man2html.pl, le 27/10/2008 08:41:49, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional