conclusion

This commit is contained in:
pommicket 2022-02-20 13:18:21 -08:00
parent 0f97a589b8
commit 9bc8a11afe
1069 changed files with 48694 additions and 11 deletions

View file

@ -0,0 +1,10 @@
#include <sys/ipc.h>
#include <sys/stat.h>
key_t ftok(const char *path, int id)
{
struct stat st;
if (stat(path, &st) < 0) return -1;
return ((st.st_ino & 0xffff) | ((st.st_dev & 0xff) << 16) | ((id & 0xff) << 24));
}

View file

@ -0,0 +1,13 @@
#define IPCOP_semop 1
#define IPCOP_semget 2
#define IPCOP_semctl 3
#define IPCOP_msgsnd 11
#define IPCOP_msgrcv 12
#define IPCOP_msgget 13
#define IPCOP_msgctl 14
#define IPCOP_shmat 21
#define IPCOP_shmdt 22
#define IPCOP_shmget 23
#define IPCOP_shmctl 24
#define IPC_MODERN 0x100

View file

@ -0,0 +1,18 @@
#include <sys/sem.h>
#include <stdarg.h>
#include "syscall.h"
#include "ipc.h"
int semctl(int id, int num, int cmd, ...)
{
long arg;
va_list ap;
va_start(ap, cmd);
arg = va_arg(ap, long);
va_end(ap);
#ifdef __NR_semctl
return syscall4(__NR_semctl, id, num, cmd, arg);
#else
return syscall5(__NR_ipc, IPCOP_semctl, id, num, cmd | 0x100, (long)&arg);
#endif
}

View file

@ -0,0 +1,12 @@
#include <sys/sem.h>
#include "syscall.h"
#include "ipc.h"
int semget(key_t key, int n, int fl)
{
#ifdef __NR_semget
return syscall3(__NR_semget, key, n, fl);
#else
return syscall4(__NR_ipc, IPCOP_semget, key, n, fl);
#endif
}

View file

@ -0,0 +1,12 @@
#include <sys/sem.h>
#include "syscall.h"
#include "ipc.h"
int semop(int id, struct sembuf *buf, size_t n)
{
#ifdef __NR_semop
return syscall3(__NR_semop, id, (long)buf, n);
#else
return syscall5(__NR_ipc, IPCOP_semop, id, n, 0, (long)buf);
#endif
}

View file

@ -0,0 +1,17 @@
#include <sys/shm.h>
#include "syscall.h"
#include "ipc.h"
#ifdef __NR_shmat
void *shmat(int id, const void *addr, int flag)
{
return (void *)syscall3(__NR_shmat, id, (long)addr, flag);
}
#else
void *shmat(int id, const void *addr, int flag)
{
unsigned long ret;
ret = syscall5(__NR_ipc, IPCOP_shmat, id, flag, (long)&addr, (long)addr);
return (ret > -(unsigned long)SHMLBA) ? (void *)ret : (void *)addr;
}
#endif

View file

@ -0,0 +1,12 @@
#include <sys/shm.h>
#include "syscall.h"
#include "ipc.h"
int shmctl(int id, int cmd, struct shmid_ds *buf)
{
#ifdef __NR_shmctl
return syscall3(__NR_shmctl, id, cmd, (long)buf);
#else
return syscall4(__NR_ipc, IPCOP_shmctl, id, cmd | IPC_MODERN, (long)buf);
#endif
}

View file

@ -0,0 +1,12 @@
#include <sys/shm.h>
#include "syscall.h"
#include "ipc.h"
int shmdt(const void *addr)
{
#ifdef __NR_shmdt
return syscall1(__NR_shmdt, (long)addr);
#else
return syscall2(__NR_ipc, IPCOP_shmdt, (long)addr);
#endif
}

View file

@ -0,0 +1,12 @@
#include <sys/shm.h>
#include "syscall.h"
#include "ipc.h"
int shmget(key_t key, size_t size, int flag)
{
#ifdef __NR_shmget
return syscall3(__NR_shmget, key, size, flag);
#else
return syscall4(__NR_ipc, IPCOP_shmget, key, size, flag);
#endif
}