TD 10: Redirections, tubes

Tristan Crolard - François Pottier

Résumé:

system, popen, pclose (POSIX 2), dup, pipe, tmpnam (POSIX 1)

Rappelons que les sujets et corrigés de chaque TD sont accessibles sur les machines des élèves, dans ~pottier/TD-Systems-98-99/. Essayez les programmes, modifiez-les, exécutez-les pas-à-pas, etc. pour mieux comprendre leur fonctionnement.

Prototypes

      int system(const char *command);
      FILE *popen(const char *command, const char *type);
      int pclose(FILE *stream);
      int dup(int fildes);
      int pipe(int fildes[2]);
      char *tmpnam(char *s);

Redirections

La fonction system permet de lancer une commande comme si elle était lancée depuis le shell. Les entrées standard, sortie standard et sortie d'erreur sont transmises à la commande.

La fonction dup permet de dupliquer un descpriteur de la table des fichier ouverts, le premier descripteur libre est toujours choisi.

1.
Ecrire la commande sup :
usage: sup commande fichier
permettant de simuler:
       commande > fichier
2.
Ecrire la commande inf :
usage: inf commande fichier
permettant de simuler:
       commande < fichier
3.
Ecrire la commande supp :
usage: supp commande fichier
permettant de simuler:
       commande >> fichier
4.
Ecrire la commande infsup :
usage: infsup commande fichier1 fichier2
permettant de simuler:
       commande < fichier1 > fichier2
5.
Ecrire la commande seq :
usage: seq commande1 commande2
permettant de simuler:
       commande1 ; commande2
6.
Ecrire la commande seqinfsup :
usage: seqinfsup commande1 fichier1 commande2 fichier2
permettant de simuler:
       commande1 < fichier1 ; commande2 > fichier2

Fichier temporaire

La fonction tmpnam génere le nom d'un fichier temporaire. Ecrire la commande app :
usage: app commande1 commande2
qui lance la commande1 (dont on suppose qu'elle accepte un nom de fichier comme premier argument) sur le fichier obtenu sur la sortie standard de commande2. Par exemple:
usage: app ghostview 'gunzip -c fichier.ps.gz'

Tube anonyme

La fonction pipe

La fonction pipe crée un tupe anonyme. Ecrire la commande tube :
usage: tube commande1 commande2
permettant de simuler:
       commande1 | commande2
Exemple :
tube 'ls &' more
Remarquer le lancement indispensable de ls en arriere-plan.

La fonction popen

La commande popen permet de lancer une commande en arrière-plan (à la différence de system), ouvre un tube anonyme vers le processus executant cette commande, en renvoie un FILE ouvert en lecture ou en écriture selon le mode choisi (et qui doit être fermé pas pclose). Ecrire la commande pipe en utilisant popen. Cette fois-ci, on peut l'utiliser ainsi:
pipe ls more


Jean-Baptiste Yunes
1999-02-05