Hallo, Am Fre, 27 Jul 2007, gooly@gmx.at schrieb:
Am Donnerstag, 26. Juli 2007 schrieb David Haller:
Am Mit, 25 Jul 2007, gooly@gmx.at schrieb: [..]
Es gibt aber auch ein Debugging (siehe laptop_mode): anschalten: Konsole oder bash: echo 1 > /proc/sys/vm/block_dump Perl: system('echo 1 > /proc/sys/vm/block_dump');# switch on rw log
Besser:
sysctl -w vm.block_dump=1
Bzw. gleich in der /etc/sysctl.conf eintragen. Hmm, das 'logging' soll vom programm an und abgeschaltet werden , da macht ein conf-Eintrag nicht wirklich Sinn.
Du weißt aber schon, was "bzw." bedeutet? sysctl zu verwenden ist jedenfalls besser.
Mit perl besser:
==== open(PROC, ">/proc/sys/vm/block_dump") or die "$!\n"; print PROC 1; close(PROC) or die "$!\n"; ====
system sollte man eher vermeiden warum?
und wenn doch sollte man den Rückgabewert auswerten! ^^^^^^^^^^^^^^^^^^^^^^
Einen weiteren Prozess zu starten ist langsam und unnötig. Generell: Es öffnet eine Sicherheitslücke, wenn man nicht 100% selber festlegt, was per system ausgeführt wird. D.h. system mit einem Kommando, das von "aussen" beeinflußt werden kann (Argumente wie z.B. auch Dateinamen), aufzurufen ist eine Sicherheitslücke. Besonders wenn system ein String und keine Liste übergeben wird, dann wird eine Shell gestartet die Wildcards und anderes im Übergebenen String auswertet...
Perl: system ( "dmesg |grep READ >$f 2>&1");
*urgsl* warum?
Gleiche Gründe wie oben.
==== open(DMESG, "dmesg |") or die "$!\n"; print grep( /READ|WRITE/, <DMESG>); close(DMESG) or die "$!\n"; ==== und warum ist das besser?
Siehe oben.
Ich brauch nur eine Zeile, Du 3;
Also _das_ ist wirklich das dümmste "Argument", was ich bisher von dir gelesen habe. Aber bitte, sogar mit Fehlerbehandlung was du nicht machst: open(D,"dmesg|") or die; print grep( /READ|WRITE/, <D>); close(D) or die;
Perl gibt Speicher nicht wirklich wieder her, ich hab daher alles 'externalisiert' und der Speicher ist dann wieder frei..
Und _das_ ist das zweitdümmste "Argument". Perl verwendet intern den Speicher wieder.
Dies File kann sehr groß werden und das Programm soll quasi ewig laufen..
Dann kann man das anpassen. Aber du verrätst ja keine Details, wie die zu verarbeitende Ausgabe von dmesg aussieht, was du damit machen willst etc. [..]
if ( -s $f > 10 ) {
Wieso 10 Byte?
open F, "< $f" or warn "Can't open READ_File:$f< :$!\n";
Du liest aber trotzdem? *waaah*
Naja, lesen geht doch nicht und Perl erzeugt eine Fehlermeldung, aber dies Programm und seine Kinder laufen weiter, nur das hd-Aufwachdebugging funktioniert halt nicht. Klar, nicht schön, aber möglich und funktioniert.
Tolle Ansicht. Arbeitest du in Redmond?
foreach (<F>) { $show{READ}{"$1_$3"} = "$2 $3\t$1\n" if (/^(.+?): (.+?)(hda[23])[\n\r]*/) } close(F); }
Hier liest du die Datei, egal ob sie geöffnet werden konnte oder nicht. Was soll der Mist? [..]
*urgsl* Ich block da nicht durch, v.a. was du da eigentlich machen willst, daher nur "in grob". Ich will ja nur wissen welche Programme durch READ oder WRITE die hd aufgeweckt haben ergo brauch ich sie nur einmal und nicht jedesmal mit jedem Knötchen den sie gelesen oder geschrieben haben: Perls Hash.
S.o. Wie sieht die Ausgabe aus? Was willst du damit anstellen?
==== open(DMESG, "dmesg |") or die "$!\n"; while(<DMESG>) { next unless /READ|WRITE/; if (/(.+?):(.+?)(hda[23])[\n\r]*/) { print "hd: $2 $3\t$1\n"; } } close(DMESG) or die "$!\n"; ==== Puuhh, so bekam ich 100.000 Einträge vom pdflush und kjournald..
Ich hab dein Gewurstel nicht genauer analysiert und eben kein Hash verwendet um die Einträge zu "filtern". Aber das ist ja trivial zu beheben. Je nachdem was man machen will mit unterschiedlichen Varianten. Aber ich rate jetzt nicht weiter. -dnh -- Use strict! *WHAM* Strict, I tell you! And -w! *WHAM* *WHAM* *WHAM* -- Skud -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org