41 lines
1.0 KiB
Perl
41 lines
1.0 KiB
Perl
|
#!/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);
|
||
|
}
|