使用exec只使用argv的一些参数(使用C)

时间:2012-05-28 12:47:46

标签: c input exec argv

我需要一个看起来像

的输入
./a.out <exe> <arg1> ... <argn> <others_stuff>

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

将输出保存到txt文件不是问题,我只需要重定向stdout(使用dup2,freopen或类似的东西)。

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

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

2 个答案:

答案 0 :(得分:2)

如果你想使用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);

或者如果你没有太多的args,你可以使用execlp

  execlp(argv[0], argv[0], argv[3], argv[2], argv[4], NULL);

答案 1 :(得分:0)

由于exec接受argv参数作为由char*指针终止的NULL数组,因此您可以使用现有的argv并设置成员在最后一个之后你要传递给NULL

这会破坏argv - 如果这是一个问题,你可以先复制它(你必须为新副本分配一些内存......)