1

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;   }
4

1 に答える 1