目录
一、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 buf[1024]; getcwd(buf, sizeof(buf));(失败返回NULL)。
2.chdir(切换工作路径)
- 功能:修改进程的当前工作目录;
- 用法:int ret = chdir("/home/user");(成功返回0,失败返回-1)。