Вызов системного вызова на узел из C ++? - PullRequest
0 голосов
/ 16 мая 2018

Из C ++, есть ли способ сделать системный вызов для запуска node process-file.js ./target_folder/?

Стандартный вызов из моего проекта C ++:

node ../folderA/subfolder/process-file.js firstArgument ./target_folder/outputFile.txt

Ответы [ 2 ]

0 голосов
/ 17 мая 2018
  const char *programname = "/usr/local/bin/node";

  const char **nargv = new const char* [5];//extra room for program name and sentinel
  nargv [0] = programname; // by convention is program name
  nargv [1] = "/folder/convert-json.js";   // arg 1 to node
  nargv [2] = "/folder/723edc747c39.json"; // arg 2
  nargv [3] = "/tmp/data.json"; // arg 3
  nargv [4] = NULL;  // end of arguments sentinel is NULL

  pid_t pid = fork();
  if (pid == 0) /* child */ {
    if (execv(programname, (char **)nargv) == -1) {
      /* Handle error */
      std::cout << "!! an error in calling node\n";
    }
    _exit(1);  /* in case execv() fails */
  }

Я построил на твоем (@ Джош-Олсон). Этот код работает, надеюсь, он помогает другим.

0 голосов
/ 16 мая 2018

Вы можете использовать fork () вместо system (), как показано:

char *filename = /* something */;

pid_t pid = fork();
if (pid == 0) /* child */ {
  if (execve(filename, NULL, NULL) == -1) {
    /* Handle error */
  }
  _exit(1);  /* in case execve() fails */
}

Не вызывать систему ()

...