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/


Raspunde prin e-mail lui