diff options
| author | verdant <im@verdant.ee> | 2026-07-28 20:36:13 +0800 |
|---|---|---|
| committer | verdant <im@verdant.ee> | 2026-07-28 20:44:30 +0800 |
| commit | 14bdd63e40e913dfce20190de923d2aca0d1d45a (patch) | |
| tree | 51b82d54265bea1273d4580da6f893709374f87a | |
| parent | 1b5a26716b7d9050334d8ded58fe2c6ae7fe0143 (diff) | |
| download | sf-14bdd63e40e913dfce20190de923d2aca0d1d45a.tar.gz sf-14bdd63e40e913dfce20190de923d2aca0d1d45a.zip | |
Add spawn wrapper for executing external commands
Inctroduce process.c and process.h providing spawn() function to fork
a child process and execute commands via execvp().
Return -1 on invalid arguments or fork failure, and 0 on success.
| -rw-r--r-- | src/process.c | 28 | ||||
| -rw-r--r-- | src/process.h | 6 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/process.c b/src/process.c new file mode 100644 index 0000000..3dd93f0 --- /dev/null +++ b/src/process.c @@ -0,0 +1,28 @@ +#include "process.h" +#include "err.h" +#include "log.h" +#include <sys/wait.h> +#include <unistd.h> + +int +spawn(char **argv) +{ + pid_t pid; + + if (!argv[0] || *argv[0] == '\0') { + log_write(LOG_ERR, "Invalid argv"); + return -1; + } + + if ((pid = fork()) < 0) { + log_write(LOG_ERR, "fork error"); + } else if (pid == 0) { + if (execvp(argv[0], argv) < 0) { + die("exec error"); + } + } else { + wait(NULL); + } + + return 0; +} diff --git a/src/process.h b/src/process.h new file mode 100644 index 0000000..b817fa9 --- /dev/null +++ b/src/process.h @@ -0,0 +1,6 @@ +#ifndef SF_PROCESS_H +#define SF_PROCESS_H + +int spawn(char **argv); + +#endif /* SF_PROCESS_H */ |
