diff options
Diffstat (limited to 'include/unistd.h')
-rw-r--r-- | include/unistd.h | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/include/unistd.h b/include/unistd.h new file mode 100644 index 0000000..f9838f1 --- /dev/null +++ b/include/unistd.h @@ -0,0 +1,182 @@ +/** + * @file unistd.h + * @author Freya Murphy <freya@freyacat.org> + * @author Warren R. Carithers + * + * Universial system definitions for userspace. + */ + +#ifndef _UNISTD_H +#define _UNISTD_H + +#include <stdint.h> +#include <stddef.h> + +/* System Call Definitions */ + +typedef uint_t pid_t; + +/** + * Terminates the calling process and does not return. + * @param status - the status code to exit with + */ +__attribute__((noreturn)) extern void exit(int32_t status); + +/** + * Sleeps current process until a child process terminates + * + * @param pid - pid of the desired child, or 0 for any child + * @param status - Pointer to int32_t into which the child's status is placed, + * or NULL + * + * @return The pid of the terminated child, or an error code + * + * If there are no children in the system, returns an error code (*status + * is unchanged). + * + * If there are one or more children in the system and at least one has + * terminated but hasn't yet been cleaned up, cleans up that process and + * returns its information; otherwise, blocks until a child terminates. + */ +extern int waitpid(pid_t pid, int32_t *status); + +/** + * Create a duplicate of the calling process + * + * @return parent - the pid of the new child, or an error code + * child - 0 + */ +extern int fork(void); + +/** + * Replace the memory image of the calling process + * + * @param prog - program table index of the program to exec + * @param args - the command-line argument vector + * + * Does not return if it succeeds; if it returns, something has + * gone wrong. + */ +extern void exec(uint_t prog, char **args); + +/** + * Open a stream with a given filename + * + * @param filename - the name of the file to open + * @return the file descriptior of the open file or a negative error code. + * TODO: fmurphy implement + */ +extern int open(char *filename); + +/** + * Closes a stream with the given file descriptior + * @param fd - the file descriptior of the open stream + * TODO: fmurphy implement + */ +extern void close(int fd); + +/** + * Read into a buffer from a stream + * + * @param fd - file stream to read from + * @param buf - buffer to read into + * @param nbytes - maximum capacity of the buffer + * + * @return - The count of bytes transferred, or an error code + * TODO: fmurphy FD + */ +extern int read(int fd, void *buffer, size_t nbytes); + +/** + * Write from a buffer to a stream + * + * @param fd - file stream to write to + * @param buf - buffer to write from + * @param nbytes - maximum capacity of the buffer + * + * @return - The count of bytes transferred, or an error code + * TODO: fmurphy FD + */ +extern int write(int fd, const void *buffer, size_t nbytes); + +/** + * Gets the pid of the calling process + * + * @return the pid of this process + */ +extern pid_t getpid(void); + +/** + * Gets the parent pid of the current process + * + * @return the parent pid of the current process, or 0 if init + */ +extern pid_t getppid(void); + +/** + * Gets the current system time + * + * @return the system time + * TODO: CHANGE TIME TO 64bits!! + */ +extern ulong_t gettime(void); + +/** + * Gets the scheduling priority of the calling process + * + * @return the process' priority + */ +extern uint_t getprio(void); + +/** + * Sets the scheduling priority of the calling process + * + * @param new - the desired new priority + * + * @return the old priority value + */ +extern uint_t setprio(uint_t new); + +/** + * Terminates a process + * + * @param pid - the pid of the process to kill + * + * @return 0 on success, else an error code + */ +extern int32_t kill(pid_t pid); + +/** + * Put the current process to sleep for some length of time + * + * @param ms - desired sleep time (in ms), or 0 to yield the CPU + * + * @return the time the process spent sleeping (in ms) + */ +extern int sleep(uint32_t ms); + +/** + * Wait for any child to exit + * + * @param status - Pointer to int32_t into which the child's status is placed, + * or NULL + * + * @return The pid of the terminated child, or an error code + * + * Analogous to waitpid(0,status) + */ +extern int wait(int32_t *status); + +/** + * Spawn a new process running a different program + * + * @param prog - program table index of the program to spawn + * @param args - the command-line argument vector for the process + * + * @return The pid of the child, or an error code + * + * Analogous to calling fork and exec + */ +extern int spawn(uint_t prog, char **args); + +#endif /* unistd.h */ |