从主要参数执行程序

Executing programs from main argument

我想制作一个从 main 参数执行程序的程序。 假设我有程序 progr1.cprogr2.c 运行 。现在我使用其他两个程序作为参数编译程序 progr3.c。这应该是结果:

./progr3 progr1 progr2

Result of progr1

Result of progr2

这是我到目前为止所做的:

void main (int args , char **s) {

int  i , x , status;

if (args >= 2) {

    x = fork ();

    for ( i = 1 ; i < args ; i++) {

           if (x == 0) {
            execv (s[1],s);
           }
          else
         {
            wait (&status);
            _exit(i);
         }
          x= fork();
      }
  }
  _exit(0);
 }

这段代码只做第一个参数程序的输出。所以我猜 fork()execv() 没有像我希望的那样一起工作。我怎样才能改变程序来做我想做的事?

execv 用指定的命令替换当前进程。

而是使用 system 创建一个新进程。也不需要分叉:

int system(const char *command)

当你运行

        execv (s[1],s); // That should have been s[i]

prog3 替换为 prog1。因此,prog3 的逻辑丢失了。

如果你想保留prog3的逻辑,你需要在子进程上使用fork然后execv

如果您只对 prog1prog2 的输出感兴趣,您可以使用 system(s[i])

更新

使用 fork 的工作示例。

#include <unistd.h>

int main()
{
   char* programs[] = {"/usr/bin/ls", "/usr/bin/date"};
   char* args[] = {NULL, NULL};
   for (int i = 0; i < 2; ++i )
   {
      int pid = fork();
      if ( pid )
      {
         // Child
         args[0] = programs[i];
         execv(programs[i], args);
      }
   }
}