From 14bdd63e40e913dfce20190de923d2aca0d1d45a Mon Sep 17 00:00:00 2001 From: verdant Date: Tue, 28 Jul 2026 20:36:13 +0800 Subject: 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. --- src/process.c | 28 ++++++++++++++++++++++++++++ src/process.h | 6 ++++++ 2 files changed, 34 insertions(+) create mode 100644 src/process.c create mode 100644 src/process.h 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 +#include + +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 */ -- cgit v1.2.3