Interactions père-fils

On a vu la semaine dernière une technique rudimentaire : les signaux. On utilisera cette semaine des outils adaptés à une vraie communication entre process.

La commande expect (cf. la page de man et aussi http://expect.nist.gov/) sert à interagir de façon automatique avec un programme qui s'attend à interagir avec un utilisateur humain.

On veut faire une version simplifiée de expect, et la programmer en perl. Il s'agit donc de prendre le contrôle de stdin, stdout et stderr, et d'y lire/écrire de façon automatisée.

Le programme (qu'on va appeler run) est appelé un argument qui décrit comment se passe l'interaction (par exemple le nom d'un fichier qui contient le code Perl pour une fonction interact) suivi d'un ou plusieurs arguments qui donnent la commande à exécuter (par exemple maple).

  1. Il crée un process fils qui exécute la commande décrite par ces arguments.
  2. Le père communique avec le fils.
  3. Si on tue le père ou le fils, l'autre meurt, proprement.

Communication à l'aide de pipes

Lire man perlfunc, en particulier la fonction pipe et aussi la fonction open qui sert à faire l'équivalent de dup et dup2.
lire aussi man perlipc, par exemple Bidirectional Communication with Yourself.
Attention aux problèmes de bufferisation des entrées/sorties.

[corrigé perl : run et interact]

Autres techniques

On peut faire autrement, avec des files de messages par exemple (msgget et autres) ou bien tester open2 (cf. man perlipc).