Hallo, Kyek, Andreas, VF-DE wrote:
#!/usr/bin/perl open OUT, ">>./xx.asc" or die; seek OUT, 2048, 0; $pos=tell OUT; print OUT "Auf pos. 2048\n"; $npos=tell OUT; close OUT; print "pos=$pos, npos=$npos\n";
Ergebnis: pos=2048, npos=921
Und das Ergebnisfile ist auch nur 921 Bytes gross!
Laut ls, oder wie? Mal cat oder od probiert?
Ergebnis: Der tell nach dem seek lügt!
Bezweifle ich immernoch.
Weiss ich, ich brauche ja eigentlich auch was anderes:
Ich überwache alle 10 Minuten n-Files, die sehr gross werden können. Um nun nicht jedesmal durch das ganze File laufen zu müssen, merke ich mir die letzten Lese- positionen. Leider wird "gegen Mitternacht" das File ins Archiv verschoben und ein neues File mit _gleichem_ Namen aufgemacht. Die erste Idee war daher, den seek auf die alte letzte Position zu versuchen und (im Fehlerfall, das das File ja nun kleiner ist) von einem neuen File auszugehen und von vorne zu lesen. Das funktionierte aber nicht (s.o.)
(mittlerweile mache ich ein "seek, 0,2" und ein "tell IN" und vergleiche das ermittelte Fileende mit der letzten bekannte Position. Aber der Grund für dieses seek Verhalten ist mir trotzdem unklar)
Der wurde ja schon erklärt. Wie wär's die inode-Nummer zu vergleichen? Eben nicht seek() zu nutzen, sondern fstat(), das auch andere hilfreiche Sachen liefert - Gesamtgröße oder ctime scheinen da ggf. interessant. Evtl. ist auch ein Blick in die Quellen von tail interesant - das merkt eine Dateiverkleinerung ja auch. Arno
Andreas
-- IT-Service Lehmann al@its-lehmann.de Arno Lehmann http://www.its-lehmann.de