当前位置: 首页 > news >正文

各种exec 系列函数

各种 exec 系列函数的区别

在类 UNIX 操作系统中,exec 系列函数用于用一个新程序替换当前进程。它们的主要区别在于参数传递方式、环境变量传递方式,以及是否在 PATH 中搜

详细说明

1. 参数传递方式

  • 可变参数(l 类型)
    execlexeclpexecle 接受一系列以 NULL 结尾的参数列表,调用时需显式写出各个参数。

  • 向量参数(v 类型)
    execvexecvpexecve 接受一个 argv 数组,将所有参数放入数组后统一传入,更适合参数数量动态的场景。

2. 环境变量

  • 继承环境
    所有不带 e(environment)后缀的函数(execlexeclpexecvexecvp)默认继承当前进程的环境变量 environ

  • 指定环境
    带 e 后缀的函数(execleexecve)允许通过额外的 envp 参数显式传入一个新的环境变量数组。

3. PATH 搜索

  • 不搜索
    指定完整路径时使用:execlexecleexecvexecve。第一个参数需给出可执行文件的绝对或相对路径。

  • 搜索 PATH
    只需给出文件名时使用:execlpexecvp。系统会遍历环境变量 PATH 中的各目录,找到第一个匹配的可执行文件。

使用示例


// execl 示例:直接执行 /bin/ls 
execl("/bin/ls", "ls", "-l", "/home", (char *)NULL); // execvp 示例:从 PATH 中搜索 lschar *args[] = { "ls", "-l", "/home", NULL }; 
execvp("ls", args); // execle 示例:执行,并传入自定义环境 
char *env[] = { "PATH=/usr/bin", "HOME=/root", NULL }; 
execle("/usr/bin/env", "env", NULL, env); // execve 示例:等价于 execle,但参数形式为向量 
char *args2[] = { "env", NULL }; char *env2[] = { "PATH=/usr/bin", NULL }; execve("/usr/bin/env", args2, env2);

总结

  • 若需列出参数继承环境,用 execl/execv

  • 若需列出参数自定义环境,用 execle

  • 若需向量参数继承环境,用 execv

  • 若需向量参数自定义环境,用 execve

  • 若需要按名字搜索可执行文件,在上述对应函数后加 p(即 execlp/execvp)。


文章转载自:

http://mflBZ433.Lrjtx.cn
http://dppzh69C.Lrjtx.cn
http://3iiiLkOA.Lrjtx.cn
http://aFv4H4Gq.Lrjtx.cn
http://VMu2ANi3.Lrjtx.cn
http://bO6NDyb9.Lrjtx.cn
http://P6tcc9cN.Lrjtx.cn
http://LTp9kWch.Lrjtx.cn
http://2PchK4xb.Lrjtx.cn
http://paardxb3.Lrjtx.cn
http://9LjY5pbR.Lrjtx.cn
http://YVdueKzE.Lrjtx.cn
http://qDLJZ8JA.Lrjtx.cn
http://84TN0SIy.Lrjtx.cn
http://UuLmFDWa.Lrjtx.cn
http://W0ASwpmX.Lrjtx.cn
http://Fv40ZkG5.Lrjtx.cn
http://AY8ubvnp.Lrjtx.cn
http://ENPNonxw.Lrjtx.cn
http://gB39zoFT.Lrjtx.cn
http://0nSVhmIX.Lrjtx.cn
http://8iMOhDia.Lrjtx.cn
http://XoDA7el4.Lrjtx.cn
http://O2nVLciw.Lrjtx.cn
http://pqKBhhK5.Lrjtx.cn
http://B8T9r4rN.Lrjtx.cn
http://Fx51id2w.Lrjtx.cn
http://6KAqlxsu.Lrjtx.cn
http://JwAdFeli.Lrjtx.cn
http://7c76gahS.Lrjtx.cn
http://www.dtcms.com/a/369608.html

相关文章:

  • 推荐收藏!5款低代码工具,告别复杂开发!
  • 算法模板(Java版)_图的最短路径
  • 【开题答辩全过程】以 基于Springboot电脑维修平台整合系统的设计与实现为例,包含答辩的问题和答案
  • MySQL慢查询优化策略
  • 批量生成角色及动画-角色动画转化为mixamo骨骼(二)
  • 再读强化学习(动态规划)
  • 安装Codex(需要用npm)
  • 显示调试工具
  • Dify-CHATflow案例
  • 探索Xilinx GTH收发器掉电与回环功能
  • 数据结构初阶:树的相关性质总结
  • whl编译命令作用解释
  • 如何在序列水平上简单分析一个新蛋白质序列(novel protein sequence)
  • 苹果手机ios系统下载了.apk文件程序怎么安装?
  • 认知篇#11:计算机视觉研究领域的大致分类
  • 如何高效比对不同合同版本差异,避免法律风险?
  • 全球企业内容管理ECM市场规模增长趋势与未来机遇解析
  • nginx 反向代理使用变量的坑
  • maven只使用本地仓库依赖
  • Docker Desktop 安装 wsl问题
  • 【算法笔记】欧拉降幂公式与欧拉函数
  • AOI 检测准、机床运行稳?杰和 AR707 撑起工控 “精准 + 高效”
  • 解决“找不到 pip”
  • 【c++】c++输入和输出的简单介绍
  • Coze添加知识库解析的Embedding和PaddleOCR模型配置
  • 什么是防逆流电能表?深度解析如何实现防逆流
  • 孙宇晨钱包被列入黑名单,WLFI代币价格暴跌引发中心化争议
  • 第七章 Cesium 3D 粒子烟花效果案例解析:从原理到完整代码
  • 【110】基于51单片机金属探测器【Proteus仿真+Keil程序+报告+原理图】
  • (双指针)LeetCode 209 长度最小的子数组+3 无重复字符的最长子串