PatchworkOS
Loading...
Searching...
No Matches
io.h
Go to the documentation of this file.
1#ifndef _SYS_IO_H
2#define _SYS_IO_H 1
3
4#include <stdarg.h>
5#include <stdint.h>
6
7#if defined(__cplusplus)
8extern "C"
9{
10#endif
11
12#include "_internal/ERR.h"
13#include "_internal/MAX_NAME.h"
14#include "_internal/MAX_PATH.h"
15#include "_internal/NULL.h"
16#include "_internal/SEEK.h"
17#include "_internal/clock_t.h"
18#include "_internal/config.h"
19#include "_internal/fd_t.h"
20#include "_internal/time_t.h"
21
44#define STDIN_FILENO 0
45#define STDOUT_FILENO 1
46#define STDERR_FILENO 2
47
55#define PIPE_READ 0
63#define PIPE_WRITE 1
64
73fd_t open(const char* path);
74
85fd_t openf(const char* _RESTRICT format, ...);
86
94fd_t vopenf(const char* _RESTRICT format, va_list args);
95
111uint64_t open2(const char* path, fd_t fd[2]);
112
120
131
141uint64_t readf(fd_t fd, const char* _RESTRICT format, ...);
142
152uint64_t vreadf(fd_t fd, const char* _RESTRICT format, va_list args);
153
162uint64_t write(fd_t fd, const void* buffer, uint64_t count);
163
172uint64_t writef(fd_t fd, const char* _RESTRICT format, ...);
173
182uint64_t vwritef(fd_t fd, const char* _RESTRICT format, va_list args);
183
195uint64_t readfile(const char* path, void* buffer, uint64_t count, uint64_t offset);
196
207uint64_t readfilef(const char* path, const char* _RESTRICT format, ...);
208
219uint64_t vreadfilef(const char* path, const char* _RESTRICT format, va_list args);
220
232uint64_t writefile(const char* path, const void* buffer, uint64_t count, uint64_t offset);
233
244uint64_t writefilef(const char* path, const char* _RESTRICT format, ...);
245
256uint64_t vwritefilef(const char* path, const char* _RESTRICT format, va_list args);
257
263
273uint64_t seek(fd_t fd, int64_t offset, seek_origin_t origin);
274
281uint64_t chdir(const char* path);
282
287typedef enum
288{
290 POLLIN = (1 << 0),
291 POLLOUT = (1 << 1),
292 POLLERR = (1 << 2),
293 POLLHUP = (1 << 3),
294 POLLNVAL = (1 << 4),
296
300#define POLL_SPECIAL (POLLERR | POLLHUP | POLLNVAL)
301
312
323uint64_t poll(pollfd_t* fds, uint64_t amount, clock_t timeout);
324
337poll_events_t poll1(fd_t fd, poll_events_t events, clock_t timeout);
338
343typedef enum
344{
348
354
373
374#ifdef static_assert
375static_assert(sizeof(stat_t) == 168, "invalid stat_t size");
376#endif
377
385uint64_t stat(const char* path, stat_t* stat);
386
400uint64_t ioctl(fd_t fd, uint64_t request, void* argp, uint64_t size);
401
408fd_t dup(fd_t oldFd);
409
417fd_t dup2(fd_t oldFd, fd_t newFd);
418
423typedef struct
424{
427 char name[MAX_PATH];
428} dirent_t;
429
440
447uint64_t mkdir(const char* path);
448
455uint64_t rmdir(const char* path);
456
464uint64_t link(const char* oldPath, const char* newPath);
465
472uint64_t unlink(const char* path);
473
481uint64_t removef(const char* format, ...);
482
490uint64_t vremovef(const char* format, va_list args);
491
495#define KEY_SIZE 16
496
502typedef struct
503{
505} key_t;
506
517uint64_t share(key_t* key, fd_t fd, clock_t timeout);
518
527fd_t claim(key_t* key);
528
536uint64_t bind(fd_t source, const char* mountpoint);
537
538#if defined(__cplusplus)
539}
540#endif
541
542#endif
543
#define MAX_NAME
Maximum length of names.
Definition MAX_NAME.h:11
#define MAX_PATH
Maximum length of filepaths.
Definition MAX_PATH.h:11
fd_t dup2(fd_t oldFd, fd_t newFd)
System call for duplicating file descriptors, with a destination.
Definition dup2.c:9
uint64_t stat(const char *path, stat_t *stat)
System call for retrieving info about a file or directory.
Definition stat.c:9
uint64_t writef(fd_t fd, const char *_RESTRICT format,...)
Wrapper for writing a formatted string to a file.
Definition writef.c:9
uint64_t getdents(fd_t fd, dirent_t *buffer, uint64_t count)
System call for reading directory entires.
Definition getdents.c:9
#define KEY_SIZE
Size of keys in bytes.
Definition io.h:495
uint64_t readf(fd_t fd, const char *_RESTRICT format,...)
Wrapper for reading a formatted string from a file.
Definition readf.c:6
fd_t open(const char *path)
System call for opening files.
Definition open.c:9
inode_type_t
Inode type enum.
Definition io.h:344
uint64_t vreadfilef(const char *path, const char *_RESTRICT format, va_list args)
Wrapper for reading a formatted string from a file directly using a path with a va_list.
Definition vreadfilef.c:3
fd_t claim(key_t *key)
System call for claiming a shared file descriptor.
Definition claim.c:6
poll_events_t poll1(fd_t fd, poll_events_t events, clock_t timeout)
Wrapper for polling one file.
Definition poll1.c:9
uint64_t inode_number_t
Inode number enum.
Definition io.h:353
uint64_t close(fd_t fd)
System call for closing files.
Definition close.c:9
uint64_t seek(fd_t fd, int64_t offset, seek_origin_t origin)
System call for changing the file offset.
Definition seek.c:9
uint64_t ioctl(fd_t fd, uint64_t request, void *argp, uint64_t size)
System call for extended driver behaviour.
Definition ioctl.c:9
uint64_t vwritef(fd_t fd, const char *_RESTRICT format, va_list args)
Wrapper for writing a formatted string to a file with a va_list.
Definition vwritef.c:6
fd_t dup(fd_t oldFd)
System call for duplicating file descriptors.
Definition dup.c:9
fd_t vopenf(const char *_RESTRICT format, va_list args)
Wrapper for opening files with a formatted path, using a va_list.
Definition vopenf.c:9
uint64_t mkdir(const char *path)
Wrapper for creating a directory.
Definition mkdir.c:10
uint64_t readfile(const char *path, void *buffer, uint64_t count, uint64_t offset)
Wrapper for reading a file directly using a path.
Definition readfile.c:3
uint64_t poll(pollfd_t *fds, uint64_t amount, clock_t timeout)
System call for polling files.
Definition poll.c:9
fd_t openf(const char *_RESTRICT format,...)
Wrapper for opening files with a formatted path.
Definition openf.c:9
uint64_t removef(const char *format,...)
Wrapper for removing a file with a formatted path.
Definition removef.c:3
uint64_t chdir(const char *path)
System call for changing the cwd.
Definition chdir.c:9
uint64_t unlink(const char *path)
Wrapper for removing a file.
Definition unlink.c:5
uint64_t bind(fd_t source, const char *mountpoint)
System call for binding a file descriptor to a mountpoint.
Definition bind.c:5
uint64_t vreadf(fd_t fd, const char *_RESTRICT format, va_list args)
Wrapper for reading a formatted string from a file with a va_list.
Definition vreadf.c:6
uint64_t vwritefilef(const char *path, const char *_RESTRICT format, va_list args)
Wrapper for writing a formatted string to a file directly using a path with a va_list.
Definition vwritefilef.c:3
uint8_t seek_origin_t
Type for the seek() origin argument.
Definition io.h:262
uint64_t read(fd_t fd, void *buffer, uint64_t count)
System call for reading from files.
Definition read.c:9
poll_events_t
Poll events type.
Definition io.h:288
uint64_t open2(const char *path, fd_t fd[2])
System call for opening 2 file descriptors from one file.
Definition open2.c:9
uint64_t writefilef(const char *path, const char *_RESTRICT format,...)
Wrapper for writing a formatted string to a file directly using a path.
Definition writefilef.c:3
uint64_t vremovef(const char *format, va_list args)
Wrapper for removing a file with a formatted path, using a va_list.
Definition vremovef.c:8
uint64_t share(key_t *key, fd_t fd, clock_t timeout)
System call for sharing a file descriptor with another process.
Definition share.c:6
uint64_t write(fd_t fd, const void *buffer, uint64_t count)
System call for writing to files.
Definition write.c:9
uint64_t readfilef(const char *path, const char *_RESTRICT format,...)
Wrapper for reading a formatted string from a file directly using a path.
Definition readfilef.c:3
uint64_t rmdir(const char *path)
Wrapper for removing a directory.
Definition rmdir.c:5
uint64_t link(const char *oldPath, const char *newPath)
System call for creating a hardlink.
Definition link.c:9
uint64_t writefile(const char *path, const void *buffer, uint64_t count, uint64_t offset)
Wrapper for writing a file directly using a path.
Definition writefile.c:3
@ INODE_FILE
Is a file.
Definition io.h:345
@ INODE_DIR
Is a directory.
Definition io.h:346
@ POLLIN
File descriptor is ready to read.
Definition io.h:290
@ POLLNONE
None.
Definition io.h:289
@ POLLHUP
Stream socket peer closed connection, or shut down writing of connection.
Definition io.h:293
@ POLLNVAL
Invalid file descriptor.
Definition io.h:294
@ POLLOUT
File descriptor is ready to write.
Definition io.h:291
@ POLLERR
File descriptor caused an error.
Definition io.h:292
__UINT64_TYPE__ fd_t
A file descriptor.
Definition fd_t.h:12
__UINT64_TYPE__ clock_t
A nanosecond time.
Definition clock_t.h:13
#define _RESTRICT
Definition config.h:17
EFI_PHYSICAL_ADDRESS buffer
Definition mem.c:15
static atomic_long count
Definition main.c:9
__builtin_va_list va_list
Definition stdarg.h:9
__UINT64_TYPE__ uint64_t
Definition stdint.h:17
__UINT8_TYPE__ uint8_t
Definition stdint.h:11
__INT64_TYPE__ int64_t
Definition stdint.h:16
Directory entry struct.
Definition io.h:424
inode_type_t type
The type of the entries inode.
Definition io.h:426
inode_number_t number
The number of the entries inode.
Definition io.h:425
Key type.
Definition io.h:503
Poll file descriptor structure.
Definition io.h:307
poll_events_t revents
The events that occurred.
Definition io.h:310
poll_events_t events
The events to wait for.
Definition io.h:309
fd_t fd
The file descriptor to poll.
Definition io.h:308
Stat type.
Definition io.h:360
time_t accessTime
Unix time stamp for the last inode access.
Definition io.h:366
uint64_t linkAmount
The amount of times the inode appears in dentries.
Definition io.h:365
inode_number_t number
The number of the entries inode.
Definition io.h:361
uint64_t size
The size of the file that is visible outside the filesystem.
Definition io.h:363
inode_type_t type
The type of the entries inode.
Definition io.h:362
time_t modifyTime
Unix time stamp for last file content alteration.
Definition io.h:367
time_t changeTime
Unix time stamp for the last file metadata alteration.
Definition io.h:368
uint64_t blocks
The amount of blocks used on disk to store the file.
Definition io.h:364
time_t createTime
Unix time stamp for the creation of the inode.
Definition io.h:369
long long unsigned time_t
Definition time_t.h:4