54 lines
1.2 KiB
C
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;
|
|
} |