This repository has been archived on 2023-09-28. You can view files and clone it, but cannot push or open issues or pull requests.
homepage/content/projects/noxos/docs/codebase/proc/file_descriptor.h.md

53 lines
2.9 KiB
Markdown
Raw Normal View History

---
title: "file_descriptor.h"
summary: "Processes have no direct access to the VFS, instead they have file descriptors"
---
File descriptors are numbers that represent files.
They are mostly used in file related syscalls.
# `FILE_DESCRIPTOR_ARRAY_CHUNK_SIZE` - macro
The amount of file descriptors a `file_descriptor_array_chunk_T` (reference needed) can hold.
# `file_descriptor_t` - typedef
This is a typedef of `ìnt32_t` and represents a file descriptor.
# `std_file_descriptors_E` - enum
These are reserved file descriptors.
* `FILE_DESCRIPTOR_INVALID` - This represents an invalid file descriptor, just like NULL is an invalid pointer.
# `file_descriptor_array_chunk_T` - struct
| Name | Type | Description |
|--------|------------------------------------------------|----------------------------------------------------------------------------------------|
| prev | file_descriptor_array_chunk_T* | The previous chunk |
| next | file_descriptor_array_chunk_T* | The next chunk |
| lookup | vfs_node_T* [FILE_DESCRIPTOR_ARRAY_CHUNK_SIZE] | The array of file pointers, that the file descriptors reference |
| bitmap | bitmap_T | This bitmap indicates which file descriptors of this chunk are free nad which are used |
| amount | uint32_t | The amount of file descriptors which the chunk actually holds |
# `file_descriptor_array_T` - struct
| Name | Type | Description |
|------------|--------------------------------|------------------------------|
| base_chunk | file_descriptor_array_chunk_T* | The first chunk in the array |
# `file_descriptor_request(fd_array, node)` - function (file_descriptor_t)
Requests and returns new file descriptor, which will be linked with _**node**_.
# `file_descriptor_resolve(fd_array, fd)` - function (vfs_node_T*)
Returns the VFS node, with which _**fd**_ is linked.
# `file_descriptor_free(fd_array, fd)` - function (void)
Frees _**fd**_ and marks it as reclaimable.
# `file_descriptor_array_alloc()` - function (file_descriptor_array_T*)
Allocates a new chunked file descriptor array.
# `file_descriptor_array_destruct(fd_array)` - function (void)
Destructs _**fd_array**_ and all its resources, like e.g. chunks.
# `file_descriptor_array_chunk_alloc(prev)` - function (file_descriptor_array_chunk_T*)
Allocates a new chunk for a file descriptor array.
_**prev**_ has to be the last chunk of an array or NULL when the chunk is the base chunk for a fresh file descriptor array.
# `file_descriptor_array_chunk_destruct(chunk)` - function (void)
Destructs _**chunk**_ and all its resources.