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

IO进程---day5

 

 1、使用有名管道实现两个进程之间的相互通信

//管道文件
#include<myhead.h>
int main(int argc, const char *argv[])
{//创建有名管道文件1if(mkfifo("./pipe1",0664)==-1){perror("创建管道文件失败");return 0;}if(mkfifo("./pipe2",0664)==-1){perror("创建管道文件失败");return 0;}getchar();  //防止当前进程结束unlink("pipe1");unlink("pipe2");return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{//以只写的形式打开管道文件1int fd1=open("./pipe1",O_WRONLY);if(fd1 == -1){perror("open error");return -1;}printf("fd1=%d\n",fd1);//以只读的形式打开管道文件2int fd2=open("./pipe2",O_RDONLY);if(fd2 == -1){perror("open error");return -1;}printf("fd2=%d\n",fd2);//创建子进程pid_t pid1=fork();//判断读写进程if(pid1>0){//接收数据字符数组char arr[180]="";while(1){printf("请输入数据:");fgets(arr,sizeof(arr),stdin);  //向终端输入字符串arr[strlen(arr)-1]='\0';  //将'\n'换成'\0'//向管道文件1中写入数据write(fd1,arr,strlen(arr));printf("发送成功\n");if(strcmp(arr,"q") == 0){break;}}}else if(pid1==0){//接收数据字符数组char brr[180]="";while(1){bzero(brr,sizeof(brr));   // 清空文件中读取的数据read(fd2,brr,sizeof(brr));printf("\n收到的消息为:%s\n",brr);if(strcmp(brr,"q")==0){break;}}//退出子进程exit(EXIT_SUCCESS);}wait(NULL);//关闭文件close(fd1);close(fd2);return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{//以只读的形式打开管道文件1int fd2=open("./pipe1",O_RDONLY);if(fd2 == -1){perror("open error");return -1;}printf("fd2=%d\n",fd2);//以只写的形式打开管道文件1int fd1=open("./pipe2",O_WRONLY);if(fd1 == -1){perror("open error");return -1;}printf("fd1=%d\n",fd1);//创建子进程pid_t pid2=fork();//判断读写进程if(pid2>0){//接收数据字符数组char brr[180]="";while(1){bzero(brr,sizeof(brr));   // 清空文件中读取的数据read(fd2,brr,sizeof(brr));printf("\n收到的消息为:%s\n",brr);if(strcmp(brr,"q")==0){break;}}}else if(pid2==0){//接收数据字符数组char arr[180]="";while(1){printf("请输入数据:");fgets(arr,sizeof(arr),stdin);  //向终端输入字符串arr[strlen(arr)-1]='\0';  //将'\n'换成'\0'//向管道文件1中写入数据write(fd1,arr,strlen(arr));printf("发送成功\n");if(strcmp(arr,"q") == 0){break;}}//退出子进程exit(EXIT_SUCCESS);}wait(NULL);//关闭文件close(fd1);close(fd2);return 0;
}

 2、思维导图

http://www.lryc.cn/news/464800.html

相关文章:

  • ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF(Unified Robot Description Format)语法详解
  • 常见SQL注入攻击示例与原理及其防御措施
  • Node.js 中的 WebSocket 底层实现
  • MySQl数据库的基本操作
  • Egg.js 项目的合理 ESLint 配置文件模板
  • 算法专题七: 分治归并
  • 一个基于vue功能强大的表格组件--vxe-table的二次封装
  • CSS网页布局(重塑网页布局)
  • 计算机网络:数据链路层 —— 以太网(Ethernet)
  • 考研前所学c语言02(2024/10/16)
  • R语言绘图——坐标轴及图例
  • JDK中socket源码解析
  • Ansible自动化运维项目实战指南
  • MySQL【知识改变命运】10
  • Java学习教程,从入门到精通, Java 基础语法(4)
  • 反编译工具-Jclasslib的使用,与Java方法调用的探索
  • 力扣 简单 876.快慢指针
  • FineReport 计算同比增长
  • 从0开始深度学习(12)——多层感知机的逐步实现
  • 如何利用OpenCV和yolo实现人脸检测
  • 015集——c# 实现CAD excel交互(CAD—C#二次开发入门)
  • 【计网笔记】以太网
  • Java 入门基础篇14 - java面向对象思想以及特性
  • 第15篇:网络架构优化与综合案例分析
  • UI自动化测试实战
  • 东方智者颜廷利:以哲学思想促进世界和谐与无私奉献
  • 基于 springboot vue停车场管理系统 设计与实现
  • 如何验证ssl私钥和证书是否匹配?
  • MongoDB的基本操作
  • spring mvc后端实现过程