annotate spawn.cpp @ 0:4171b2d4684b default tip

initial commit
author Yasuri <linuxoverwindows@charliesmp.net>
date Sat, 05 Sep 2026 15:35:48 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
1 #include <iostream>
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
2 #include <unistd.h>
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
3 #include <sys/wait.h>
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
4 #include <spawn.h>
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
5 extern char** environ; // idk what this does
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
6 int spawn(char* const argv[], const char* path)
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
7 {
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
8 pid_t pid;
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
9 int status;
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
10 status = posix_spawn(&pid, path, NULL, NULL, const_cast<char* const*>(argv), environ);
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
11 if (status != 0) {
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
12 std::cerr << "posix_spawn failed:" << strerror(status) << std::endl;
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
13 return 1;
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
14 }
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
15 if (waitpid(pid, &status, 0) == -1) {
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
16 perror("waitpid");
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
17 return 1;
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
18 }
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
19 if (WIFEXITED(status)) {
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
20 return WEXITSTATUS(status);
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
21 }
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
22 return 1;
4171b2d4684b initial commit
Yasuri <linuxoverwindows@charliesmp.net>
parents:
diff changeset
23 }