Thread [OpenOffice::OODoc] Ergebnis in Variable (8 answers)
Opened by bianca at 2013-09-05 20:03

murphy
 2013-09-07 01:38
#169960 #169960
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Wenn irgendwelcher Code nur in eine Datei schreiben will, man die Ausgabe aber unbedingt als Datenstrom haben möchte, dann gibt es unter Unix immer noch die Möglichkeit, benannte Pipes zu verwenden. Das könnte ungefähr so aussehen:
  • Erzeuge mit CPAN:File::Temp::tempdir ein temporäres Verzeichnis.
  • Erzeuge mit CPAN:POSIX::mkfifo in diesem Verzeichnis eine Pipe.
  • Forke den Prozess mit Perldoc:perlfunc fork.
  • Rufe im Kindprozess den Code auf, der eine Dateiausgabe erzeugt und lasse ihn in die Pipe schreiben.
  • Öffne im Elternprozess die Pipe und lese die ankommenden Daten aus.
  • Schließe die Pipe, räume den Kindprozess auf und lasse CPAN:File::Temp das temporäre Verzeichnis aufräumen.


Zusätzlich gibt es unter einigen Unices, insbesondere Linux, die Möglichkeit Dateideskriptoren des eigenen Prozesses auch über spezielle Pfade im Dateisystem anzusprechen. Dieses Feature kann man nutzen um die oben beschriebene Methode zu vereinfachen und komplett ohne temporäre Dateien auszukommen:
  • Forke einen Kindprozess mit offener Ausgabepipe mittels Perldoc:perlfunc open (my $pid = open my $pipe, '-|';).
  • Rufe im Kindprozess den Code auf, der eine Dateiausgabe erzeugt und lasse ihn nach '/dev/stdout' schreiben.
  • Lese im Elternprozess die ankommenden Daten aus (my $data = do { local $/; <$pipe> };).
  • Schließe das Dateihandle und lasse Perl den Kindprozess aufräumen.

Last edited: 2013-09-07 02:24:03 +0200 (CEST)
When C++ is your hammer, every problem looks like your thumb.

View full thread [OpenOffice::OODoc] Ergebnis in Variable