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.