c - 如何在linux中使用execv系统调用?

标签 c linux unix exec

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

这是我的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);
    

发送到execvchar(*)[]会作为argv传递给/bin/ls > (在 int main(int argc, char **argv))

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

相关文章:

C 库、makefile 头依赖项

比较两个文件的列

linux - sed:只是试图删除一个子字符串

linux - 在剪切期间添加异常(exception)会返回不需要的结果

我们可以用阻塞套接字制作一个非阻塞服务器吗?

c - 为什么使用第三个变量比加法技巧更快?

c++ - PThread 是多平台/C++ 多线程程序的好选择吗?

linux - 如何调试正在运行的 bash 脚本

Java:从终端读取输入提示

linux - 使用 rexec 时的随机错误