Linux系统编程——进程进阶:exec 族、system 与工作路径操作

目录

一、exec族函数

二、system函数

三、工作路径工具

1.getcwd(获取当前路径)

2.chdir(切换工作路径)


一、exec族函数

  • 核心功能:执行本地任意可执行文件,是进程代码替换的核心工具。
  • **典型搭配:**常和 fork() 配合。让子进程执行 exec,避免父进程自身代码被替换。
  • 内存逻辑 :
    • 执行 exec 后,原进程的代码段会被新程序完全覆盖;
    • 新程序运行结束,整个进程直接终止(原进程中 exec 之后的代码不会执行)。

执行 exec 之前:

执行 exec 之后:

函数区分:

  • l(list):参数以列表形式传
cpp 复制代码
原型:int execl(const char *path, const char *arg, ...);

示例:execl("/bin/ls", "ls", "-a", NULL);

path:需要执行新程序的路径+文件名

arg:是新程序所需要的参数列表,结束标志NULL

  • v(vector):参数存在数组里传
cpp 复制代码
原型:int execv(const char *path, char *const argv[]);

示例:char* arg[] = {"ls", "-l", NULL}; 
     execv("/bin/ls", arg);

path:需要执行新程序的路径+文件名

argv:存放参数的数组 ,最后一个参数是NULL

  • p(PATH):自动从环境变量查程序
cpp 复制代码
原型:int execlp(const char *file, const char *arg, ...);

示例:execlp("ls", "ls", "-l", NULL); // 无需写全路径

file:需要执行新程序的文件名(默认在环境变量PATH中查找)

arg:是新程序所需要的参数列表,结束标志NULL

二、system函数

  • **功能:**一键执行 Shell 命令(如 ls/mkdir),适合简单系统操作。
  • **内部实现:**底层是 fork()+exec 的封装,省去手动编写进程控制逻辑的步骤。
  • **限制:**不能执行修改父进程状态的命令(如 cd,仅对 system 内部子进程生效)。
  • **用法:**int ret = system("ls -l");(返回 -1 代表执行失败)。

三、工作路径工具

1.getcwd**(获取当前路径)**

  • **功能:**把当前工作路径存入字符数组;
  • **用法:**char buf1024; getcwd(buf, sizeof(buf));(失败返回NULL)。

2.chdir(切换工作路径)

  • 功能:修改进程的当前工作目录;
  • 用法:int ret = chdir("/home/user");(成功返回0,失败返回-1)。
相关推荐
叼烟扛炮13 分钟前
[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战
服务器·开发语言·网络·笔记·学习·langchain
福建佰胜张工30 分钟前
深度解析 Allen-Bradley 150-B135NBDA 智能电机控制器:选型、参数与工业应用
运维·数据库·单片机·嵌入式硬件·安全·自动化
wefg137 分钟前
【Docker】镜像相关指令
运维·docker·容器
feng_you_ying_li1 小时前
linux之网络层
linux·运维·网络
未来之窗软件服务1 小时前
Linux 运维日志删除的多种方式—东方仙盟
linux·运维·服务器·仙盟创梦ide·东方仙盟
卓豪终端管理1 小时前
IT 运维视角下的终端数据安全:能力框架与落地清单
运维
小雉系统1 小时前
BcoreOS实战:用一个升级包,让Rocky Linux跑进Debian服务器
linux·运维·服务器·debian
thethefighter1 小时前
快速预览Word、WPS秒开,支持空格弹窗
linux·word·wps·快速预览·空格弹窗·nhdeepview
甜到心里的蛋糕1 小时前
从 QQ 机器人到 B 站 AI 运营:一套可复现的视频流水线踩坑实录
运维·人工智能·python·自动化·视频制作
QYR-分析2 小时前
26.2% 高增!场内及园区无人物流车,厂内短驳自动化的 L4 货运载体
运维·自动化