CS350 COS
COS
Loading...
Searching...
No Matches
process.c
Go to the documentation of this file.
1
2#include <stdint.h>
3
4#include <sys/cdefs.h>
5#include <sys/wait.h>
6#include <sys/syscall.h>
7#include <unistd.h>
8#include <errno.h>
9#include <syscall.h>
10
11unsigned int
12sleep(unsigned int seconds)
13{
14 OSThreadSleep(seconds);
15
16 // Should return left over time if woke up early
17 return 0;
18}
19
21spawn(const char *path, const char *argv[])
22{
23 uint64_t status = OSSpawn(path, argv);
24
25 if (SYSCALL_ERRCODE(status) != 0) {
26 errno = SYSCALL_ERRCODE(status);
27 return -1;
28 }
29
30 return (pid_t)SYSCALL_VALUE(status);
31}
32
34waitpid(pid_t pid, int *status, UNUSED int options)
35{
36 uint64_t wstatus = OSWait(pid);
37
38 if (SYSCALL_ERRCODE(wstatus) != 0) {
39 errno = SYSCALL_ERRCODE(wstatus);
40 return -1;
41 }
42
43 *status = SYSCALL_VALUE(wstatus) & 0x0000ffff;
44
45 return WGETPID(SYSCALL_VALUE(wstatus));
46}
47
49wait(int *status)
50{
51 return waitpid(WAIT_ANY, status, 0);
52}
53
#define UNUSED
Definition: cdefs.h:16
#define errno
Definition: errno.h:7
int OSThreadSleep(uint64_t time)
Definition: syscall.c:125
uint64_t OSSpawn(const char *path, const char *argv[])
Definition: syscall.c:29
uint64_t OSWait(uint64_t pid)
Definition: syscall.c:35
pid_t waitpid(pid_t pid, int *status, UNUSED int options)
Definition: process.c:34
unsigned int sleep(unsigned int seconds)
Definition: process.c:12
pid_t spawn(const char *path, const char *argv[])
Definition: process.c:21
pid_t wait(int *status)
Definition: process.c:49
#define SYSCALL_ERRCODE(_result)
Definition: syscall.h:56
#define SYSCALL_VALUE(_result)
Definition: syscall.h:57
unsigned long uint64_t
Definition: types.h:13
uint16_t pid_t
Definition: types.h:28
#define WGETPID(_x)
Definition: wait.h:13
#define WAIT_ANY
Definition: wait.h:16