extFS-Seyshell/src/disk.c
2026-03-27 17:20:28 +01:00

54 lines
1.2 KiB
C

#include "disk.h"
#include "struct.h"
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/**
* Créer un fichier "disk" de taille MAX_BYTES_PER_BLOC * MAX_BLOCS, renvoi ce
* disque
* @return Le disque créé
*/
disk create_disk() {
FILE *fptr;
fptr = fopen("disk", "wb");
disk d;
for (int i = 0; i < MAX_INODE; i++) {
d.inodes[i].filetype = TYPE_NULL;
d.inodes[i].perms = 0b000000000;
for (int j = 0; j < MAX_BLOCS; j++) {
d.inodes[i].blocs[j] = -1;
}
}
// création de la racine '/'
d.inodes[0].filetype = TYPE_DIRECTORY;
d.inodes[0].perms = 0b111111111; // tlm fait ce qu'il veut
d.inodes[0].blocs[0] = 0; // utilise le bloc 0
int n = fwrite(&d, sizeof(disk), 1, fptr);
if (n == 1) {
dprintf(STDOUT_FILENO, "Disk of size %.2fKb created successfully.\n",
(float)(MAX_BYTES_PER_BLOC * MAX_BLOCS) / 1000);
}
fclose(fptr);
return d;
}
/**
* Si un fichier filename existe, alors on le lit et le stocke en mémoire
* @param char *filename Le nom du fichier à lire
* @return Le disque lu
*/
disk open_disk(char *filename) {
disk d;
FILE *fptr = fopen(filename, "r");
if (fptr == NULL)
exit(EXIT_FAILURE);
fread(&d, sizeof(d), 1, fptr);
fclose(fptr);
return d;
}