Mihai Maties <[EMAIL PROTECTED]> scria la data de 24 Iunie 2005:
> On Friday 24 June 2005 11:51, Mihai Maties wrote:
> > Ma intereseaza sa calculez spatiul (real) ocupat de un fisier si sa
> > obtin un rezultat similar cu cel de la rularea comenzii:
> >
> > du --block-size=1 /my/file
> > 8192 /my/file
> >
> > Daca folosesc "stat" am urmatorii parametri care m-ar ajuta:
> >
> > $size total size of file, in bytes
> > $blksize preferred block size for file system I/O
> > $blocks actual number of blocks allocated
> >
> > Exemplu: daca fisierul are 5556 bytes, valorile celor 3 variabile ar fi:
> >
> > $size = 5556
> > $blksize = 4096
> > $blocks = 16
> >
> > Cum obtin eu din aceste 3 valori rezultatul care ma intereseaza si
> > anume "8192" ?
> >
> > Eu vad 2 variante, dar nu am incredere in nici una din ele:
> >
> > 1. $rezultat = ceil($size / $blksize) * $blksize ? e OK formula asta
> > pe orice filesystem ?
> >
> > 2. $rezultat = $blocks * 512 ? e bine sa hardcodez marimea unui bloc
> > la 512 bytes ?
>
> Am aflat intre timp si raspunsul uitandu-ma in sursele de la "du". Am
> sa detaliez in continuare in caz ca mai intereseaza pe cineva:
>
> In functie de platforma, constanta ST_NBLOCKSIZE folosita la
> calcularea numarului de block-uri ocupat de un fisier are diferite
> valori:
>
> - pe HPUX e 1024 bytes
> - pe AIX PS/2 e 4096 bytes
> - in rest e 512 bytes
>
> In concluzie nu e tocmai recomandata hardcodarea valorii in "formula",
> dar tinand cont ca programul nu va rula pe una din platformele
> "deosebite" pot folosi fara grija formula: $blocks * 512.
man 2 stat -> st_blksize
perldoc -f stat -> blksize
Asta e insa doar teoria. Cat de bine merge in practica depinde de
OS si de tipul sistemului de fisiere.
Salutari,
Liviu Daia
--
Dr. Liviu Daia http://www.imar.ro/~daia
---
Detalii despre listele noastre de mail: http://www.lug.ro/