de cipher16 le Mar 29 Avr 2008 15:19
- Code: Tout sélectionner
#!/usr/bin/perl -w
# Il MANQUE juste 2/3 LIGNES de code !
# création de 2 proc avec transmission/réception de caractères via un tube
# le fils envoie le résultat de ls -l
# le père recupère ce résultat et met tout en MAJuscules
use IO::Handle; # chargement du package contenant autoflush()
system("clear");
pipe(ENTREE,SORTIE); # création du tube avec les 2 descripteurs
# pipe (d1, d2) : d1 = descripteur pour lire (ce qui est en sortie du tube)
#--------------- d2 = descripteur pour écrire (envoyer ds le tube)
SORTIE->autoflush(1); # pour rendre disponible immediatement tout caractère contenu
# dans le fichier
$pid = fork();
die "Peut pas Forker" if !defined($pid);
if ($pid == 0 ) # proc. fils ( PRODUCTEUR)
{
# fermeture du tube en lecture car non utilise
close (ENTREE);
foreach $i (`ls -l`) # execution de la commande ls
{
print SORTIE $i;
#sleep (1) ; # tempo pour bloquer le pere
}
}
else
{
# proc. pere ( CONSOMMATEUR)
close (SORTIE); # ne pas oublier (sinon on ne sort pas de la boucle)
while(read ENTREE,$c,1) # boucle de lecture avec fin sur eof + plus de redacteur
# rem : faites une lecture caractère (= octet) par caract. !
{
$c=uc $c; # conversion en majuscule et affichage
print $c;
}
exit(0);
}