exec函数系列用新进程替换当前正在运行的进程。它可以通过使用另一个C程序来运行一个C程序。它位于头文件下 unistd。H exec家族中有许多成员,下面举例说明。
- 执行 :使用此命令,创建的子进程不必运行与父进程相同的程序。这个 执行官 类型系统调用允许进程运行任何程序文件,包括二进制可执行文件或shell脚本。 语法:
int execvp (const char *file, char *const argv[]);
文件: 指向与正在执行的文件关联的文件名。 argv: 是以null结尾的字符指针数组。
让我们看一个小例子来说明如何在C中使用execvp()函数。C文件, 执行官。C 和 执行演示。C 我们将替换execDemo。c和EXEC。通过调用execDemo中的execvp()函数。C
//EXEC.c
#include<stdio.h>
#include<unistd.h>
int
main()
{
int
i;
printf
(
"I am EXEC.c called by execvp() "
);
printf
(
""
);
return
0;
}
现在,创建EXEC的可执行文件。c使用命令
gcc EXEC.c -o EXEC
//execDemo.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int
main()
{
//A null terminated array of character
//pointers
char
*args[]={
"./EXEC"
,NULL};
execvp(args[0],args);
/*All statements are ignored after execvp() call as this whole
process(execDemo.c) is replaced by another process (EXEC.c)
*/
printf
(
"Ending-----"
);
return
0;
}
现在,创建execDemo的可执行文件。c使用命令
gcc execDemo.c -o execDemo
运行execDemo的可执行文件后。cby使用命令/在演示中,我们得到以下输出:
I AM EXEC.c called by execvp()
当文件执行演示时。编译c时,只要执行语句execvp(args[0],args),这个程序就会被程序EXEC替换。c、 不打印“Ending-–”,因为只要调用execvp()函数,该程序就会被程序EXEC替换。C
- execv :这在语法方面也与execvp()函数非常相似。的语法 execv() 如下所示: 语法:
int execv(const char *path, char *const argv[]);
路径: 应该指向正在执行的文件的路径。 argv[]: 是以null结尾的字符指针数组。
让我们看一个小例子来说明如何在C中使用execv()函数。这个例子与上面显示的execvp()的例子类似。我们要两个。C文件, 执行官。C 和 执行演示。C 我们将替换execDemo。c和EXEC。通过调用execDemo中的execv()函数。C
//EXEC.c
#include<stdio.h>
#include<unistd.h>
int
main()
{
int
i;
printf
(
"I am EXEC.c called by execv() "
);
printf
(
""
);
return
0;
}
现在,创建EXEC的可执行文件。c使用命令
gcc EXEC.c -o EXEC
//execDemo.c
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int
main()
{
//A null terminated array of character
//pointers
char
*args[]={
"./EXEC"
,NULL};
execv(args[0],args);
/*All statements are ignored after execvp() call as this whole
process(execDemo.c) is replaced by another process (EXEC.c)
*/
printf
(
"Ending-----"
);
return
0;
}
现在,创建execDemo的可执行文件。c使用命令
gcc execDemo.c -o execDemo
运行execDemo的可执行文件后。c通过使用命令/在演示中,我们得到以下输出:
I AM EXEC.c called by execv()
- execlp和execl :这两个词的用途相同,但语法有点不同,如下所示: 语法:
int execlp(const char *file, const char *arg,.../* (char *) NULL */); int execl(const char *path, const char *arg,.../* (char *) NULL */);
文件: 与正在执行的文件关联的文件名 常量字符*arg 和省略号 :描述指向以null结尾的字符串的一个或多个指针的列表,这些字符串表示可用于已执行程序的参数列表。
上面显示的相同C程序可以用execlp()或execl()函数执行,它们将执行相同的任务,即用新进程替换当前进程。
- execvpe和execle :这两个函数也有相同的用途,但它们的语法与exec家族的所有上述成员略有不同。它们的语法如下所示: 语法:
int execvpe(const char *file, char *const argv[],char *const envp[]); Syntax: int execle(const char *path, const char *arg, .../*, (char *) NULL, char * const envp[] */);
上面显示的语法有一个不同于上述所有exec成员的参数,即。 char*const envp[]: 允许调用方通过参数envp指定已执行程序的环境。 环境: 此参数是指向以null结尾的字符串的指针数组,必须以null指针结尾。其他函数从调用进程中的外部变量environ获取新进程映像的环境。
参考: 执行官(3)手册页
本文由 马扎尔·伊玛目·汗 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 贡献极客。组织 或者把你的文章寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。