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

匿名管道实例

说明这段代码实现了**父子进程通过管道进行进程间通信(IPC)**的功能

核心功能流程:

  1. 参数验证- 检查是否提供了命令行参数

  2. 创建管道- 使用pipe()创建一条匿名管道

    • pipefd[0]用于读取
    • pipefd[1]用于写入
  3. 创建子进程- 使用fork()创建子进程

  4. 子进程部分

    • 关闭管道的写端pipefd[1]
    • 等待从管道读取父进程发送的数据
    • 接收后打印到控制台

设计目的:

  • 父进程将命令行参数通过管道写入给子进程
  • 子进程从管道读取数据并打印显示
#include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <string.h> int main(int argc, char *argv[]) { pid_t cpid; int pipefd[2]; // pipefd[0] 用于读,pipefd[1] 用于写 // 将程序传入的第一个命令行的参数通过管道传递给子进程,子进程接收后打印出来 if(argc < 2) { fprintf(stderr, "%s请提供一个命令行参数\n", argv[0]); return 1; } // 创建管道 if(pipe(pipefd) == -1){ perror("创建管道失败"); exit(EXIT_FAILURE); } //复制父子进程 cpid = fork(); if(cpid == -1) { perror("邀请新学员失败"); exit(EXIT_FAILURE); } if(cpid == 0) { //子进程 读取管道数据 打印到控制台 close(pipefd[1]); // 关闭写端 printf("子进程%d正在等待从管道读取数据...\n", getpid()); char *name = "子进程正在从管道读取数据...\n"; write(STDOUT_FILENO, name, strlen(name)); // 提示子进程正在读取数据 char buffer[1024] = {0}; while(read(pipefd[0], buffer, sizeof(buffer))> 0)// 从管道读取数据 { write(STDOUT_FILENO, buffer, strlen(buffer)); // 将管道数据写到标准输出 } write(STDOUT_FILENO, "\n", 1); // 输出换行符 close(pipefd[0]); // 关闭读端 _exit(EXIT_SUCCESS); } else { //父进程-写入管道数据-提供给子进程 //创建了一个管道,先不让你读,我先把管道关闭,等我写完了,我再把写关闭,后边就是你读了 close(pipefd[0]); // 关闭读端 // 将数据写入管道 printf("父进程%d正在将数据写入管道...\n", getpid()); write(pipefd[1], argv[1], strlen(argv[1])); // 将命令行参数写入管道 close(pipefd[1]); // 关闭写端 waitpid(cpid, NULL, 0); // 等待子进程结束 exit(EXIT_SUCCESS); } return 0; }
http://www.jsqmd.com/news/722215/

相关文章:

  • 开源鸿蒙 Flutter 实战|编译错误修复:Icons.active_sessions 不存在问题解决
  • 如何在Windows系统中使用Mem Reduct实现多语言内存监控:终极配置指南
  • 抖音下载器终极指南:3步免费获取高清无水印视频的完整方案
  • 医疗无线脚踏开关技术解析与应用实践
  • 飞书文档转Markdown:5分钟搞定文档格式转换的终极指南
  • AI岗位暴涨12倍成“香饽饽”!2026求职市场回温,高薪高要求成主流
  • 智源社区@2050 | 从大脑到代码,你真能被上传吗?
  • 告别MATLAB?手把手教你用开源QT库实现专业级信号频谱与瀑布图分析
  • 第12篇 | 结语:东数西算背后的生死账,为什么宁愿把数据传三千公里?
  • 2026绵阳特殊儿童康复机构可靠度top5技术维度解析:绵阳特殊儿童康复中心,绵阳特殊教育康复机构,实力盘点! - 优质品牌商家
  • AI算法在矿山罐笼超员检测中的应用
  • 论文AI检测通关攻略:4个实用技巧帮你快速达标
  • 告别FTP!用Windows自带的pscp工具,5分钟搞定服务器文件上传下载
  • Logisim避坑指南:从连线混乱到电路封装,新手最容易踩的5个雷区及解决方法
  • 2026年国内膜结构景观棚专业厂家TOP5实测排行 - 优质品牌商家
  • 7-Zip完全指南:免费开源压缩工具的超详细使用教程
  • 告别抢票焦虑:DamaiHelper如何用Python脚本让你轻松买到演唱会门票
  • CompactGUI终极指南:如何免费为你的游戏节省60%硬盘空间
  • 2026年4月有实力的铝艺大门地址如何选推荐榜:铸铝门、铝艺对开门、铝艺庭院门、铝艺围栏门厂家选择指南 - 海棠依旧大
  • 2026年广州越秀搬家公司top5实测排行一览:广州荔湾搬家,设备搬运吊装,跨城搬家,钢琴搬运,优选指南! - 优质品牌商家
  • ARM PMU性能监控单元架构与实战解析
  • 用Python+ArcPy实现GLASS LAI月度最大值合成:一份考虑了闰年的完整脚本
  • ARM架构FAR寄存器解析:异常处理与虚拟化关键机制
  • FFmpeg 4.4.2实战:5分钟搞定MP4视频的AES-128加密与TS分片(附完整keyinfo文件配置)
  • 双环磁场控制的解耦与调制机制
  • 资源下载神器:5分钟掌握跨平台网络资源捕获完整方案
  • HPH三大系统:从液力到辅助全面解读
  • 深度学习变压器故障诊断与状态评估【附代码】
  • 学校+导师+期刊查不同AIGC检测平台怎么办?嘎嘎降AI 9平台兜底!
  • 2026年q2国内靠谱无水氯化钙厂家排行实测盘点:郑州复合碳源,郑州小苏打,郑州无水氯化钙,排行一览! - 优质品牌商家