这些是可以在C(和C++)中使用的exec的所有版本
execl
execle
execlp
execv
execve
execvp
Run Code Online (Sandbox Code Playgroud)
他们之间有什么区别?你怎么知道使用哪一个?
我正在编写一个程序,使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
我可以知道如何将execl更改为execv.我从网上读到的,我们必须设置我的exe文件的文件路径和数组的参数.为了要求程序执行测试exe文件,需要为数组设置什么类型的参数?
https://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/execv.htm
链接是否包含我想要的内容?但是我从中读到的是,命令是请求列表文件,而不是执行文件.纠正我,我犯了任何错误
我正在编写一个代表 Linux 新 shell 的代码。我想要支持的命令之一是运行一个进程,例如,如果我得到以下行
command [arguments]
然后我想command作为一个进程运行,直到它完成运行该进程。
为此,我知道我需要使用fork()它来获取子进程并获取它的 PID,我的问题是我不知道它们之间有什么区别:
exec, execvp, execl, execv... 我不知道该使用哪个以及为什么。
我目前的代码:
void External_Process(char *arguments[MAX_ARG], char* command)
{
int pID;
switch(pID = fork())
{
case -1:
perror("fork failed");
break;
case 0 :
setpgrp();
//execv(command, arguments);
//execvp(command, arguments);
//execl("/bin/bash", "/bin/bash","-c",command,NULL);
printf("smash error: > bad command %s\n" , command);
exit(-1) ;
break;
default:
return ;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢 !