- 带字母l的表示参数需要逐个给出, 以NULL结尾。如:
execl("/bin/ls", "ls", "-a", NULL);
- 带字母v的表示参数可以以数组的形式给出。如:
char *arr = {"ls", "-a", NULL}; execv("/bin/ls", arr);
- 带字母p的表示文件路径可以只填写文件名。如:
execvp("ls", arr);
- 带字母e的表示新进程(就是替换子进程的那个进程)的环境变量可以在envp[]数组中自定义。如
execve("ls", arr, envp);
示例代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main() {
printf("main: %d\n", (int)getpid());
char *arr[] = {"ls", "-a", NULL};
if(!fork()) {
printf("execl\n");
if(execl("/bin/ls", "ls", "-a", NULL) == -1) {
printf("execl error\n");
exit(1);
}
}
wait(NULL);
if(!fork()) {
printf("execle\n");
if(execle("/bin/ls", "ls", "-a", NULL, NULL) == -1) {
printf("execle error\n");
exit(1);
}
}
wait(NULL);
if(!fork()) {
printf("execlp\n");
if(execlp("ls", "ls", "-a", NULL) == -1) {
printf("execlp error\n");
exit(1);
}
}
wait(NULL);
if(!fork()) {
printf("execv\n");
if(execv("/bin/ls", arr) == -1) {
printf("execv error\n");
exit(1);
}
}
wait(NULL);
if(!fork()) {
printf("execve\n");
if(execve("/bin/ls", arr, NULL) == -1) {
printf("execve error\n");
exit(1);
}
}
wait(NULL);
if(!fork()) {
printf("execvp\n");
if(execvp("ls", arr) == -1) {
printf("execvp error\n");
exit(1);
}
}
return 0;
}