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.


Mihai


-- 
This message was scanned for spam and viruses by BitDefender.
For more information please visit http://www.bitdefender.com/


--- 
Detalii despre listele noastre de mail: http://www.lug.ro/


Raspunde prin e-mail lui