"du" in C
Andre Landwehr
andre.landwehr at gmx.net
Fri Jul 12 16:34:01 CEST 2002
On Fri, Jul 12, 2002 at 02:55:39PM +0200, Florian Lohoff wrote:
> Festplatte ist dabei falsch - CDs und MOs haben teilweise 2048
> byte bloecke. Wie funktioniert das dann ? Man bekommt die blockgroesse
> des filesystems auch raus via ioctl(FIGETBSZ) auf den filedescriptor.
> ggfs. ist das allerdings root only.
Mehr oder weniger - man braucht Leserechte so wie ich das sehe.
Es bleibt die Frage, wie man da jetzt eine verläßliche Angabe
machen kann. Es gibt zwei Möglichkeiten:
a) entry->dusize = 512 * st_blocks; // (aus struct stat)
Wobei es keine Möglichkeit (zumindest für Normaluser) zu geben
scheint, die tatsächliche Blockgröße auf dem Datenträger
rauszufinden. Zumindest schlug ein ioctl(BLKSSZGET) fehl, so daß
ich nur 512 für alle nehmen kann. Es stellt sich außerdem die
Frage, ob die Blockgröße des Filesystems dabei in irgend einer
Weise berücksichtigt wird, denn AFAIK kann man ja nicht mehrere
Dateien in einen Filesystem-Block schreiben, oder?
b) if (ioctl (fd, FIGETBSZ, blksize) == 0) {
blocks = (buf->st_size % *blksize > 0) ? 1 : 0;
blocks += buf->st_size / *blksize;
entry->dusize = blocks * *blksize;
}
Basierend auf der Blockgröße des Filesystems die Zahl der belegten
Blöcke berechnen und mit der Blockgröße multiplizieren.
Solange es sich nicht um ein reiserfs ohne -notail
handelt, sollte da das richtige rauskommen, allerdings wundert
mich, daß der du Befehl offenbar Variante a) benutzt, wie ich
aus den Zahlenangaben schließe...
Kommentare?
Andre
--
"The inside of a computer is as dumb as hell, but it goes like mad!"
(Physicist Richard Feynman)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL: <http://lug-owl.de/pipermail/linux/attachments/20020712/17a3f0e8/attachment.sig>
More information about the Linux
mailing list