如何使用execl()函数或其他类型的exec()函数来执行echo命令?

时间:2015-09-24 21:49:24

标签: c linux unix

我有一个问题,我使用以下程序(fork()函数)创建一个子进程,使用execl()重载另一个程序。如果我想在execl()函数或其他类型的exec()函数中使用echo命令,我该怎么办?我使用以下程序,但它失败了!终端给了我一个警告:echo:无法访问hello world!:没有这样的文件或目录 这是父母!

 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <sys/wait.h>

   int main()
   {   pid_t childpid;
       childpid=fork();

       if(childpid==-1){
           perror("failed to fork");
           return 1;
           }
       if(childpid==0)
       {    
          execl("/bin/ls","echo","hello world!",NULL);
          perror("child failed to exec");
          return 1;
          }
       if(childpid!=wait(NULL)){
       perror("parent failed to wait due to signal or error");
       return 1;
       }
       sleep(5);
       printf("this is parent!\n");



       return 0;
   }

1 个答案:

答案 0 :(得分:1)

您正在执行的命令是:

/bin/ls "echo" "hello world!"

您可能想要执行的是(假设您使用bash):

/bin/bash -c 'echo "hello world!"'

所以使用:

execl("/bin/bash","-c","echo \"hello world!\"",NULL);

您可能希望在使用perror之前检查错误。

编辑:

根据EOF的推荐,您应该使用system来电而不是exec。它处理为您创建子进程,并允许您专注于手头的任务(即调用shell命令)。可能的缺点是它在继续之前等待子进程死掉,但这很可能不是问题(不管怎么说都不是这样)。它也会忽略某些可能不合适的信号(SIGINTSIGQUIT),具体取决于您设计程序的方式。