Home | History | Annotate | Line # | Download | only in proc-streams
      1  1.1  christos #include <stdio.h>
      2  1.1  christos #include <string.h>
      3  1.1  christos #include <inttypes.h>
      4  1.1  christos 
      5  1.1  christos #include <uv.h>
      6  1.1  christos 
      7  1.1  christos uv_loop_t *loop;
      8  1.1  christos uv_process_t child_req;
      9  1.1  christos uv_process_options_t options;
     10  1.1  christos 
     11  1.1  christos void on_exit(uv_process_t *req, int64_t exit_status, int term_signal) {
     12  1.1  christos     fprintf(stderr, "Process exited with status %" PRId64 ", signal %d\n", exit_status, term_signal);
     13  1.1  christos     uv_close((uv_handle_t*) req, NULL);
     14  1.1  christos }
     15  1.1  christos 
     16  1.1  christos int main() {
     17  1.1  christos     loop = uv_default_loop();
     18  1.1  christos 
     19  1.1  christos     size_t size = 500;
     20  1.1  christos     char path[size];
     21  1.1  christos     uv_exepath(path, &size);
     22  1.1  christos     strcpy(path + (strlen(path) - strlen("proc-streams")), "test");
     23  1.1  christos 
     24  1.1  christos     char* args[2];
     25  1.1  christos     args[0] = path;
     26  1.1  christos     args[1] = NULL;
     27  1.1  christos 
     28  1.1  christos     /* ... */
     29  1.1  christos 
     30  1.1  christos     options.stdio_count = 3;
     31  1.1  christos     uv_stdio_container_t child_stdio[3];
     32  1.1  christos     child_stdio[0].flags = UV_IGNORE;
     33  1.1  christos     child_stdio[1].flags = UV_IGNORE;
     34  1.1  christos     child_stdio[2].flags = UV_INHERIT_FD;
     35  1.1  christos     child_stdio[2].data.fd = 2;
     36  1.1  christos     options.stdio = child_stdio;
     37  1.1  christos 
     38  1.1  christos     options.exit_cb = on_exit;
     39  1.1  christos     options.file = args[0];
     40  1.1  christos     options.args = args;
     41  1.1  christos 
     42  1.1  christos     int r;
     43  1.1  christos     if ((r = uv_spawn(loop, &child_req, &options))) {
     44  1.1  christos         fprintf(stderr, "%s\n", uv_strerror(r));
     45  1.1  christos         return 1;
     46  1.1  christos     }
     47  1.1  christos 
     48  1.1  christos     return uv_run(loop, UV_RUN_DEFAULT);
     49  1.1  christos }
     50