![ein Kapitel weiter](../weiter.gif)
Im Kapitel zuvor haben sie gesehen wie sie mit der Funktion open
eine Datei zum weiteren bearbeiten Öffnen können.
Eine weitere Interesante Möglichkeit stellt das Öffnen und Lesen
aus laufenden Programmen da. Für open gelten in diesem Falls folgende Regeln....
Nun können sie mit einem so geöffneten Programm, lesend auf die Ausgabe
zurückgreifen. Das sich da eine Unmenge an Flexiblität ergibt ist klar.
Natürlich können sie auch mehrere Programme mit Hilfe der Pipe auf einmal
ausführen......
open(FH, "less $datei | cpio -o | gzip -9 |") or die "...";
Der "Nachteil" an dieser Methode ist -> Der Rückgabewert von open() kann nicht Zuverlässig überprüft werden, da popen() (Pipe) diese Methode ermöglicht.
Wir wollen als Beispiel die PID unseres eigenem Programms mit Hilfe
von ps ausgeben lassen......
#!/usr/bin/perl -w
$pid = $$;
open(FH, "ps -x |")
or die "Kein solche Datei vorhanden...\n";
while($tmp=<FH>){
if($tmp =~ m/$pid/){
print $0 , " : " , $tmp , "\n";
}
}
Langsam können sie sehen wie mächtig aber simpel diese Methode ist.
C-Programmierer kennen dies unter popen().
Wollen wir unser Programm von oben verbessern und alle Prozesse die
mit STRG+Z gestoppt wurden und alle Zombieprozesse werden gekillt....
#!/usr/bin/perl -w
open(FH, "ps -x |")
or die "Kein solche Datei vorhanden...\n";
while($tmp=<FH>){
if(($pid) =$tmp =~ m/(\d{4})/){ #Anpassen!
if($tmp =~ m/(\sT\s|\sZ\s)/){ #T=gestoppt Z=Zombie
print $pid , " : " , $tmp , "\n";
system("kill -9 $pid"); #killen
}
}
}
Das Programm soll keine Schule machen sondern, dient nur zur Demonstration.
![ein Kapitel weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|