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