Slide 51
Slide 51 text
Incomplete implementation of spawn to
implement Open3.capture3
static mrb_value mrb_open3_spawn(mrb_state *mrb, mrb_value self) {
const char **cmd; pid_t pid; mrb_value *argv;
mrb_int argc, out_dst, err_dst;
mrb_get_args(mrb, "*", &argv, &argc);
cmd = mrb_str_buf_to_cstr_buf(mrb, argv, argc-1);
open3_spawn_process_options(mrb, argv[argc-1], &out_dst, &err_dst);
pid = fork();
if (pid == 0) {
dup2(out_dst, STDOUT_FILENO);
dup2(err_dst, STDERR_FILENO);
execvp(cmd[0], cmd);
}
return mrb_fixnum_value(pid);
}