华清远见作业第二十三天——IO(第六天)

2024-01-09 00:20

本文主要是介绍华清远见作业第二十三天——IO(第六天),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用有名管道完成两个进程之间相互通信

 代码:

创建管道:

#include<a.h>
int main(int argc, const char *argv[])
{//创建有名管道文件if(mkfifo("./myfifo1", 0664) != 0){perror("mkfifo1 error");return -1;}printf("myfifo1 create success\n");//创建有名管道文件if(mkfifo("./myfifo2", 0664) != 0){perror("mkfifo2 error");return -1;}printf("myfifo2 create success\n");system("ls -l");//使用getchar阻塞一下getchar();system("rm myfifo1");system("rm myfifo2");return 0;
}

 主进程A:

#include<a.h>int main(int argc, const char *argv[])
{pid_t pid = -1;   //定义变量存储进程号pid = fork();    //创建一个子进程//后续的程序,父子进程都会执行if(pid > 0){printf("这是父进程对应管道1,pid = %d\n", pid);//以只写的形式打开管道文件int wfd = -1;if((wfd = open("./myfifo1", O_WRONLY)) == -1){perror("open error");return -1;}//向管道文件中循环写入数据char wbuf[128] = "";while(1){bzero(wbuf, sizeof(wbuf));           //清空内容//从终端输入数据printf("管道1请输入>>>>>");fflush(stdout);            //刷新行缓冲区read(0, wbuf, sizeof(wbuf));wbuf[strlen(wbuf)-1] = 0;           //将回车换成'\0'//将数据写入管道中write(wfd, wbuf, sizeof(wbuf));//判断if(strcmp(wbuf, "quit") == 0){break;}}//关闭文件close(wfd);	}else if(pid == 0){printf("这是子进程对应管道2,pid = %d\n", pid);//以只读的形式打开管道文件int rfd = -1;if((rfd = open("./myfifo2", O_RDONLY)) == -1){perror("open error");return -1;}printf("管道2读端打开成功\n");//从管道文件中循环读取数据char rbuf[128] = "";while(1){bzero(rbuf, sizeof(rbuf));           //清空内容//从管道中读取数据read(rfd, rbuf, sizeof(rbuf));printf("收到消息:%s\n", rbuf);//判断if(strcmp(rbuf, "quit") == 0){break;}}//关闭文件close(rfd);	}else {perror("fork error");return -1;}while(1);return 0;
}

主进程B:

#include<a.h>int main(int argc, const char *argv[])
{pid_t pid = -1;   //定义变量存储进程号pid = fork();    //创建一个子进程//后续的程序,父子进程都会执行if(pid > 0){printf("这是父进程,pid = %d\n", pid);//以只读的形式打开管道文件int rfd = -1;if((rfd = open("./myfifo1", O_RDONLY)) == -1){perror("open error");return -1;}printf("读端打开成功\n");//从管道文件中循环读取数据char rbuf[128] = "";while(1){bzero(rbuf, sizeof(rbuf));           //清空内容//从管道中读取数据read(rfd, rbuf, sizeof(rbuf));printf("收到消息:%s\n", rbuf);//判断if(strcmp(rbuf, "quit") == 0){break;}}//关闭文件close(rfd);}else if(pid == 0){printf("这是子进程,pid = %d\n", pid);//以只写的形式打开管道文件int wfd = -1;if((wfd = open("./myfifo2", O_WRONLY)) == -1){perror("open error");return -1;}printf("写端打开成功\n");//向管道文件中循环写入数据char wbuf[128] = "";while(1){bzero(wbuf, sizeof(wbuf));           //清空内容//从终端输入数据printf("请输入>>>>>");fflush(stdout);            //刷新行缓冲区read(0, wbuf, sizeof(wbuf));wbuf[strlen(wbuf)-1] = 0;           //将回车换成'\0'//将数据写入管道中write(wfd, wbuf, sizeof(wbuf));//判断if(strcmp(wbuf, "quit") == 0){break;}}//关闭文件close(wfd);}else {perror("fork error");return -1;}printf("hello world\n");while(1);return 0;
}

运行效果:

 

 

这篇关于华清远见作业第二十三天——IO(第六天)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

作业提交过程之HDFSMapReduce

作业提交全过程详解 (1)作业提交 第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。 第2步:Client向RM申请一个作业id。 第3步:RM给Client返回该job资源的提交路径和作业id。 第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。 第5步:Client提交完资源后,向RM申请运行MrAp

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

springboot体会BIO(阻塞式IO)

使用springboot体会阻塞式IO 大致的思路为: 创建一个socket服务端,监听socket通道,并打印出socket通道中的内容。 创建两个socket客户端,向socket服务端写入消息。 1.创建服务端 public class RedisServer {public static void main(String[] args) throws IOException {

Java基础回顾系列-第七天-高级编程之IO

Java基础回顾系列-第七天-高级编程之IO 文件操作字节流与字符流OutputStream字节输出流FileOutputStream InputStream字节输入流FileInputStream Writer字符输出流FileWriter Reader字符输入流字节流与字符流的区别转换流InputStreamReaderOutputStreamWriter 文件复制 字符编码内存操作流(

Java基础回顾系列-第六天-Java集合

Java基础回顾系列-第六天-Java集合 集合概述数组的弊端集合框架的优点Java集合关系图集合框架体系图java.util.Collection接口 List集合java.util.List接口java.util.ArrayListjava.util.LinkedListjava.util.Vector Set集合java.util.Set接口java.util.HashSetjava

android java.io.IOException: open failed: ENOENT (No such file or directory)-api23+权限受权

问题描述 在安卓上,清单明明已经受权了读写文件权限,但偏偏就是创建不了目录和文件 调用mkdirs()总是返回false. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_E

JavaEE-文件操作与IO

目录 1,两种路径 二,两种文件 三,文件的操作/File类: 1)文件系统操作 File类 2)文件内容操作(读文件,写文件) (1)打开文件 (2)关闭文件 (3)读文件/InputStream (4)写文件/OutputStream (5)读文件/reader (6)写文件/writer (7)Scanner 四,练习: 1,两种路径 1)绝对路径

Python---文件IO流及对象序列化

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 前文模块中提到加密模块,本文将终点介绍加密模块和文件流。 一、文件流和IO流概述         在Python中,IO流是用于输入和输出数据的通道。它可以用于读取输入数据或将数据写入输出目标。IO流可以是标准输入/输出流(stdin和stdout),也可以是文件流,网络流等。

标准IO与系统IO

概念区别 标准IO:(libc提供) fopen fread fwrite 系统IO:(linux系统提供) open read write 操作效率 因为内存与磁盘的执行效率不同 系统IO: 把数据从内存直接写到磁盘上 标准IO: 数据写到缓存,再刷写到磁盘上

Java高级Day38-网络编程作业

112.网络编程作业 //1.使用字符流的方式,编写一个客户端程序和服务器端程序//2.客户端发送"name",服务器端接收到后,返回"我是nova"//3.客户端发送"hobby",服务器端接收到后,返回"编写java程序"//4.不是这两个问题,回复"你说啥呢"​​===============//客户端//===============public class SocketT