SayoriOS 0.3.3

vfs_new.h
1 #pragma once
2
3 #include "common.h"
4
5 #define FS_FILE 0x00
6 #define FS_DIRECTORY 0x01
7 #define FS_INVALID 0x02
8 #define FS_CHARDEVICE 0x03
9 #define FS_BLOCKDEVICE 0x04
10 #define FS_PIPE 0x05
11 #define FS_SYMLINK 0x06
12 #define FS_MOUNTPOINT 0x08
13
14 #define VFS_TYPE_MOUNT_SEFS 0x0000
15 #define VFS_TYPE_MOUNT_NATSUKI 0xCAFE
16
17 typedef char* (*readChar_type_t)(uint32_t);
18 typedef uint32_t (*read_type_t)(uint32_t,size_t,size_t,void *);
19 typedef struct dirent* (*list_type_t)(const char* path);
20 typedef uint32_t (*write_type_t)(uint32_t,size_t,size_t,const void *);
21 typedef int32_t (*findFile_type_t)(const char*);
22 typedef uint32_t (*countElemFolder_type_t)(char*);
23 typedef char* (*charData_type_t)(char*);
24 typedef char* (*charintData_type_t)(int);
25 typedef size_t (*getLengthFile_type_t)(int);
26 typedef int (*getOffsetFile_type_t)(int);
27 typedef size_t (*getDeviceSize_type_t)(int);
28 typedef struct dirent* (*dirlist_type_t)(const char*);
29 typedef struct fs_node (*getFileInfo_type_t)(struct fs_node*,char*);
30 typedef void (*open_type_t)(struct fs_node*);
31 typedef void (*close_type_t)(struct fs_node*);
32
33 typedef struct dirent * (*readdir_type_t)(struct fs_node*, uint32_t);
34 typedef struct fs_node * (*finddir_type_t)(struct fs_node*,char *name);
35
36 typedef void (*dirfree_type_t)(struct dirent*);
37
38 typedef struct fs_node
39 {
40 char name[128];
41 char path[512];
42 uint32_t root;
43 uint32_t mask;
44 uint32_t uid;
45 uint32_t gid;
46 uint32_t flags;
47 uint32_t inode;
48 uint32_t length;
49 uint32_t impl;
50 readChar_type_t readChar;
51 read_type_t read;
52 write_type_t write;
53 open_type_t open;
54 close_type_t close;
55 readdir_type_t readDir;
56 countElemFolder_type_t getCountElemFolder;
57 findFile_type_t findFile;
58 findFile_type_t findDir;
59 getFileInfo_type_t getFileInfo;
60 getLengthFile_type_t getLengthFile;
61 getLengthFile_type_t getOffsetFile;
62 dirlist_type_t getListElem;
63 dirfree_type_t unlistElem;
64 charintData_type_t getDevName;
65 char devName[512];
66 getDeviceSize_type_t diskUsed;
67 getDeviceSize_type_t diskSpace;
68 getDeviceSize_type_t diskSize;
69 list_type_t list;
70 struct fs_node *ptr;
71 } fs_node_t;
72
76 struct dirent
77 {
78 char name[128];
79 uint32_t ino;
80 uint8_t type;
81 uint8_t next;
82 size_t length;
83 };
84
85 extern fs_node_t *fs_root; // The root of the filesystem.
86
87 // Стандартные функции чтения, записи, открытия, закрытия. Обратите внимание,
88 // что у них всех используется суффикс _fs с тем, чтобы отличать от функций чтения,
89 // записи, открытия и закрытия дескрипторов файлов, а не нодов файлов.
90 // uint32_t read_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer);
91 // uint32_t write_fs(fs_node_t *node, uint32_t offset, uint32_t size, uint8_t *buffer);
92 // void open_fs(fs_node_t *node, uint8_t read, uint8_t write);
93 // void close_fs(fs_node_t *node);
94 // struct dirent *readdir_fs(fs_node_t *node, uint32_t index);
95 // fs_node_t *finddir_fs(fs_node_t *node, char *name);
96
97 void vfs_getPath(int node, const char* path, char* buf);
98 int vfs_foundMount(const char* path);
99 void vfs_reg(size_t location, size_t end, size_t type);
100 int vfs_write(int node, int elem, size_t offset, size_t size, const void *buf);
101 int vfs_findFile(const char* filename);
102 bool vfs_exists(const char* filename);
103 int vfs_read(int node, int elem, size_t offset, size_t size, void *buf);
104 char* vfs_readChar(int node,int elem);
105 size_t vfs_findDir(char* path);
106 ssize_t vfs_getLengthFilePath(const char* filename);
107 size_t vfs_getLengthFile(int node,int elem);
108 int vfs_getOffsetFile(int node,int elem);
109 size_t vfs_getDiskSize(int node);
110 size_t vfs_getDiskSpace(int node);
111 size_t vfs_getDiskUsed(int node);
112 char* vfs_getName(int node);
113 size_t vfs_getCountElemDir(char* path);
114 struct dirent* vfs_getListFolder(char* path);
115 void vfs_createFile();
116 void vfs_createDir();
117 void vfs_list();
118 void vfs_deleteFile();
119 void vfs_getType();
120 void vfs_getMountPoint();
common.h
Основные определения ядра
dirent
Согласно POSIX, один из них возвращается вызовом readdir.
Definition: vfs_new.h:77
dirent::type
uint8_t type
Тип файла
Definition: vfs_new.h:80
dirent::next
uint8_t next
Следующая позиция
Definition: vfs_new.h:81
dirent::name
char name[128]
Имя файла
Definition: vfs_new.h:78
dirent::ino
uint32_t ino
Номер inode. Требеся для POSIX.
Definition: vfs_new.h:79
dirent::length
size_t length
Размер файла
Definition: vfs_new.h:82
fs_node
Definition: vfs_new.h:39
fs_node::diskSpace
getDeviceSize_type_t diskSpace
Сколько свободно места
Definition: vfs_new.h:67
fs_node::read
read_type_t read
Функция FS - Чтение файла с указанием параметров
Definition: vfs_new.h:51
fs_node::getOffsetFile
getLengthFile_type_t getOffsetFile
Функция FS - Функция для получения позиции файла (отступ)
Definition: vfs_new.h:61
fs_node::ptr
struct fs_node * ptr
Используется для точек монтирования и символических ссылок.
Definition: vfs_new.h:70
fs_node::getListElem
dirlist_type_t getListElem
Функция FS - Функция для получения списка файлов
Definition: vfs_new.h:62
fs_node::getDevName
charintData_type_t getDevName
Функция для получения имени устройства
Definition: vfs_new.h:64
fs_node::write
write_type_t write
Функция FS - Запись в файл
Definition: vfs_new.h:52
fs_node::readChar
readChar_type_t readChar
Функция FS - Полное чтение файла
Definition: vfs_new.h:50
fs_node::getCountElemFolder
countElemFolder_type_t getCountElemFolder
Функция FS - Функция для получения количества файлов в папке
Definition: vfs_new.h:56
fs_node::uid
uint32_t uid
Пользователь, владеющий файлом.
Definition: vfs_new.h:44
fs_node::open
open_type_t open
Функция FS - Функция для открытия файла (не исп)
Definition: vfs_new.h:53
fs_node::getLengthFile
getLengthFile_type_t getLengthFile
Функция FS - Функция для получения размера файла
Definition: vfs_new.h:60
fs_node::diskUsed
getDeviceSize_type_t diskUsed
Сколько использовано места
Definition: vfs_new.h:66
fs_node::impl
uint32_t impl
Номер, зависящий от реализации.
Definition: vfs_new.h:49
fs_node::flags
uint32_t flags
Включает тип нода. Смотрите определение #defines, приведенное выше.
Definition: vfs_new.h:46
fs_node::inode
uint32_t inode
Зависит от устройства, позволяет файловой системе идентифицировать файлы.
Definition: vfs_new.h:47
fs_node::findDir
findFile_type_t findDir
Функция FS - Функция для поиска файла
Definition: vfs_new.h:58
fs_node::name
char name[128]
Имя файла.
Definition: vfs_new.h:40
fs_node::list
list_type_t list
Список
Definition: vfs_new.h:69
fs_node::gid
uint32_t gid
Группа, владеющая файлом.
Definition: vfs_new.h:45
fs_node::close
close_type_t close
Функция FS - Функция для закрытия файла (не исп)
Definition: vfs_new.h:54
fs_node::devName
char devName[512]
Имя устройства
Definition: vfs_new.h:65
fs_node::findFile
findFile_type_t findFile
Функция FS - Функция для поиска файла
Definition: vfs_new.h:57
fs_node::path
char path[512]
Полный путь
Definition: vfs_new.h:41
fs_node::readDir
readdir_type_t readDir
Функция FS - Функция для чтение папки (не исп)
Definition: vfs_new.h:55
fs_node::mask
uint32_t mask
Маска прав доступа.
Definition: vfs_new.h:43
fs_node::diskSize
getDeviceSize_type_t diskSize
Размер диска
Definition: vfs_new.h:68
fs_node::getFileInfo
getFileInfo_type_t getFileInfo
Функция FS - Функция для получения информации о файле (не исп) (старое)
Definition: vfs_new.h:59
fs_node::length
uint32_t length
Размер файла в байтах.
Definition: vfs_new.h:48
fs_node::root
uint32_t root
Индекс папки
Definition: vfs_new.h:42