exec
函数是 C++ 中用于在当前进程中执行另一个程序的库函数。它属于 <unistd.h>
头文件。exec
函数有多个版本,可以根据需要选择合适的版本。下面是 exec
函数的一些常见用法:
execl
:执行一个可执行文件,并替换当前进程的映像。#include <unistd.h>
int main() {
char *argv[] = {"ls", "-l", NULL}; // 注意最后一个元素必须是 NULL
execl("/bin/ls", "ls", "-l", NULL);
return 0; // 这里的 return 语句永远不会被执行
}
execv
:执行一个可执行文件,并替换当前进程的映像。与 execl
类似,但参数以数组形式传递。#include <unistd.h>
int main() {
char *argv[] = {"ls", "-l", NULL}; // 注意最后一个元素必须是 NULL
execv("/bin/ls", argv);
return 0; // 这里的 return 语句永远不会被执行
}
execle
:执行一个可执行文件,并替换当前进程的映像,同时设置环境变量。#include <unistd.h>
int main() {
char *argv[] = {"ls", "-l", NULL}; // 注意最后一个元素必须是 NULL
char *envp[] = {"PATH=/usr/local/bin:/usr/bin:/bin", NULL}; // 设置环境变量
execle("/bin/ls", "ls", "-l", NULL, envp);
return 0; // 这里的 return 语句永远不会被执行
}
execvp
:执行一个可执行文件,并替换当前进程的映像。与 execl
类似,但参数以数组形式传递,并且从第二个参数开始传递。#include <unistd.h>
int main() {
char *argv[] = {"ls", "-l", NULL}; // 注意最后一个元素必须是 NULL
execvp("ls", argv);
return 0; // 这里的 return 语句永远不会被执行
}
execlp
:在当前用户的 PATH 环境变量中查找可执行文件并执行它。#include <unistd.h>
int main() {
char *argv[] = {"ls", "-l", NULL}; // 注意最后一个元素必须是 NULL
execlp("ls", "ls", "-l", NULL);
return 0; // 这里的 return 语句永远不会被执行
}
execv
:与 execvp
类似,但参数以数组形式传递,并且从第二个参数开始传递。#include <unistd.h>
int main() {
char *argv[] = {"ls", "-l", NULL}; // 注意最后一个元素必须是 NULL
execv("/bin/ls", argv);
return 0; // 这里的 return 语句永远不会被执行
}
请注意,exec
函数族中的所有函数都会替换当前进程的映像,因此在调用这些函数之后,原来的代码将不会被执行。此外,exec
函数不会返回,除非执行失败。在这种情况下,可以使用 errno
变量来获取错误代码。