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

自学嵌入式day31,waitpid,system 函数

waitpid 和 wait 函数

waitpid(-1, status, 0)等同于wait(status)
waitpid函数原型为pid_t waitpid(pid_t pid, int *status, int options)

参数说明:

  • pid取值决定回收的子进程范围:

    • <-1:回收指定进程组内的任意子进程。
    • -1:回收任意子进程(组内外)。
    • 0:回收与调用waitpid同进程组的所有子进程。
    • >0:回收指定 PID 的子进程。
  • status:存储子进程退出状态。若无需状态可设为NULL

  • options

    • 0:阻塞等待回收。
    • WNOHANG:非阻塞模式,需通过返回值判断是否回收成功(通常搭配循环使用)。

返回值:

  • 成功:返回被回收子进程的 PID。
  • 失败:返回-10(非阻塞模式下无子进程退出)。
  • 错误码:如EAGAIN表示资源暂时不可用。

exec 函数族

用于替换当前进程的代码和数据为新程序,不创建新进程(PID 不变)。

函数分类:
  1. execl

    int execl(const char *path, const char *arg, ...);
    • path:新程序的完整路径(如"/bin/ls")。
    • arg:参数列表,以NULL结尾(如"ls", "-al", "/bin", NULL)。
  2. execlp

    int execlp(const char *file, const char *arg, ...);
    • file:通过环境变量PATH查找程序文件名(如"firefox")。
  3. execv

    int execv(const char *path, char *const argv[]);
    • argv:参数数组(如{"ls", "-al", "/bin", NULL})。
  4. execvp

    int execvp(const char *file, char *const argv[]);
    • file:通过PATH查找文件名。

注意:

  • 调用成功后,原进程代码被替换,后续代码(如printf)不会执行。
  • 若需调用自身程序,第一个参数需为完整路径。

system 函数

执行 Shell 命令(如文件操作或信息输出):

int system(const char *command);
  • command:Shell 命令字符串。
  • 返回值:
    • -1:失败(如fork出错)。
    • 其他:命令的退出状态。

实现原理:内部通过fork+exec完成。


工作目录相关函数

  1. 获取当前路径

    char *getcwd(char *buf, size_t size);
    • buf:存储路径的缓冲区。
    • size:缓冲区大小。
    • 返回值:成功返回buf,失败返回NULL
  2. 切换工作目录

    int chdir(const char *path);
    • path:目标路径。
    • 返回值:0成功,-1失败。
http://www.gsyq.cn/news/104835.html

相关文章:

  • 8、Linux系统中的用户、组管理与文件权限设置
  • Luogu9099 [PA 2020] Ogromne drzewo
  • 低代码时代PHP配置存储如何选型:3种方案对比与最佳实践
  • Ubuntu系统中查询显卡的生产日期
  • 5个关键R包搞定甲基化数据分析,生物信息新手也能快速上手
  • 为什么你的RNA-seq结果总出问题?R语言质控缺失可能是主因
  • 90%农学研究人员忽略的R语言技巧:方差分析结果精准解读
  • 2025年12月国内GEO营销服务商选型深度分析 - 2025年品牌推荐榜
  • 为什么90%的农业IoT项目都低估了PHP在异常过滤中的作用?
  • Laravel 13多模态任务队列实战指南(从入门到生产级落地)
  • C# Winform打造视觉缺陷检测框架:新能源与3C行业的利器
  • 基于SpringBoot + Vue的物流管理系统设计与实现
  • ToB 系统设计需要考虑的因素
  • 多模态校验时代来临:Laravel 13如何彻底改变PHP应用的数据验证方式?
  • 【R量子模拟实战指南】:掌握门操作序列的5大核心技巧
  • 护眼灯排名前十的品牌有哪些?年度权威榜单出炉,护眼效果超强!
  • Python实现深海声弹射路径仿真
  • 【AI编程】Qoder快速开发小程序
  • 如何安全迁移至PHP 8.6?揭秘企业级兼容性测试流程与工具推荐
  • 基于模型预测控制的ACC巡航车队仿真:Matlab与CarSim的完美结合
  • 多模态缓存清理全解析,Laravel 13开发者必须掌握的3种高阶技巧
  • 软件开发全流程注意事项:避坑指南与效率提升
  • 从传感器到图表:PHP实现农业数据实时可视化的5个关键步骤
  • 开放土壤光谱库:建立可复制的土壤校准模型(PLOS ONE,2025)
  • 在前端中list.map的用法
  • 自动驾驶—CARLA仿真(10)tutorial_gbuffer demo
  • Google Vids:由AI驱动的工作视频创作 | ProductHunt 今日热榜 - 12月15日
  • 【专家亲授】低代码环境下PHP组件动态更新的8个最佳实践
  • Transformer模型详解系列:Qwen-Image背后的MMDiT架构原理
  • 半导体设备报警诊断程序技术方案