从概念到实战:详解功率地、数字地、模拟地等关键接地方式的设计要点
2026/4/18 23:18:53
exec族函数用于执行系统中的可执行文件,通常与fork配合使用。fork创建子进程后,子进程调用exec执行新程序。调用exec后,进程的代码段会被新程序替换,新程序执行完毕后进程结束。
参数传递方式差异
l(list):参数逐个列出,以NULL结尾v(vector):参数通过数组(argv)传递,数组以NULL结尾p(PATH):自动在环境变量PATH中查找可执行文件execl
int execl(const char *path, const char *arg, ..., NULL);path:可执行文件的完整路径arg:可变参数列表,以NULL结束execlp
int execlp(const char *file, const char *arg, ..., NULL);file:可执行文件名(通过PATH查找)arg:可变参数列表,以NULL结束execv
int execv(const char *path, char *const argv[]);path:可执行文件的完整路径argv:参数数组,以NULL结尾execvp
int execvp(const char *file, char *const argv[]);file:可执行文件名(通过PATH查找)argv:参数数组,以NULL结尾调用自身程序
若需调用当前可执行程序,所有函数均需传入完整路径(路径+文件名)。
system
int system(const char *command);fork+exec完成-1:执行失败获取当前工作目录
char *getcwd(char *buf, size_t size);buf:存储路径的字符数组size:缓冲区大小buf指针,失败返回NULL修改当前工作目录
int chdir(const char *path);path:目标路径0成功,-1失败exec调用成功后,原进程代码段被替换,后续代码不会执行。system适用于简单Shell命令,复杂交互建议使用fork+exec组合。