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