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

【IO】进程间通信

A程序代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, const char *argv[])
{if(mkfifo("./fifo1",0664)<0){if(errno !=17){perror("mkfifo");return -1;}}if(mkfifo("./fifo2",0664)<0){if(errno !=17){perror("mkfifo");return -1;}}printf("mkfifo success\n");int fd1 = open("./fifo1",O_WRONLY);if(fd1<0){perror("open");return -1;}int fd2=open("./fifo2",O_RDONLY);if(fd2<0){perror("open_fifo2");return-1;}printf("open RDONLY NONBLOCK success\n");char buf[128];ssize_t res;while(1){printf("输入数据>>\n");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]='\0';if(write(fd1,buf,sizeof(buf))<0){perror("write");return -1;}printf("写入成功\n");if(strcmp(buf,"quit")==0){break;                                                                              }
//读数据ibzero(buf,sizeof(buf));res=read(fd2,buf,sizeof(buf));if(res<0){perror("read");return -1;}else if(res==0){printf("写端关闭,且管道没有数据");break;}printf("fd2:%ld  %s\n",res,buf);}close(fd2);close(fd1);return 0;
}

B程序代码:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, const char *argv[])
{if(mkfifo("./fifo1",0664)<0){if(errno !=17){perror("mkfifo");return -1;}}if(mkfifo("./fifo2",0664)<0){if(errno !=17){perror("mkfifo");return -1;}}printf("mkfifo success\n");pid_t pid;int fd1 = open("./fifo1",O_RDONLY);if(fd1<0){perror("open");return -1;}int fd2 = open("./fifo2",O_WRONLY);if(fd2<0){perror("open");return -1;}printf("open RDONLY NONBLOCK success\n");char buf[128];ssize_t res;while(1){bzero(buf,sizeof(buf));res=read(fd1,buf,sizeof(buf));if(res<0){perror("read");return -1;}else if(0==res){                                                                       printf("写端关闭,且管道里没有数据\n");break;}printf("%ld :%s \n",res,buf);//写数据bzero(buf,sizeof(buf));printf("输入数据>>\n");fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]='\0';if(write(fd2,buf,sizeof(buf))<0){perror("write");return -1;}printf("fd2_写入成功\n");if(strcmp(buf,"quit")==0){break;}}close(fd2);close(fd1);return 0;
}

运行结果:

相关文章:

  • WP外贸营销型网站模板
  • Android基础面试常常死在这几个问题上,大厂Android高级多套面试专题整理集合
  • SDWAN专线,解决银行网络搭建痛点
  • vite、mode如果为production打包后 .env.production 中 VITE_API_DOMAIN变量作为API地址吗
  • 『python爬虫』ip代理池使用 协采云 账密模式(保姆级图文)
  • EdgeX Foundry - 连接 MQTT 设备
  • Java中Class.forName和ClassLoader.loadClass的区别
  • golang 糟糕的错误处理
  • 《辐射4》是一款什么样的游戏 怎样在mac电脑上玩到《辐射4》辐射4攻略 辐射4开局加点 怎么在Mac电脑玩Steam游戏
  • 基于SpringBoot+MYSQL的网页时装购物系统
  • 蓝桥杯复习之差分
  • 计算题--单代号双代号网络图
  • CCF-A推荐会议 安全界顶会ACM CCS‘24 4月29日第二轮投稿!共建更安全的数字世界!
  • UE5 C++ TPS开发 学习记录(七)
  • 6_怎么看原理图之协议类接口之LCD笔记
  • DOM的那些事
  • node和express搭建代理服务器(源码)
  • Python中eval与exec的使用及区别
  • Quartz初级教程
  • vue-cli3搭建项目
  • 初识 beanstalkd
  • 从零开始的无人驾驶 1
  • 高度不固定时垂直居中
  • 关于for循环的简单归纳
  • 回流、重绘及其优化
  • 基于组件的设计工作流与界面抽象
  • 前言-如何学习区块链
  • 如何设计一个比特币钱包服务
  • 深入浅出webpack学习(1)--核心概念
  • 延迟脚本的方式
  • 智能网联汽车信息安全
  • #FPGA(基础知识)
  • #在 README.md 中生成项目目录结构
  • ( 10 )MySQL中的外键
  • (2)(2.10) LTM telemetry
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (待修改)PyG安装步骤
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (顺序)容器的好伴侣 --- 容器适配器
  • (五)IO流之ByteArrayInput/OutputStream
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (状压dp)uva 10817 Headmaster's Headache
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net core Swagger 过滤部分Api
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET微信公众号开发-2.0创建自定义菜单
  • .Net转前端开发-启航篇,如何定制博客园主题
  • /boot 内存空间不够
  • @ModelAttribute使用详解
  • @我的前任是个极品 微博分析
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗