add: create disk
This commit is contained in:
parent
277cfd923d
commit
2b1fed1907
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
obj/*
|
obj/*
|
||||||
seyshell
|
seyshell
|
||||||
|
disk
|
||||||
3
Makefile
3
Makefile
@ -1,4 +1,5 @@
|
|||||||
NAME := seyshell
|
NAME := seyshell
|
||||||
|
DRIVE := disk
|
||||||
CC := gcc
|
CC := gcc
|
||||||
CFLAGS := -Wall -Wextra -Werror -g
|
CFLAGS := -Wall -Wextra -Werror -g
|
||||||
OBJ_DIR := obj
|
OBJ_DIR := obj
|
||||||
@ -20,7 +21,7 @@ clean:
|
|||||||
@rm -rf $(OBJ_DIR)
|
@rm -rf $(OBJ_DIR)
|
||||||
|
|
||||||
fclean: clean
|
fclean: clean
|
||||||
@rm -f $(NAME)
|
@rm -f $(NAME) $(DRIVE)
|
||||||
|
|
||||||
re: fclean all
|
re: fclean all
|
||||||
|
|
||||||
|
|||||||
12
src/const.h
12
src/const.h
@ -1,8 +1,10 @@
|
|||||||
#define BUFSIZE 1024
|
#define BUFSIZE 1024
|
||||||
#define MAX_BLOCS_PER_INODE 30
|
#define MAX_BLOCS 30
|
||||||
#define MAX_BYTES_PER_BLOC 1024
|
#define MAX_BYTES_PER_BLOC 1024
|
||||||
|
#define MAX_INODE 10
|
||||||
|
|
||||||
#define FILE 0
|
#define TYPE_NULL 0
|
||||||
#define BINARY 1
|
#define TYPE_FILE 1
|
||||||
#define DIRECTORY 2
|
#define TYPE_BINARY 2
|
||||||
#define SYMBOLIC_LINK 3
|
#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 "parsing.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -7,7 +8,15 @@ int main(int argc, char *argv[], char *envp[]) {
|
|||||||
(void)argv;
|
(void)argv;
|
||||||
(void)envp;
|
(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;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
14
src/struct.h
14
src/struct.h
@ -2,9 +2,9 @@
|
|||||||
#include "const.h"
|
#include "const.h"
|
||||||
|
|
||||||
typedef struct inode {
|
typedef struct inode {
|
||||||
char perms[8]; // rwxrwxrwx
|
unsigned short perms; // rwxrwxrwx
|
||||||
char filetype; // d, -, l
|
char filetype;
|
||||||
int blocs[MAX_BLOCS_PER_INODE];
|
int blocs[MAX_BLOCS];
|
||||||
} inode;
|
} inode;
|
||||||
|
|
||||||
typedef struct bloc {
|
typedef struct bloc {
|
||||||
@ -12,9 +12,9 @@ typedef struct bloc {
|
|||||||
} bloc;
|
} bloc;
|
||||||
|
|
||||||
typedef struct disk {
|
typedef struct disk {
|
||||||
inode inodes[10];
|
inode inodes[MAX_INODE];
|
||||||
bloc blocs[30];
|
bloc blocs[MAX_BLOCS];
|
||||||
} disk;
|
} disk;
|
||||||
|
|
||||||
// pour 10 inode qui a 30 blocs de chacun 1024 octets, on a 307200 octets, soit
|
// pour 10 inode qui a 30 blocs de chacun 1024 octets, on a 30720 octets, soit
|
||||||
// 307,2 Ko sur le disque
|
// 30,7 Ko sur le disque
|
||||||
Loading…
Reference in New Issue
Block a user