2026/6/24 19:40:07
网站建设
项目流程
常州金坛建设局网站,网站业务流程设计,口碑营销的优势,网站名称重要吗一、exec 族函数
1. 核心功能
exec 族函数的核心作用是替换当前进程的代码段、数据段和堆栈段#xff0c;执行系统上的任意一个可执行文件#xff08;二进制程序或脚本#xff09;。执行后#xff0c;原进程的代码会被新程序完全替换#xff0c;新程序从main函数开始执行…一、exec 族函数1. 核心功能exec 族函数的核心作用是替换当前进程的代码段、数据段和堆栈段执行系统上的任意一个可执行文件二进制程序或脚本。执行后原进程的代码会被新程序完全替换新程序从main函数开始执行若 exec 函数执行成功原进程后续的代码不会再执行只有新程序执行结束整个进程才会终止。通常 exec 族函数会与fork()搭配使用父进程通过 fork 创建子进程子进程调用 exec 执行新程序父进程则负责等待子进程结束如使用wait()/waitpid()这样既保留了父进程又能让子进程执行新任务。2. 命名规则与参数含义exec 族函数的命名后缀l/v/p有明确含义是理解其用法的关键llist参数以可变参数列表的形式逐个传入最后以NULL作为结束标志。vvector参数存储在字符串数组中数组最后一个元素必须是NULL。pPATH只需传入可执行文件的文件名函数会自动在系统环境变量PATH指定的路径中查找该文件若无p后缀则需要传入完整路径 文件名。3. 常用 exec 函数原型与说明1execl#include unistd.h int execl(const char *path, const char *arg, ...);参数path待执行程序的完整路径 文件名如/bin/ls。arg新程序的参数列表第一个参数通常是程序名本身后续为具体参数最后以NULL结束。返回值执行成功则无返回原进程已被替换执行失败返回-1并设置errno。2execlp#include unistd.h int execlp(const char *file, const char *arg, ...);参数file待执行程序的文件名如ls函数会在PATH环境变量中查找该文件。arg参数列表规则同execl以NULL结束。返回值成功无返回失败返回-1。3execv#include unistd.h int execv(const char *path, char *const argv[]);参数path待执行程序的完整路径 文件名。argv存储参数的字符串数组数组第一个元素为程序名最后一个元素为NULL。返回值成功无返回失败返回-1。4execvp#include unistd.h int execvp(const char *file, char *const argv[]);参数file待执行程序的文件名依赖PATH环境变量查找。argv参数数组规则同execv最后以NULL结束。返回值成功无返回失败返回-1。4. 通用规则若需要调用自定义的可执行程序无论使用上述哪个 exec 函数只要将第一个参数path/file填写为完整路径 文件名都可以成功调用无需依赖PATH环境变量。二、system 函数system函数用于执行一个 shell 命令其内部实现依赖fork()exec()waitpid()先创建子进程子进程调用 exec 执行 shell 命令父进程等待子进程结束。注意system执行的 shell 命令不能是修改父进程状态的命令如cd因为子进程的环境修改不会影响父进程通常用于执行信息输出如ls、文件操作如rm/cp等无状态修改的命令。#include stdlib.h int system(const char *command);参数command需要执行的 shell 命令字符串如ls -l、rm test.txt。返回值若fork()失败或waitpid()出错返回-1若exec()失败如命令不存在返回值对应 shell 执行失败的状态若执行成功返回命令的退出状态。三、路径操作函数getcwd/chdir1. getcwd获取当前工作路径#include unistd.h char *getcwd(char *buf, size_t size);功能获取当前进程的工作目录即当前所在路径并存储到指定的字符数组中。参数buf用于存储路径的字符数组。size字符数组buf的最大长度需足够容纳路径字符串 结束符\0。返回值成功返回指向buf的指针失败返回NULL并设置errno如buf空间不足。2. chdir改变当前工作路径#include unistd.h int chdir(const char *path);功能将当前进程的工作目录切换到path指定的路径。参数path需要切换的目标路径可使用绝对路径或相对路径。返回值成功返回0失败返回-1并设置errno如路径不存在。注意点chdir仅修改当前进程的工作路径若在子进程中调用chdir不会影响父进程的工作路径进程间环境相互独立。