Forum Linux.général taille de mon ficher fait 7 octets mais il prend en mémoire 8 blocks de 4096 octets

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
3
21
juin
2019

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  . Évalué à 7.

    marc@gigabyte:/var/tmp$ stat toto 
      Fichier : toto
       Taille : 6          Blocs : 8          Blocs d'E/S : 4096   fichier
    Périphérique : 805h/2053d    Inœud : 655995      Liens : 1
    Accès : (0644/-rw-r--r--)  UID : ( 1000/    marc)   GID : ( 1000/    marc)
    Accès : 2019-06-21 14:41:48.561523374 +0200
    Modif. : 2019-06-21 14:41:48.561523374 +0200
    Changt : 2019-06-21 14:41:48.561523374 +0200
      Créé : -
    
    • l'unité d'allocation est le bloc ; souvent 4096 octets. il n'est pas possible d'allouer moins sur une grande partie des FS Linux, sauf usage spécifique(embarque).
    • tu aura les infos en faisant man stat ou fstat.
  • # Pour étoffer la réponse de Marc Quinton...

    Posté par  . Évalué à 5. Dernière modification le 21/06/19 à 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 disque un volume une 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  . Évalué à 7. Dernière modification le 21/06/19 à 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  . É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

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.