从主要参数执行程序

时间:2016-03-12 21:27:19

标签: c fork exec

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

  

./ progr3 progr1 progr2

     

progr1的结果

     

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()并没有像我希望的那样一起工作。我怎样才能改变程序以做我想做的事?

2 个答案:

答案 0 :(得分:0)

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

相反,请使用system创建新流程。无需分叉:

int system(const char *command)

答案 1 :(得分:0)

运行时

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

prog3已被prog1取代。因此,prog3的逻辑丢失了。

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

如果您只对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);
      }
   }
}