"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