我想将 node.js 作为子进程运行并提供输入。使用 C,这是我的一些示例代码。
我遇到的问题是,尽管子进程的标准输出仍被定向到终端,但在给子进程标准输入提供了 print 'Hello World' 行之后,我什么也看不到。即使我 fflush() 管道,我也看不到任何输出。但是,如果我关闭管道的输入,那么终端上会出现“Hello World”。
子进程似乎只是缓冲 - 为什么会这样?我想最终将子进程标准输出重定向到另一个管道并从 main() 中读取它。
int main(int argc, char* argv[]) {
int toNode[2]; pipe(toNode); pid_t child_pid = fork(); if (child_pid == 0) { // child // close write end close(toNode[1]); // connect read end to stdin dup2(toNode[0], STDIN_FILENO); // run node executable char* arg_list[] = { "/usr/bin/node", NULL}; execvp(arg_list[0], arg_list); fprintf(stderr, "process failed to start: %s\n", strerror(errno)); abort(); } else { // parent FILE* stream; // close read end close(toNode[0]); // convert write fd to FILE object stream = fdopen(toNode[1], "w"); fprintf(stream, "console.log('Hello World');\n"); fflush(stream); //close(toNode[1]); waitpid(child_pid, NULL, 0); } return 0; }