node.js をサブプロセスとして実行し、入力をフィードしたいと考えています。Cを使用して、これを行う私のサンプルコードを次に示します。
私が抱えている問題は、サブプロセスの stdout がまだ端末に向けられているにもかかわらず、サブプロセス stdin に print 'Hello World' 行を供給した後、何も表示されないことです。パイプを fflush() しても、出力には何も表示されません。ただし、パイプの入力を閉じると、ターミナルに「Hello World」が表示されます。
サブプロセスは単にバッファリングしているようです - なぜですか? 最終的にサブプロセスの stdout を別のパイプにリダイレクトし、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; }