进程间通信:采用有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1.

本文主要是介绍进程间通信:采用有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1.,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作业1:有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1.

 

右进程 

#include <myhead.h>
int main(int argc, const char *argv[])
{pid_t pid=fork();if(pid>0)//父进程,将数据发送至管道1{int fd1;int len;char buff[1024];fd1=open("./fifo_a",O_WRONLY);if(fd1==-1){perror("打开管道1");return -1;}while(1){len=read(0,buff,sizeof(buff));//从键盘读取数据buff[strlen(buff)-1] = '\0';write(fd1,buff,len);//将数据发送至管道1if(strcmp(buff,"quit")==0){break;}}close(fd1);}else if(pid==0){int fd2;int len1;char buff1[1024];fd2=open("./fifo_b",O_RDONLY);if(fd2==-1){perror("打开管道2");return -1;}while(1){len1=read(fd2,buff1,sizeof(buff1));//从管道2读取数据write(1,buff1,len1);if(strcmp(buff1,"quit")==0){break;}}close(fd2);}else{perror("pid");return -1;}return 0;
}

左进程 

#include <myhead.h>
int main(int argc, const char *argv[])
{pid_t pid=fork();if(pid>0)//父进程,将数据发送至管道1{int fd1;int len;char buff[1024];fd1=open("./fifo_b",O_WRONLY);if(fd1==-1){perror("打开管道1");return -1;}while(1){len=read(0,buff,sizeof(buff));//从键盘读取数据buff[len-1] = '\0';write(fd1,buff,len);//将数据发送至管道1if(strcmp(buff,"quit")==0){break;}}close(fd1);}else if(pid==0){int fd2;int len1;char buff1[1024];fd2=open("./fifo_a",O_RDONLY);if(fd2==-1){perror("打开管道2");return -1;}while(1){len1=read(fd2,buff1,sizeof(buff1));//从管道2读取数据write(1,buff1,len1);if(strcmp(buff1,"quit")==0){break;}}close(fd2);}else{perror("pid");return -1;}return 0;
}

这篇关于进程间通信:采用有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1.的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1116770

相关文章

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.