c - 使用仅带有 argv 的某些参数的 exec(使用 C)

标签 c input exec argv

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

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

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

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

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

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

最佳答案

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

关于c - 使用仅带有 argv 的某些参数的 exec(使用 C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10784943/

相关文章:

c - MPI 状态获取错误的发件人

java - 如何通过 Unix 输入重定向将文件作为数组输入到我的 java 程序中?

C++如何在不破坏程序的情况下输入用户值

php exec() 函数和不同的主机

bash - 使用 exec 执行命令设置变量

c - Sizeof 运算符与字符串一起使用来打印其长度

c - c 中的 ')' token 错误之前预期为 '*'

java - 在 C++、Java、C# 之间循环初始化变量作用域

python - 如何为 raw_input 设置默认的可编辑字符串?

php - 获取mysqldump调试信息