[SYS 2] Fichier creux

Voir le sujet précédent Voir le sujet suivant Aller en bas

[SYS 2] Fichier creux

Message  michaelvd le Lun 09 Juil 2012, 13:23

Bonjour,
J'ai du mal à comprendre pourquoi et comment(via les exercices du cours) on calcule la taille d'un fichier creux (provoqué par un lseek), alors que toute documentation stipule que quelque soit l'espace creux, ceci ne change pas la taille du fichier..

The lseek() function allows the file offset to be set beyond the end of the
file (but this does not change the size of the file). If data is later
written at this point, subsequent reads of the data in the gap (a "hole")
return null bytes ('\0') until data is actually written into the gap.

Merci, Bonne journée

michaelvd

Nombre de messages : 117
Age : 28
Prénom : Michaël
Statut : 2ième Réseaux/Télécom
Localisation : Bruxelles
Date d'inscription : 16/09/2009

http://www.binturong.be

Revenir en haut Aller en bas

Re: [SYS 2] Fichier creux

Message  galaeron le Lun 09 Juil 2012, 16:17

La taille du fichier stocké dans l'inode est la taille que devrait utilisé ton fichier sur ton disque.
Exemple :
Code:
int main(){
int h;
h=open(fichCreux,0222,O_WRONLY);
write(h,'a',1);
lseek(h,10000,SEEK_SET);
write(h,'b',1);
close(h);
}
(Bloc de 4ko ce qui signifie que l'on peut y écrire 4096 char.)
Le caractère 'a' s'écrit donc en première position, viens ensuite le lseek placant dans l'int de la tdfo (indiquant la position du curseur) 10000 et modifiant la taille du fichier dans l'inode (Notons que pour le moment on a juste été changé un int, pas d'allocation de blocs). Le write quant à lui nécéssitera que le SE fournissent un bloc libre afin d'y écrire le caractère 'b'.

Dans cet exemple on se rend bien compte que l'on utilise un bloc pour 'a' et un bloc pour 'b' mais aucun pour les 0 induits par le lseek. Permettant donc alors que la taille du fichier est 12ko de n'occuper que 8ko.

En espérant avoir été clair ...

galaeron

Nombre de messages : 113
Age : 28
Prénom : Arthur
Statut : 3IR12
Date d'inscription : 29/06/2011

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum