吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → C中的exec函数族

C中的exec函数族

来源:网络 | 更新时间:2022-01-12 21:12:45
exec 系列函数将当前正在运行的进程替换为新进程。它可用于通过使用另一个 C 程序来运行 C 程序。它位于头文件unistd.h 下。 exec 家族中有许多成员,如下所示。
  • execvp:使用此命令,创建的子进程不必运行与父进程相同的程序。该高管类型的系统调用允许一个进程运行的任何程序文件,包括二进制可执行文件或shell脚本。 句法:
int execvp (const char *file, char *const argv[]);
file: 指向与正在执行的文件关联的文件名。 argv:  是一个空字符指针数组。 让我们看一个小例子来展示如何在 C 中使用 execvp() 函数。我们将有两个 .C 文件,EXEC.cexecDemo.c,我们将通过调用 execvp() 将 execDemo.c 替换为 EXEC.c execDemo.c 中的函数。
//EXEC.c

#include<stdio.h>
#include<unistd.h>

int main()
{
int i;

printf("I am EXEC.c called by execvp() ");
printf("n");

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
使用命令 ./excDemo 运行 execDemo.c 的可执行文件后,我们得到以下输出:
I AM EXEC.c called by execvp()
当文件 execDemo.c 被编译时,只要语句 execvp(args[0],args) 被执行,这个程序就会被程序 EXEC.c 替换。“Ending---”没有打印出来,因为只要调用 execvp() 函数,这个程序就会被 EXEC.c 程序替换。
  • execv:这在语法方面也与 execvp() 函数非常相似。execv()的语法如下所示:语法:
int execv(const char *path, char *const argv[]);
path:应该指向正在执行的文件的路径。 argv[]:是一个空字符指针数组。 让我们看一个小例子来展示如何在 C 中使用 execv() 函数。这个例子类似于上面为 execvp() 显示的例子。我们将有两个 .C 文件,EXEC.cexecDemo.c,我们将通过调用 execDemo.c 中的 execv() 函数将 execDemo.c 替换为 EXEC.c。
//EXEC.c

#include<stdio.h>
#include<unistd.h>

int main()
{
int i;

printf("I am EXEC.c called by execv() ");
printf("n");
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
使用命令 ./excDemo 运行 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 */);
  • file:  与正在执行的文件关联的文件名 const char *arg 和 ellipses:描述一个或多个指向空终止字符串的指针的列表,这些字符串表示已执行程序可用的参数列表。 上面显示的相同 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 指定执行程序的环境。 envp:此参数是一个指向以空字符结尾的字符串的指针数组,并且必须以空指针结尾。其他函数从调用进程中的外部变量 environ 获取新进程映像的环境。  

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com