Simple IPC with pipes

This commit is contained in:
2025-09-06 11:47:01 +02:00
parent 643d692259
commit cd0e262e56
21 changed files with 312 additions and 17 deletions

View File

@ -2,7 +2,12 @@
#include <stddef.h>
#include <system/ioctl.h>
#include <sysdefs/ioctl.h>
#include <system/system.h>
#include <sysdefs/syscall.h>
#include <syscall/syscall.h>
int32_t ioctl(uint64_t ioh, uint64_t cmd, void *extra) {
return syscall(SYS_IOCTL, ioh, cmd, (uint64_t)extra, 0, 0, 0);
}
int32_t ioctl_openfile(const char *path, uint64_t flags) {
IOCtlOF cfg = { .path = path, .flags = flags };

View File

@ -4,6 +4,7 @@
#include <stdint.h>
#include <stddef.h>
int32_t ioctl(uint64_t ioh, uint64_t cmd, void *extra);
int32_t ioctl_openfile(const char *path, uint64_t flags);
int32_t ioctl_writefile(int32_t ioh, const uint8_t *const buffer, size_t len, size_t off);
int32_t ioctl_readfile(int32_t ioh, uint8_t *const buffer, size_t len, size_t off);

10
ulib/system/ipcpipe.c Normal file
View File

@ -0,0 +1,10 @@
#include <stdint.h>
#include <stddef.h>
#include "ipcpipe.h"
#include <sysdefs/ipcpipe.h>
#include <sysdefs/syscall.h>
#include <syscall/syscall.h>
int32_t ipcpipe(uint64_t pid, uint64_t pipenum, uint64_t cmd, uint8_t *buffer, size_t len) {
return syscall(SYS_IPCPIPE, pid, pipenum, cmd, (uint64_t)buffer, (uint64_t)len, 0);
}

9
ulib/system/ipcpipe.h Normal file
View File

@ -0,0 +1,9 @@
#ifndef ULIB_SYSTEM_IPCPIPE_H_
#define ULIB_SYSTEM_IPCPIPE_H_
#include <stdint.h>
#include <stddef.h>
int32_t ipcpipe(uint64_t pid, uint64_t pipenum, uint64_t cmd, uint8_t *buffer, size_t len);
#endif // ULIB_SYSTEM_IPCPIPE_H_

8
ulib/system/processctl.c Normal file
View File

@ -0,0 +1,8 @@
#include <stdint.h>
#include <sysdefs/processctl.h>
#include <sysdefs/syscall.h>
#include <syscall/syscall.h>
int32_t processctl(uint64_t pid, uint64_t cmd, void *extra) {
return syscall(SYS_PROCESSCTL, pid, cmd, (uint64_t)extra, 0, 0, 0);
}

6
ulib/system/processctl.h Normal file
View File

@ -0,0 +1,6 @@
#ifndef ULIB_SYSTEM_PROCESSCTL_H_
#define ULIB_SYSTEM_PROCESSCTL_H_
int32_t processctl(uint64_t pid, uint64_t cmd, void *extra);
#endif // ULIB_SYSTEM_PROCESSCTL_H_

View File

@ -7,11 +7,3 @@ void debugprint(const char *string) {
syscall(SYS_DEBUGPRINT, (uint64_t)string, 0, 0, 0, 0, 0);
}
int32_t processctl(uint64_t pid, uint64_t cmd, void *extra) {
return syscall(SYS_PROCESSCTL, pid, cmd, (uint64_t)extra, 0, 0, 0);
}
int32_t ioctl(uint64_t ioh, uint64_t cmd, void *extra) {
return syscall(SYS_IOCTL, ioh, cmd, (uint64_t)extra, 0, 0, 0);
}

View File

@ -4,7 +4,5 @@
#include <stdint.h>
void debugprint(const char *string);
int32_t processctl(uint64_t pid, uint64_t cmd, void *extra);
int32_t ioctl(uint64_t ioh, uint64_t cmd, void *extra);
#endif // ULIB_SYSTEM_SYSTEM_H_