Bonjour à tous,
voila j'ai utilisé la fonction fstat et je remarque que la taille de mon fichier ou j'ai écrit "coucou" est étrange.
voici mon code :
int main(int argc, char const *argv[])
{
int fd;
struct stat statbuff;
fd = open("coco.txt", O_RDONLY);
fstat( fd, &statbuff) ;
fprintf(stdout, "size of file = %i\n", (int)statbuff.st_size);
fprintf(stdout, "st_blocks = %i\n", (int)statbuff.st_blocks);
fprintf(stdout, "st_blksize = %i\n", (int)statbuff.st_blksize);
return 0;
}
et le terminal me retourne
size of file = 7
st_blocks = 8
st_blksize = 4096
je suis étonné qu'il me dise que la taille du fichier est de 7 octets (ce qui est logique avec ce que j'ai écrit dans le fichier coco.txt) mais que ce fichier prend comme place sur le disque dur 8*4096 octets
Merci d'avance pour vos éclaircissements
# pareil ici
Posté par Marc Quinton . Évalué à 7.
# Pour étoffer la réponse de Marc Quinton...
Posté par FantastIX . Évalué à 5. Dernière modification le 21 juin 2019 à 16:25.
Pour stocker un fichier sur un disque, il faut un système de fichiers. Ce dernier met en œuvre une manière d'enregistrer les données sur le disque (dur, amovible, non volatile), plus exactement au sein d'une partition (ou d'un volume) formatée avec ce système de fichiers. Cependant il s'accompagne d'un compromis, c-à-d entre la taille minimale d'un fichier et le nombre maximal de fichiers sur le disque (entre autres).
Sans entrer dans les détails, plus
un disqueun volumeune partition est large, plus la taille du plus petit fichier est grande. L'espace minimal occupé par le plus petit fichier dans le système de fichiers est égal à la taille d'un bloc, celle-ci étant définie par le système de fichiers lors du formatage.Ceci étant dit, la plupart des systèmes de fichiers sous Linux (ext2, ext3, ext4, xfs, jfs…) permettent un réglage fin de leurs paramètres. Mais ça c'est une autre histoire que je laisse aux experts ;-) .
[^] # Re: Pour étoffer la réponse de Marc Quinton...
Posté par FantastIX . Évalué à 7. Dernière modification le 21 juin 2019 à 16:56.
Et je me rends compte qu'en voulant être informatif, j'ai ajouté une confusion…
Si la taille d'un bloc sur disque est fixée au formatage, la question se pose «pourquoi mon fichier fait 8 blocs de 4Ko?»
La taille d'un bloc est bien définie au formatage d'une partition. Si les résultats de la fonction fstat() prêtent à confusion, c'est parce que les champs st_blocks et st_blksize à eux seuls définissent la taille minimale de l'espace d'allocation. C'est donc st_blocks * st_blksize qu'il faut considérer, ensemble et non individuellement.
Le site Stackoverflow (en anglais) offre une réponse détaillée, pour les curieux.
# blocs du système de fichiers ou blocs de 512 octet
Posté par flavien75 . Évalué à 7.
Le test donne le même résultat chez moi, ce qui est normal.
Par contre en consultant la manpage de fstat, on voit que st_blocks est le nombre de blocs de 512 octets tandis que st_blksize est le nombre d'octets dans un bloc du système de fichiers.
Donc le fichier occupe forcément un nombre entier de blocs de 4096 octets, ce qui nous fait 8*512.
CQFD
Les vrais naviguent en -42
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.