add: create disk

This commit is contained in:
Guamss 2026-03-26 12:53:40 +01:00
parent 277cfd923d
commit 2b1fed1907
7 changed files with 76 additions and 15 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
obj/*
seyshell
disk

View File

@ -1,4 +1,5 @@
NAME := seyshell
DRIVE := disk
CC := gcc
CFLAGS := -Wall -Wextra -Werror -g
OBJ_DIR := obj
@ -20,7 +21,7 @@ clean:
@rm -rf $(OBJ_DIR)
fclean: clean
@rm -f $(NAME)
@rm -f $(NAME) $(DRIVE)
re: fclean all

View File

@ -1,8 +1,10 @@
#define BUFSIZE 1024
#define MAX_BLOCS_PER_INODE 30
#define MAX_BLOCS 30
#define MAX_BYTES_PER_BLOC 1024
#define MAX_INODE 10
#define FILE 0
#define BINARY 1
#define DIRECTORY 2
#define SYMBOLIC_LINK 3
#define TYPE_NULL 0
#define TYPE_FILE 1
#define TYPE_BINARY 2
#define TYPE_DIRECTORY 3
#define TYPE_SYMBOLIC_LINK 4

40
src/disk.c Normal file
View File

@ -0,0 +1,40 @@
#include "disk.h"
#include "struct.h"
#include <stdio.h>
#include <unistd.h>
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;
}
disk open_disk(char* filename) {
disk d;
FILE *fptr = fopen(filename, "r");
fread(&d, sizeof(d),1, fptr);
fclose(fptr);
return d;
}

8
src/disk.h Normal file
View File

@ -0,0 +1,8 @@
#pragma once
#include <stdio.h>
#include "const.h"
#include "struct.h"
disk create_disk();
disk open_disk(char* filename);

View File

@ -1,3 +1,4 @@
#include "disk.h"
#include "parsing.h"
#include <stdio.h>
#include <stdlib.h>
@ -7,7 +8,15 @@ int main(int argc, char *argv[], char *envp[]) {
(void)argv;
(void)envp;
shell_loop();
// shell_loop();
disk drive;
if (access("disk", F_OK) == 0)
drive = open_disk("disk");
else
drive = create_disk();
(void)drive;
return EXIT_SUCCESS;
}

View File

@ -2,9 +2,9 @@
#include "const.h"
typedef struct inode {
char perms[8]; // rwxrwxrwx
char filetype; // d, -, l
int blocs[MAX_BLOCS_PER_INODE];
unsigned short perms; // rwxrwxrwx
char filetype;
int blocs[MAX_BLOCS];
} inode;
typedef struct bloc {
@ -12,9 +12,9 @@ typedef struct bloc {
} bloc;
typedef struct disk {
inode inodes[10];
bloc blocs[30];
inode inodes[MAX_INODE];
bloc blocs[MAX_BLOCS];
} disk;
// pour 10 inode qui a 30 blocs de chacun 1024 octets, on a 307200 octets, soit
// 307,2 Ko sur le disque
// pour 10 inode qui a 30 blocs de chacun 1024 octets, on a 30720 octets, soit
// 30,7 Ko sur le disque