exec()
系列函数用于在当前进程中执行新的程序,它们是 Unix/Linux 系统中实现进程控制的重要组成部分。这些函数可以替换当前进程的映像,使其执行不同的程序,而不是创建新的进程。
下面介绍主要的exec()
系列函数:
1. execl
用法:
接受程序路径、参数列表,参数以 NULL 结束。
示例:
execl("/bin/ls", "ls", "-l", NULL);
这个示例将当前进程替换为 /bin/ls
程序,参数为 -l
。
2. execv
用法:
接受程序路径和参数数组,参数以 NULL 结束。
示例:
char *args[] = {"ls", "-l", NULL};
execv("/bin/ls", args);
这个示例与 execl 类似,但是参数以数组形式传递。
3. execle
用法:
类似于 execl
,但可以指定环境变量,最后一个参数为环境变量数组。
示例:
char *env[] = {"PATH=/usr/bin", NULL};
execle("/bin/ls", "ls", "-l", NULL, env);
4. execve
用法:
底层的实现,接受程序路径、参数数组和环境变量数组。
示例:
char *args[] = {"ls", "-l", NULL};
char *env[] = {NULL};
execve("/bin/ls", args, env);
5. execvp
用法:
用于执行指定的程序,它会根据环境变量 PATH 自动查找可执行文件。它与 execv 类似,但 execvp 的第一个参数是文件名,而不是文件的完整路径。
语法:
int execvp(const char *file, char *const argv[]);
-
file:要执行的程序的名称(不需要完整路径,execvp 会根据 PATH 查找)。
-
argv:参数数组,以 NULL 结尾。数组的第一个元素通常是程序的名称。
返回值:成功时不会返回;如果失败,返回 -1,并设置 errno。