ein Kapitel zurück                                           ein Kapitel weiter

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....

  • der Filehandle unterscheidet sich nicht zu den Beispielen vorher
  • der 2.Parameter ist der Formatstring mit dem Namen des zu startenden Programms. WICHTIG -> Am Ende des Formatstrings müssen sie das Zeichen | einfügen.........


  • open(FH, "less $datei |") or die ".....";
    open(FH, "ps -x |") or die "......";


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 zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf