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
).
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]
On peut faire autrement, avec des files de messages par exemple
(msgget
et autres) ou bien tester open2
(cf. man perlipc
).