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

两个子进程之间使用命名pipe

两个子进程间可以使用命名管道,非常简单。管道如果文件一样存在硬盘中,使用ls可以查看,管道文件0字节。使用fork函数分别创建两个子进程。
一个负责读数据,一个负责写数据。

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/wait.h>#define FIFO_PATH "./fifo_fork_demo"
#define MSG       "Hello from child writer!\n"int main(void)
{/* 1. 创建有名管道 ----------------------------------------------------- */if (mkfifo(FIFO_PATH, 0666) == -1) {perror("mkfifo");return 1;}/* 2. fork 两个子进程 --------------------------------------------------- */pid_t writer_pid = fork();if (writer_pid == 0) {                        /* 子进程 A:写 */int fd = open(FIFO_PATH, O_WRONLY);       /* 阻塞到有读端 */if (fd == -1) { perror("open writer"); _exit(1); }write(fd, MSG, sizeof(MSG));close(fd);_exit(0);}pid_t reader_pid = fork();if (reader_pid == 0) {                        /* 子进程 B:读 */int fd = open(FIFO_PATH, O_RDONLY);       /* 阻塞到有写端 */if (fd == -1) { perror("open reader"); _exit(1); }char buf[64];ssize_t n = read(fd, buf, sizeof(buf) - 1);if (n > 0) {buf[n] = '\0';printf("reader child got: %s", buf);}close(fd);_exit(0);}/* 3. 父进程等待两个子进程结束 ----------------------------------------- */int st;waitpid(writer_pid, &st, 0);waitpid(reader_pid, &st, 0);/* 4. 清理 FIFO --------------------------------------------------------- */unlink(FIFO_PATH);puts("parent: all children finished, fifo removed.");return 0;
}
http://www.xdnf.cn/news/1448443.html

相关文章:

  • 从月薪5K到年薪60W!API自动化测试如何让你突破职业瓶颈
  • K8S 部署 NFS Dynamic Provisioning(动态存储供应)
  • 【STM32】STM32F103系列USB大坑 二
  • 具身智能让人形机器人 “活” 起来:懂语言、能感知、会行动,智能进化再提速
  • 使用langgraph创建工作流系列4:人机回环
  • 面试复习题-Flutter
  • 论文介绍:“DUSt3R”,让 3D 视觉从“繁琐”走向“直观”
  • Swift 解法详解:LeetCode 370《区间加法》
  • 《网络安全实战:CC攻击(应用层)与DDoS攻击(网络层)的底层逻辑与防御体系》​
  • 分发饼干——很好的解释模板
  • 从“看见”到“行动”:一场机器视觉与机器人的软硬件共舞
  • 把本地win11系统打包成镜像并安装到vmware中
  • Springboot3+SpringSecurity6Oauth2+vue3前后端分离认证授权-授权服务
  • FastVLM:高效视觉编码助力视觉语言模型突破高分辨率效率瓶颈
  • LeNet-5:卷积神经网络的奠基之作
  • 0903 C++类的运算符重载、静态成员与继承
  • 前端-安装VueCLI
  • 【ARM嵌入式汇编基础】-数据处理指令(三)
  • OpenHarmony Ability“全家桶”彻底拆解:从UIAbility到ExtensionAbility一文说清楚
  • LeetCode 1537.最大得分
  • 残差连接的概念与作用
  • 蓝桥杯算法之基础知识(6)
  • Netty从0到1系列之Channel
  • 【 线段树】P12347 [蓝桥杯 2025 省 A 第二场] 栈与乘积|普及+
  • 基于 HTML、CSS 和 JavaScript 的智能图像灰度直方图分析系统
  • HTML全屏功能实现汇总
  • npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR!
  • 求单源最短路(Dijkstra 算法-迪杰斯特拉算法,SPFA)
  • 【Unity基础】两个关于UGUI中Text对非英文字体支持的问题
  • SpringAI应用开发面试全流程:技术原理、架构优化与企业场景解析