IO进程---day5

devtools/2024/10/21 4:15:57/

 

 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.ppmy.cn/devtools/127469.html

相关文章

大厂面试真题-说一下推和拉的模式以及常见的使用

Pull&#xff08;拉&#xff09;模式和Push&#xff08;推&#xff09;模式是消息传递中的两种基本机制&#xff0c;它们在消息中间件和注册中心中的应用广泛而多样。 Pull&#xff08;拉&#xff09;模式 Pull模式是一种消息消费模式&#xff0c;其中客户端主动从服务端拉取…

Systemd:管理进程的加载过程的service配置文件

Systemd:Unit配置文件-CSDN博客 介绍了Unit配置文件的一些通用信息 如果使用Systemd管理进程的加载过程,比如:

IMS核心网和5GC的区别与联系

IMS核心网&#xff08;IP多媒体子系统&#xff09;和5GC&#xff08;5G核心网&#xff09;是现代电信网络中两个重要的核心部分&#xff0c;虽然它们都有着核心网络功能&#xff0c;但它们的目标、架构和功能上有显著的区别和一些联系。 1. IMS核心网简介 IMS&#xff08;IP …

Vue 3中集成Element Plus组件库

文章目录 一、Element Plus简介二、安装Element Plus2.1 安装Element Plus2.2 引入Element Plus三、使用Element Plus组件3.1 创建组件3.2 组件引入四、总结随着前端开发的快速发展,组件库已经成为开发实践中不可或缺的部分。 Vue 3作为一个现代的 JavaScript框架,其灵活性…

一文讲清楚 OAuth 2.0 支持的四个授权流程

目录 1、授权码授权流程&#xff08;Authorization Code Grant&#xff09; 2、隐式授权流程&#xff08;Implicit Grant&#xff09; 3、密码凭证授权流程&#xff08;Resource Owner Password Credentials Grant&#xff09; 4、客户端凭证授权流程&#xff08;Client Cre…

手写Spring IOC-简易版

目录 项目结构entitydaoIUserDaoUserDaoImpl serviceIUserServiceUserServiceImpl ApplicationContext 配置文件初始化 IOC 容器RunApplication 注解初始化 IOC 容器BeanAutowired Reference 项目结构 entity User Data NoArgsConstructor AllArgsConstructor Accessors(chai…

hi3798mv100 linux 移植

# Linux开发环境搭建 ## uboot编译 1. 必须先安装gcc&#xff0c;要不然make 等命令无法使用 2. 配置arm 交叉编译链 # gcc sudo apt-get install gcc-9 gcc -v# 安装 Linaro gcc-arm-linux-gnueabihf&#xff0c;注意不是arm-linux-gnueabihf-gcc sudo apt-get install ar…

Tauri(读音:踹你)开发简介:1.创建和运行第一个app

桌面app与web app之间的界限越来越模糊&#xff0c;以前可能说基于web编写的app性能不好&#xff0c;但是现在我们来看&#xff0c;不管钉钉还是vscode&#xff0c;都是采用了Electron框架&#xff0c;以web模式开发出来的。 提到Electron相信许多程序员都不陌生&#xff0c;它…