exec函数簇理解
关键点解释:
fork()创建子进程后,子进程调用execlp。因为execlp会在PATH环境变量中搜索ls,所以不必写完整路径。- 参数列表以 可变参数 形式提供,必须以
(char *)NULL结束,以告诉execlp参数已完结。 - 若
execlp成功,子进程的代码段立即被ls程序取代,后续的perror与exit不会执行。 - 若搜索失败或权限不足,
execlp返回-1,errno被设置,perror打印错误信息。
4. 其它函数的差异细节
4.1 execl vs execlp
- 路径处理:
execl需要提供 完整路径(如/bin/ls),而execlp只需要文件名,系统会依据PATH环境变量进行搜索。 - 使用场景:当你确信可执行文件所在路径固定且不想依赖
PATH时,使用execl;若希望保持灵活性或遵循系统默认搜索规则,使用execlp。
4.2 execle
- 环境定制:
execle允许调用者显式提供一个环境向量envp,从而在新程序中覆盖或添加环境变量。例如: