add: create disk
This commit is contained in:
parent
277cfd923d
commit
2b1fed1907
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,3 @@
|
||||
obj/*
|
||||
seyshell
|
||||
seyshell
|
||||
disk
|
||||
3
Makefile
3
Makefile
@ -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
|
||||
|
||||
|
||||
12
src/const.h
12
src/const.h
@ -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
40
src/disk.c
Normal 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
8
src/disk.h
Normal file
@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdio.h>
|
||||
#include "const.h"
|
||||
#include "struct.h"
|
||||
|
||||
disk create_disk();
|
||||
disk open_disk(char* filename);
|
||||
11
src/main.c
11
src/main.c
@ -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;
|
||||
}
|
||||
14
src/struct.h
14
src/struct.h
@ -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
|
||||
Loading…
Reference in New Issue
Block a user