当前位置: 首页 > 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.jsqmd.com/news/94294/

相关文章:

  • 8、Linux系统中的用户、组管理与文件权限设置
  • Font Awesome 性别图标
  • 2025年数据中心芯片领域最热门发展趋势
  • 泛型继承实战指南(高级程序员必知的3个隐秘特性)
  • 【气象数据异常识别终极指南】:掌握R语言极端值检测的5大核心方法
  • 从补课依赖到动能重生:解码青少年厌学背后的家庭能量闭环
  • 为什么你的微服务无法在AOT模式下运行:3大兼容性瓶颈全曝光
  • R与Python模型融合结果对比(权威验证框架曝光)
  • Python 设计模式:拦截器 - 指南
  • 低代码时代PHP配置存储如何选型:3种方案对比与最佳实践
  • 如何利用微信个人号API接口进行二次开发?
  • java计算机毕业设计实体店管理系统 基于Java的线下门店综合运营平台 SpringBoot+MySQL服饰实体店铺数字化管理系统
  • 4、Linux 命令行与文件系统导航全解析
  • R语言克里金插值实战指南(环境监测数据处理的黄金标准)
  • 为什么你的应用越跑越慢?内存碎片正在悄悄吞噬资源
  • 5、Linux 文件压缩、归档与文本文件管理全解析
  • 萤石开放平台 国标设备接入 | 三方品牌设备接入文档/宇视IPC对接文档
  • java计算机毕业设计实验室设备管理系统的设计与实现 基于SpringBoot的高校实验仪器全生命周期管理平台 Java Web实验资源与设备智能调度系统
  • Product Hunt 每日热榜 | 2025-12-15
  • 还在手动写PHP接口文档?GraphQL自动化方案让团队效率翻倍
  • Ubuntu系统中查询显卡的生产日期
  • 【PHP性能瓶颈终极突破】:用Rust扩展实现内存零泄漏管理
  • 【农业传感器数据存储优化】:PHP环境下高效处理海量农田数据的5大核心策略
  • 6、Linux 文本文件管理实用指南
  • Wallpaper Generator:前端性能优化、UI状态管理与实时渲染的用户体验
  • 【高危预警】PHP未授权访问漏洞正在威胁你的医疗数据库?
  • 7、Linux 文本文件管理与用户组管理全解析
  • 【临床数据生存分析实战指南】:掌握R语言绘制生存曲线的5大核心技巧
  • GTA 风格 AI 生成器:提示词工程、LLM创造性联想与模因的自动化生成
  • 5个关键R包搞定甲基化数据分析,生物信息新手也能快速上手