MOS Source Code
Loading...
Searching...
No Matches
pipe.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-3.0-or-later
2
3#pragma once
4
5#include "mos/io/io.hpp"
6#include "mos/tasks/wait.hpp"
7
8#include <mos/allocator.hpp>
10
20
21PtrResult<pipe_t> pipe_create(size_t bufsize);
22size_t pipe_read(pipe_t *pipe, void *buf, size_t size);
23size_t pipe_write(pipe_t *pipe, const void *buf, size_t size);
24
33
34struct PipeIOImpl : IO
35{
36 explicit PipeIOImpl(IOFlags flags) : IO(flags, IO_PIPE) {};
37
38 size_t on_read(void *buf, size_t size) override;
39 size_t on_write(const void *buf, size_t size) override;
40 void on_closed() override;
41};
42
43struct pipeio_t : mos::NamedType<"PipeIO">
44{
46
47 pipe_t *const pipe;
49};
50
@ IO_READABLE
Definition io.hpp:30
@ IO_WRITABLE
Definition io.hpp:31
@ IO_PIPE
Definition io.hpp:23
long define_syscall pipe(fd_t *reader, fd_t *writer, u64 flags)
Definition ksyscall.cpp:552
#define __nodiscard
Definition mos_global.h:35
__nodiscard bool pipe_close_one_end(pipe_t *pipe)
Close one end of the pipe, so that the other end will get EOF.
Definition pipe.cpp:134
PtrResult< pipe_t > pipe_create(size_t bufsize)
Definition pipe.cpp:165
pipeio_t * pipeio_create(pipe_t *pipe)
Definition pipe.cpp:213
size_t pipe_write(pipe_t *pipe, const void *buf, size_t size)
Definition pipe.cpp:20
size_t pipe_read(pipe_t *pipe, void *buf, size_t size)
Definition pipe.cpp:80
size_t size
Definition slab.cpp:32
IO(IOFlags flags, io_type_t type)
Definition io.cpp:35
size_t on_write(const void *buf, size_t size) override
Definition pipe.cpp:184
PipeIOImpl(IOFlags flags)
Definition pipe.hpp:36
void on_closed() override
Definition pipe.cpp:191
size_t on_read(void *buf, size_t size) override
Definition pipe.cpp:177
bool other_closed
true if the other end of the pipe has been closed
Definition pipe.hpp:16
u32 magic
Definition pipe.hpp:13
ring_buffer_pos_t buffer_pos
Definition pipe.hpp:18
void * buffers
Definition pipe.hpp:17
spinlock_t lock
protects the buffer_pos (and thus the buffer)
Definition pipe.hpp:15
waitlist_t waitlist
for both reader and writer, only one party can wait on the pipe at a time
Definition pipe.hpp:14
pipeio_t(pipe_t *pipe)
Definition pipe.hpp:45
pipe_t *const pipe
Definition pipe.hpp:47
PipeIOImpl io_w
Definition pipe.hpp:48
PipeIOImpl io_r
Definition pipe.hpp:48
unsigned int u32
Definition types.h:17