You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.0 KiB

#!/usr/bin/perl -w
# communication par tube (fonction PIPE qui retourne
# un descripteur pour lire et un 2ième our écrire)
# le fils envoie le résultat de ls -l
# le père récupère le résultat et le met en majuscules
use IO::Handle;
# chargement du package contenant autoflush()
system("clear");
pipe ( ENTREE, SORTIE );
# création du tube avec les 2 decripteurs
# pipe (d1, d2) :
# d1 : descripteur pour lire ce qui est en sortie du tube
# d2 : descripteur pour écrire (envoyer dans le tube)
SORTIE->autoflush(1);
# pour rendre disponible immédiatement tout caractère contenu dans SORTIE
$pid = fork();
if ($pid == 0) { # proc. fils (PRODUCTEUR)
# fermeture du tube en lecture
close (ENTREE);
open (COMMANDE, "ls -l |");
while (<COMMANDE>)
print SORTIE $_;
close (COMMANDE);
close (SORTIE);
}
else { # proc. père (CONSOMMATEUR)
# fermeture du tube non-utilisé
close (SORTIE);
while (<ENTREE>)
print uc($_);
close (ENTREE);
exit(0);
}