Perl: sofort in Datei schreiben

megamimi

Nörgler vom Dienst
Beiträge
469
hi...

Ich habe vor kurzem durch Zufall herausgefunden, dass Perl erst nach dem Ende des Programs in Dateien schreibt. Also wenn man
PHP:
#! /usr/bin/perl -w

open(TEST,">blabla.txt") or die("$!\n");

print TEST "BLABLABLABLA\n";

while(1){}

close(TEST);
schreibt und das Program mit ^C beendet, hat blabla.txt keinen Inhalt. Nun meine Frage: Wie kann ich erreichen, dass sofort beim ausführen von print in die Datei geschrieben wird, also in etwa so wie bei flush unter C++?

danke, mimi

PS: nich schlagen wenns ne dumme frage is, aber ich bin halt noch kein perl-gott:D
 

ExRevel

Routinier
Beiträge
430
Nun gut, es gibt da ein paar moeglichkeiten das zu machen...

Du koenntest rein theoretisch wenn du C kannst einfach den C-Code den du brauchst in Perl einbinden an den entsprechenden Stellen, hier erhaelst du alle wichtigen Informationen:

http://www.perldoc.com/perl5.8.0/pod/perl.html

Das ist dann etwas uebermaeßig aufwendig, gell! Also geht das bei perl natuerlich auch anders... du musst die Autoflush-Flag von dem benutzen filehandle auf true setzen, dann wird sofort an die datei uebergeben, das passiert bei einem print() oder write() normalerweise halt nicht, wird alles gebuffert... Also du setzt die Flag [$|] wie folgt:

Code:
$old_fh = select(OUTPUT_HANDLE);
$| = 1;
select($old_fh);

Auswaehlen des filehandles, dann flagsetzen und Variable des handles nochmal auswaehlen, ab nun wird fuer jedes zeichen das du sendest sozusagen der syswrite befehl benutzt und es ist drin und auch bei einem STRG+C passiert dir nix schlimmes mehr! :)

Nebenbei... es geht noch einmal anders.... :)

Code:
syswrite(OUT, $char, 1)

Hab ich mich net mit auseinandergesetzt, keine ahnung wie das so ist! :)

ciaoi Exi
 

ExRevel

Routinier
Beiträge
430
Na, das habe ich doch auch gehofft! *erleichtert ist* :) War ja schliesslich meine erste taetigkeit als Perlmoderator hier!

ciao Exi
 

Ähnliche Themen

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

perl script, das Dateien aus einer Liste löscht

Last mit etc/passwd anzeigen lassen

NagiosGrapher 1.7.1 funktioniert nicht

[perl] Doppelbuchstaben

Oben