diff options
Diffstat (limited to 'ulib/spawn.c')
-rw-r--r-- | ulib/spawn.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/ulib/spawn.c b/ulib/spawn.c new file mode 100644 index 0000000..78b1a53 --- /dev/null +++ b/ulib/spawn.c @@ -0,0 +1,32 @@ +#include <stdio.h> +#include <error.h> +#include <unistd.h> + +int wait(int32_t *status) +{ + return (waitpid(0, status)); +} + +int spawn(uint_t prog, char **args) +{ + int32_t pid; + + pid = fork(); + if (pid != 0) { + // failure, or we are the parent + return (pid); + } + + // we are the child + pid = getpid(); + + // child inherits parent's priority level + + exec(prog, args); + + // uh-oh.... + + fprintf(stderr, "Child %d exec() #%u failed\n", pid, prog); + + exit(EXIT_FAILURE); +} |