2

我需要一个看起来像的输入

./a.out <exe> <arg1> ... <argn> <others_stuff>

我必须作为一个单独的进程执行的输入在哪里<exe> <arg1> ... <argn>(目标是将 exe 的输出保存到 txt 中)。

将输出保存到 txt 文件中没有问题,我只需要重定向标准输出(使用 dup2、freopen 或类似的东西)。

问题是只执行一部分 argv!因为 exec 的系列函数(它们太多了!)让我们将整个 argv 作为输入,或者指定每个 arg。我写在这里是因为我无法解决问题,所以我希望你能帮助我(我到处搜索都没有成功)。

编辑:我忘了说我不能使用系统来执行命令!

4

2 回答 2

3

如果你想使用 argv 的连续部分,你有两个选择,你可以(正如你所尝试的)创建一个新的 arg 数组,正确地填充它:

  char *params[argc-2];
  memcpy(params, argv+1, sizeof params);
  params[argc-3] = NULL;

  execvp(*params, params);

你可以粉碎argv

  argv[argc-3] = NULL;
  execvp(argv[1], argv+1);

或者,如果您没有太多参数,您可以使用execlp

  execlp(argv[0], argv[0], argv[3], argv[2], argv[4], NULL);
于 2012-05-28T13:56:29.603 回答
1

Since exec accepts an argv argument as a char* array terminated by a NULL pointer, you can just use the existing argv and set the member after the last one you want to pass to NULL.

This does destroy argv - if that's a problem, you can copy it first (you'll have to allocate some memory for the new copy...)

于 2012-05-28T13:01:10.767 回答