FreeNOS
FileSystemClient.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2020 Niek Linnenbank
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __LIB_LIBFS_FILESYSTEMCLIENT_H
19#define __LIB_LIBFS_FILESYSTEMCLIENT_H
20
21#include <FreeNOS/API/ProcessID.h>
22#include <Types.h>
23#include <Memory.h>
24#include "FileSystem.h"
26
28
43{
44 private:
45
47 static const Size MaximumFileSystemMounts = 16;
48
49 public:
50
57 FileSystemClient(const ProcessID pid = ANY);
58
64 const String * getCurrentDirectory() const;
65
71 void setCurrentDirectory(const String &directory);
72
81 void setCurrentDirectory(String *directory);
82
92 FileSystem::Result createFile(const char *path,
94 const FileSystem::FileModes mode) const;
95
104 FileSystem::Result statFile(const char *path,
105 FileSystem::FileStat *st) const;
106
115 FileSystem::Result openFile(const char *path,
116 Size & descriptor) const;
117
125 FileSystem::Result closeFile(const Size descriptor) const;
126
136 FileSystem::Result readFile(const Size descriptor,
137 void *buf,
138 Size *size) const;
139
149 FileSystem::Result writeFile(const Size descriptor,
150 const void *buf,
151 Size *size) const;
152
160 FileSystem::Result deleteFile(const char *path) const;
161
172 FileSystem::Result waitFile(const char *filesystemPath,
173 const FileSystem::WaitSet *waitSet,
174 const Size count,
175 const Size msecTimeout) const;
176
184 FileSystem::Result mountFileSystem(const char *mountPath) const;
185
195 FileSystem::Result waitFileSystem(const char *path) const;
196
204 FileSystemMount * getFileSystems(Size &numberOfMounts) const;
205
206 private:
207
216 FileSystem::Result request(const char *path, FileSystemMessage &msg) const;
217
227
235 ProcessID findMount(const char *path) const;
236
237 private:
238
241
244
247};
248
254#endif /* __LIB_LIBFS_FILESYSTEMCLIENT_H */
u8 type
Definition IntelACPI.h:0
FileSystemClient provides a simple interface to a FileSystemServer.
FileSystem::Result closeFile(const Size descriptor) const
Close a file.
FileSystem::Result writeFile(const Size descriptor, const void *buf, Size *size) const
Write a file.
const ProcessID m_pid
ProcessID of the target file system or ANY to lookup in mounts table.
FileSystem::Result request(const char *path, FileSystemMessage &msg) const
Send an IPC request to the target file system.
static String * m_currentDirectory
Current directory path is prefixed to relative path inputs.
const String * getCurrentDirectory() const
Get current directory String.
FileSystem::Result waitFile(const char *filesystemPath, const FileSystem::WaitSet *waitSet, const Size count, const Size msecTimeout) const
Wait for one or more files to become readable/writable.
FileSystem::Result statFile(const char *path, FileSystem::FileStat *st) const
Retrieve status of a file.
FileSystem::Result waitFileSystem(const char *path) const
Blocking wait for a mounted filesystem.
FileSystem::Result readFile(const Size descriptor, void *buf, Size *size) const
Read a file.
static const Size MaximumFileSystemMounts
Maximum number of mounted filesystems.
void setCurrentDirectory(const String &directory)
Set new current directory.
FileSystem::Result mountFileSystem(const char *mountPath) const
Mount the current process as a file system on the rootfs.
FileSystem::Result deleteFile(const char *path) const
Remove a file from the file system.
FileSystem::Result createFile(const char *path, const FileSystem::FileType type, const FileSystem::FileModes mode) const
Create a new file.
FileSystem::Result openFile(const char *path, Size &descriptor) const
Open a file.
ProcessID findMount(const char *path) const
Retrieve the ProcessID of the FileSystemMount for the given path.
static FileSystemMount m_mounts[MaximumFileSystemMounts]
FileSystem mounts table.
FileSystemMount * getFileSystems(Size &numberOfMounts) const
Get file system mounts table.
Abstraction of strings.
Definition String.h:42
#define ANY
Definition ProcessID.h:34
u32 ProcessID
Process Identification Number.
Definition Types.h:140
unsigned int Size
Any sane size indicator cannot go negative.
Definition Types.h:128
FileType
All possible filetypes.
Definition FileSystem.h:71
Result
Result code for filesystem Actions.
Definition FileSystem.h:53
u16 FileModes
Multiple FileMode values combined.
Definition FileSystem.h:108
FileSystem IPC message.
Represents a mounted filesystem.
Contains file information.
Definition FileSystem.h:114
Provides information about an inode.
Definition FileSystem.h:128