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

IO进程线程 0828作业

作业

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

mkfifo1.c代码

#include <myhead.h>
int main(int argc, const char *argv[])
{if(mkfifo("./my_fifo1",0664) == -1){perror("mkfifo");return -1;}if(mkfifo("./my_fifo2",0664) == -1){perror("mkfifo");return -1;}return 0;
}

user1.c代码

#include <myhead.h>int main(int argc, const char *argv[])
{pid_t pid = fork();if(pid>0)//父进程写入管道1{int send = open("./my_fifo1",O_WRONLY);//父进程写入管道if(send==-1){perror("open1");return -1;}char buff[1000];while(1){fgets(buff,sizeof(buff),stdin);//键盘写入数据buff[strlen(buff)-1]='\0';//去掉手动输入的enter键write(send,buff,sizeof(buff));if(strcmp(buff,"quit")==0){break;}}close(send);wait(NULL);//阻塞回收//waitpid(-1,NULL,NOHANG);//-1:任意子进程 非阻塞回收exit(EXIT_SUCCESS);}else if(pid==0)//子进程读取管道2{int rcv  = open("./my_fifo2",O_RDONLY);//只读发送打开if(rcv==-1){perror("open2");return -1;}char buff[1000];while(1){read(rcv,buff,sizeof(buff));if(strcmp(buff,"quit")==0){break;}printf("%s\n",buff);}close(rcv);exit(EXIT_SUCCESS);}else{perror("fork");return -1;}return 0;
}

user2.c代码

#include <myhead.h>int main(int argc, const char *argv[])
{pid_t pid = fork();if(pid>0)//父进程写入管道1{int send = open("./my_fifo2",O_WRONLY);//父进程写入管道if(send==-1){perror("open1");return -1;}char buff[1000];while(1){fgets(buff,sizeof(buff),stdin);//键盘写入数据buff[strlen(buff)-1]='\0';//去掉手动输入的enter键write(send,buff,sizeof(buff));if(strcmp(buff,"quit")==0){break;}}close(send);wait(NULL);//阻塞回收//waitpid(-1,NULL,NOHANG);//-1:任意子进程 非阻塞回收exit(EXIT_SUCCESS);}else if(pid==0)//子进程读取管道2{int rcv  = open("./my_fifo1",O_RDONLY);//只读发送打开if(rcv==-1){perror("open2");return -1;}char buff[1000];while(1){read(rcv,buff,sizeof(buff));if(strcmp(buff,"quit")==0){break;}printf("%s\n",buff);}close(rcv);exit(EXIT_SUCCESS);}else{perror("fork");return -1;}return 0;
}

运行结果:

 

 

 

知识梳理

进程间通信


http://www.mrgr.cn/news/14825.html

相关文章:

  • Threejs之WebGLRenderer渲染器
  • InstantID: Zero-shot Identity-Preserving Generation in Seconds
  • 【leetcode】C++_string 917.仅仅反转字母
  • PyTest测试框架学习日记
  • 【SQL】关注者数量
  • 单片机的主流编程语言是什么
  • 学习大数据DAY43 Sqoop 安装,配置环境和使用
  • Leetcode 216.组合总和Ⅲ 回溯+剪枝 C++实现
  • k8s集群环境搭建(一主二从--kubeadm安装)
  • 分享5款支持论文写作网站先稿后付的网站!
  • [000-01-001].第04节:Shell中的内置命令
  • Android架构组件:MVVM模式的实战应用与数据绑定技巧
  • Pytest项目搭建总结
  • WireShark网络分析~环境搭建
  • 【C++ | 设计模式】工厂方法模式的详解与实现
  • C# 变量
  • 【Python入门】第5节 数据容器
  • 三. Spring Boot 当中的“容器功能” 和 “配置绑定” 的详细剖析(附+源代码流程)
  • C# for语句
  • 一款支持固定区域,固定尺寸大小重复截图的软件