#include #include #include #include #define A(x) \ if ((errno = (x)) != 0) \ perror(#x) int main(int argc, char *argv[]) { posix_spawn_file_actions_t fa; pid_t pid; posix_spawn_file_actions_init(&fa); A(posix_spawn_file_actions_addclose(&fa, 0)); A(posix_spawn_file_actions_adddup2(&fa, 2, 3)); A(posix_spawn_file_actions_addopen(&fa, 5, "test.c", O_RDONLY, 0)); A(posix_spawn_file_actions_addopen(&fa, 4, "/usr", O_DIRECTORY, 0)); A(posix_spawn_file_actions_addchdir_np(&fa, "/")); A(posix_spawn_file_actions_addfchdir_np(&fa, 4)); A(posix_spawn_file_actions_addclose(&fa, 5)); A(posix_spawn_file_actions_adddup2(&fa, 2, 10)); A(posix_spawn_file_actions_adddup2(&fa, 2, 11)); A(posix_spawn_file_actions_adddup2(&fa, 2, 12)); A(posix_spawn_file_actions_adddup2(&fa, 2, 13)); A(posix_spawn_file_actions_adddup2(&fa, 2, 14)); A(posix_spawn_file_actions_adddup2(&fa, 2, 15)); posix_spawn(&pid, "/bin/false", &fa, 0, (char*[]){"false", 0}, (char*[]){0}); posix_spawn_file_actions_destroy(&fa); return 0; }