• # C'est rev

    Posté par . En réponse au message Flux dans un pipe. Évalué à 8.

    rev, ainsi que pas mal d'utilitaires unix, ne se comporte pas de la même façon si leur sortie est redirigée ou non. Pour t'en convaincre, utilise strace :

    (echo ceci est une phrase; sleep 2 ; echo a l endroit) | strace rev

    Cela donne quelque chose comme ça, pour la sequence de lectures et d'écritures sur l'entrée/sortie standard :


    read(0, "ceci est une phrase\n", 4096) = 20
    write(1, "esarhp enu tse icec\n", 20) = 20
    read(0, "a l endroit\n", 4096) = 12
    write(1, "tiordne l a\n", 12) = 12


    Avec la redirection, ça donne ça:
    (echo ceci est une phrase; sleep 2 ; echo a l endroit) | strace rev | rev


    read(0, "ceci est une phrase\n", 4096) = 20
    read(0, "a l endroit\n", 4096) = 12
    read(0, "", 4096) = 0
    write(1, "esarhp enu tse icec\ntiordne l a\n", 32) = 32


    L'écriture n'a lieu que lorsque le programme source se ferme.

    Tout cela dans le but d'avoir un affichage ligne à ligne lorsque affiché sur ton terminal et une meilleure performance (lecture et écriture par paquet de 4Ko) sinon.