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();
Основные определения ядра
Согласно POSIX, один из них возвращается вызовом readdir.
Definition: vfs_new.h:77
uint8_t type
Тип файла
Definition: vfs_new.h:80
uint8_t next
Следующая позиция
Definition: vfs_new.h:81
char name[128]
Имя файла
Definition: vfs_new.h:78
uint32_t ino
Номер inode. Требеся для POSIX.
Definition: vfs_new.h:79
size_t length
Размер файла
Definition: vfs_new.h:82
getDeviceSize_type_t diskSpace
Сколько свободно места
Definition: vfs_new.h:67
read_type_t read
Функция FS - Чтение файла с указанием параметров
Definition: vfs_new.h:51
getLengthFile_type_t getOffsetFile
Функция FS - Функция для получения позиции файла (отступ)
Definition: vfs_new.h:61
struct fs_node * ptr
Используется для точек монтирования и символических ссылок.
Definition: vfs_new.h:70
dirlist_type_t getListElem
Функция FS - Функция для получения списка файлов
Definition: vfs_new.h:62
charintData_type_t getDevName
Функция для получения имени устройства
Definition: vfs_new.h:64
write_type_t write
Функция FS - Запись в файл
Definition: vfs_new.h:52
readChar_type_t readChar
Функция FS - Полное чтение файла
Definition: vfs_new.h:50
countElemFolder_type_t getCountElemFolder
Функция FS - Функция для получения количества файлов в папке
Definition: vfs_new.h:56
uint32_t uid
Пользователь, владеющий файлом.
Definition: vfs_new.h:44
open_type_t open
Функция FS - Функция для открытия файла (не исп)
Definition: vfs_new.h:53
getLengthFile_type_t getLengthFile
Функция FS - Функция для получения размера файла
Definition: vfs_new.h:60
getDeviceSize_type_t diskUsed
Сколько использовано места
Definition: vfs_new.h:66
uint32_t impl
Номер, зависящий от реализации.
Definition: vfs_new.h:49
uint32_t flags
Включает тип нода. Смотрите определение #defines, приведенное выше.
Definition: vfs_new.h:46
uint32_t inode
Зависит от устройства, позволяет файловой системе идентифицировать файлы.
Definition: vfs_new.h:47
findFile_type_t findDir
Функция FS - Функция для поиска файла
Definition: vfs_new.h:58
char name[128]
Имя файла.
Definition: vfs_new.h:40
list_type_t list
Список
Definition: vfs_new.h:69
uint32_t gid
Группа, владеющая файлом.
Definition: vfs_new.h:45
close_type_t close
Функция FS - Функция для закрытия файла (не исп)
Definition: vfs_new.h:54
char devName[512]
Имя устройства
Definition: vfs_new.h:65
findFile_type_t findFile
Функция FS - Функция для поиска файла
Definition: vfs_new.h:57
char path[512]
Полный путь
Definition: vfs_new.h:41
readdir_type_t readDir
Функция FS - Функция для чтение папки (не исп)
Definition: vfs_new.h:55
uint32_t mask
Маска прав доступа.
Definition: vfs_new.h:43
getDeviceSize_type_t diskSize
Размер диска
Definition: vfs_new.h:68
getFileInfo_type_t getFileInfo
Функция FS - Функция для получения информации о файле (не исп) (старое)
Definition: vfs_new.h:59
uint32_t length
Размер файла в байтах.
Definition: vfs_new.h:48
uint32_t root
Индекс папки
Definition: vfs_new.h:42