Alexander 'boesi' Bösecke wrote:
Am 22.04.2004 14:32:57 schrieb Georg Mischler:
Auch unter unix wird dir "ls" eine 1MB grosse Datei anzeigen. Mit "du" siehst du aber, dass sie physikalisch nur einen einzigen Block belegt (512-4096k, je nach Grösse des Dateisystems). Sobald du um unteren Bereich etwas reinschreibst, wird das Dateisystem die dazu notwendigen Blöcke ebenfalls allozieren.
Aber genau das tu ich ja mit dem file.write('.'). Das braeuchte ich dann also unter Unix gar nicht und ls wuerde trotzdem eine Groesse von 1MB anzeigen?
Solange du nichts schreibst, zeigt ls auch unter unix 0 bytes an. Wenn du irgendwo ein Zeichen reinschreibst, dann zeigt ls eine Grösse bis hinter der Position dieses Zeichens an. Mit du siehst du aber, dass nur ein kleiner Bruchteil davon wirklich belegt wird (auf meiner 18Gb reiser-Partition z.B. 6kb).
f = open('testfile', 'w') f.seek(1000000) f.write('.') f.close()
$> ls -l testfile -rw-r--r-- 1 gm users 1000001 2004-04-27 22:49 testfile $> du -k testfile 6 testfile Wenn ich anschliessend nochmal in der Mitte etwas reinschreibe, dann ändert sich die Grösse für ls nicht, du wird aber dann 12k anzeigen (nochmal 6k für einen zweiten Block).
Windows alloziert die Bloecke auch erst, wenn man etwas in die Datei schreibt, aber davor ist die Datei 0 Byte gross (also auch nach dem file.close()).
Ja klar, aber wieviele Blöcke werden dann alloziert? Nur einer oder gleich für die ganze Datei?
Dazu muss ich etwas weiter ausholen. Ich schreibe im Rahmen meiner Studienarbeit ein P2P-System. Ich hab eine zentrale Struktur aehnlich wie Napster gewaehlt - es gibt einen Server, Peers und Clients.
Eine Reimplmentation von BitTorrent? Schau doch mal, wie das dort gelöst ist. Zumindest unter unix wird da genau diese Eigenschaft des Dateisystems ausgenützt. -schorsch -- Georg Mischler -- simulations developer -- schorsch at schorsch com +schorsch.com+ -- lighting design tools -- http://www.schorsch.com/ _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de