IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

ecrire la commande tee en c


Sujet :

POSIX C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1
    Points : 0
    Points
    0
    Par défaut ecrire la commande tee en c
    ecrire la commande tee en c

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 372
    Points : 23 628
    Points
    23 628
    Par défaut
    Bonjour,

    Est-ce un exercice scolaire ?

    Parce qu'autrement, tout ce que tu nous décris là, c'est l'objet de la commande tee :

    Code Shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    $ echo Hello | tee tmp
    Hello
    $ cat tmp
    Hello
    
    $ tr a-z A-Z | tee tmp
    hello
    HELLO
    $ cat tmp
    HELLO
    
    $ tee tmp | gnuplot 2>&1 | tee -a tmp
    set term dumb
    plot sin(x)
    
    
          1 ++---------------***--------------+---***----------+--------**-----++
            +               *+ *              +   *  *         +  sin(x) ****** +
        0.8 ++              *   *                *    *               *    *   ++
            |              *     *               *    *               *    *    |
        0.6 ++             *     *              *      *              *     *  ++
            *             *       *             *      *             *       *  |
        0.4 +*            *       *             *      *             *       * ++
            |*            *        *           *        *           *        *  |
        0.2 +*            *        *           *        *           *        * ++
            | *          *         *          *          *          *         * |
          0 ++*          *         *          *          *          *         *++
            |  *        *           *         *          *         *           *|
       -0.2 ++ *        *           *         *          *         *           *+
            |  *        *            *       *            *       *            *|
       -0.4 ++ *        *            *       *            *       *            *+
            |   *      *             *      *              *      *             *
       -0.6 ++  *     *              *      *              *      *            ++
            |    *    *               *     *              *     *              |
       -0.8 ++   *    *                *   *                *   *              ++
            +    **  *       +         *  *   +              * +*               +
         -1 ++-----**--------+----------***---+--------------***---------------++
           -10              -5                0                5                10
    
    
    <Ctrl-D>
    
    $ cat tmp
    set term dumb
    plot sin(x)
    
    
          1 ++---------------***--------------+---***----------+--------**-----++
            +               *+ *              +   *  *         +  sin(x) ****** +
        0.8 ++              *   *                *    *               *    *   ++
            |              *     *               *    *               *    *    |
        0.6 ++             *     *              *      *              *     *  ++
            *             *       *             *      *             *       *  |
        0.4 +*            *       *             *      *             *       * ++
            |*            *        *           *        *           *        *  |
        0.2 +*            *        *           *        *           *        * ++
            | *          *         *          *          *          *         * |
          0 ++*          *         *          *          *          *         *++
            |  *        *           *         *          *         *           *|
       -0.2 ++ *        *           *         *          *         *           *+
            |  *        *            *       *            *       *            *|
       -0.4 ++ *        *            *       *            *       *            *+
            |   *      *             *      *              *      *             *
       -0.6 ++  *     *              *      *              *      *            ++
            |    *    *               *     *              *     *              |
       -0.8 ++   *    *                *   *                *   *              ++
            +    **  *       +         *  *   +              * +*               +
         -1 ++-----**--------+----------***---+--------------***---------------++
           -10              -5                0                5                10

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Tu as des copains d'école qui trainent sur ce forum on dirait.

    Tu fais une boucle infinie qui poll() stdin et les 3 pipes connectés au stdin, stout et stderr du fils. A chaque tour tu regarde quels fd sont prêts :

    - Si stdin est prêt, tu le lit et tu ajoutes les données lues dans un buffer. Si le read() renvoie 0 (ou le fread() renvoie EOF), ça veut dire qu'il n'y a plus de données, donc tu ferme le pipe connecté au stdin du fils.

    - Si le pipe connecté au stdin du fil est prêt, tu y envoies les données présentes dans le buffer,. Attention tu ne sera pas forcément capable d'envoyer l'intégralité des données, donc regarde bien combien de données ont été envoyées (c'est le nombre retourné par write()) pour faire avancer ta "position courante" d'autant dans le buffer d'envoi. Tu écris aussi dans le fichier les données que tu viens d'envoyer.

    - Si le pipe connecté au stdout du fil est prêt, tu lit les données et tu les écris dans le fichier. Si le read() renvoie 0, ça veut dire qu'il n'y a plus de données, et tu peux clore le fd.

    - Pareil pour le pipe connecté au stderr du fils.

    Enfin, quand tu n'as plus de fd à scruter (c'est à dire quand tous auront été fermé), tu fais un wait() pour récupérer le status du fils.

Discussions similaires

  1. [Toutes versions] ecrire une commande dans le form_open des formulaires
    Par Aladin_23 dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/06/2012, 18h47
  2. ecrire les commandes inux en c++
    Par dass96 dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 19/01/2010, 21h50
  3. ecrire une commande en C qui utilise gnash
    Par nina08 dans le forum C
    Réponses: 2
    Dernier message: 11/10/2008, 12h08
  4. ecrire des commandes dos
    Par warning dans le forum C
    Réponses: 1
    Dernier message: 16/05/2007, 13h55
  5. Ecrire le résultat d'une commande dans un fichier de l' OS
    Par Labienus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/02/2004, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo