我需要一个看起来像
的输入./a.out <exe> <arg1> ... <argn> <others_stuff>
其中<exe> <arg1> ... <argn>
是我必须作为单独进程执行的输入(目标是将exe的输出保存到txt中)。
将输出保存到txt文件不是问题,我只需要重定向stdout(使用dup2,freopen或类似的东西)。
问题是只执行argv的一部分!因为exec的族函数(它们太多了!)让我们把整个argv作为输入,或指定每个arg。 我在这里写作是因为我无法解决问题,所以我希望你能帮助我(我在各处搜索都没有成功)。
编辑:我忘了说我不能用系统来执行命令!答案 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
- 如果这是一个问题,你可以先复制它(你必须为新副本分配一些内存......)