我正在使用execl编写程序来执行我的正在测试的exe文件,它运行良好,并在Linux CLI中显示输出。但是我不知道如何将execl更改为execv,尽管我知道两个系统调用都会给出相同的值。我对execv系统调用的array参数感到困惑

这是我的execl示例程序

int main(void)
{
   int childpid;
   if((childpid = fork()) == -1 )
{
   perror("can't fork");
   exit(1);
}
 else if(childpid == 0)
{
  execl("./testing","","",(char *)0);
  exit(0);
}
else
{
printf("finish");
exit(0);
}
}

我可以知道如何将execl更改为execv吗?我从网上阅读的内容必须设置exe文件的文件路径和array的参数。为了要求程序执行测试exe文件,需要为数组设置哪种类型的参数?
https://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/execv.htm链接是否包含我想要的东西?但是我从中读取的命令是请求列出文件,而不是执行文件。纠正我,我有任何错误

最佳答案

为了看到差异,这是执行ls -l -R -a的代码行

  • execl(3) :
    execl("/bin/ls", "ls", "-l", "-R", "-a", NULL);
    
  • execv(3) :
    char* arr[] = {"ls", "-l", "-R", "-a", NULL};
    execv("/bin/ls", arr);
    

  • 发送到char(*)[]execv将作为/bin/ls(在argv中)传递给int main(int argc, char **argv)

    关于c - 如何在Linux中使用execv系统调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32142164/

    10-11 22:57