I'm new to libuv, I have several question.
I want to redirect process stdout to process caller printf, why on read_apipe 
function buf.base printf is left undefined?

My child process code
<html>
<body><code>
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif
#include <iostream>

int main()
{
        std::cout <<"init..\n";
        #ifdef _WIN32
        Sleep(500);
        #else
        sleep(500);
        #endif
        std::cout<<"selesai..\n";
        return 0;
}
</code>
</body>
</html>
My parent process code 

<html>
<body><code>
#include <stdio.h>
#include <stdlib.h>
#include "uv.h"

uv_loop_t *loop;
uv_process_t child_req;
uv_process_options_t options;
uv_pipe_t apipe;

void on_child_exit(uv_process_t *req, int exit_status, int term_signal) {
    fprintf(stderr, "Process exited with status %d, signal %d %s\n", 
exit_status, term_signal,(char*)req->data);

    uv_close((uv_handle_t*) req, NULL);
}

uv_buf_t alloc_buffer(uv_handle_t *handle, size_t suggested_size) {
    printf("alloc_buffer called, requesting a %lu byte buffer\n");
 
    return uv_buf_init((char*) malloc(suggested_size), suggested_size);
}

void read_apipe(uv_stream_t* stream, ssize_t nread, uv_buf_t buf) {
    printf("read %li bytes in a %lu byte buffer\n", nread, buf.len);
    if (nread + 1 > buf.len) return;
    buf.base[nread] = '\0'; // turn it into a cstring
    printf("read: |%s|", buf.base);
}

int main(int argc, char *argv[]) {
    printf("spawn_test\n");
    loop = uv_default_loop();
    int r;
    char* args[3];
    args[0] = strdup("dummy");
    args[1] = NULL;
    args[2] = NULL;

    uv_pipe_init(loop, &apipe, 0);
    uv_pipe_open(&apipe, 0);

    options.stdio_count = 3;
    uv_stdio_container_t child_stdio[3];
    child_stdio[0].flags = UV_IGNORE;
    child_stdio[1].flags = UV_CREATE_PIPE | UV_READABLE_PIPE|UV_WRITABLE_PIPE;
    child_stdio[1].data.stream = (uv_stream_t *) &apipe;
       child_stdio[2].flags = UV_INHERIT_FD;
       child_stdio[2].data.fd = 1;
    options.stdio = child_stdio;

    options.exit_cb = on_child_exit;
    options.file = args[0];
    options.args = args;

    if ((r=uv_spawn(loop, &child_req, &options))) {
        fprintf(stderr, "%s\n", uv_strerror(r));
        return 1;
    }
    uv_read_start((uv_stream_t*)&apipe, alloc_buffer, read_apipe);

    return uv_run(loop, UV_RUN_DEFAULT);
}
</code>
</body>
</html>

parent process stdout output

spawn_test
alloc_buffer called, requesting a 2003623535 byte buffer
read -4092 bytes in a 2686504 byte buffer
Process exited with status 0, signal 0 (null)


Why read function yielded -4092 bytes?
How to print child process stdout to parent stdout exactly?

-- 
You received this message because you are subscribed to the Google Groups 
"libuv" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/libuv.
For more options, visit https://groups.google.com/d/optout.

Reply via email to