IO_DAY7

2024-04-09 08:36
文章标签 io day7

本文主要是介绍IO_DAY7,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1:实现2个终端之间的互相聊天
要求:千万不要做出来2个终端之间的消息发送是读一写的,一定要能够做到,一个终端发送n条消息,另一个终端一条消息都不回复都是没有问题的

终端A:

#include<myhead.h>
int main(int argc, char *argv[])
{int var=fork();if(var>0){char afifo[32]="./afifo";int res=access(afifo,F_OK);if(res==-1){mkfifo(afifo,0666);}int afd=open(afifo,O_WRONLY|O_TRUNC);char abuf[128]={0};int alen=0;while(1){memset(abuf,0,alen);scanf("%128s",abuf);while(getchar()!=10);alen=strlen(abuf);write(afd,abuf,alen);}close(afd);}else if(var==0){	char bfifo[32]="./bfifo";if(access(bfifo,F_OK)==-1){mkfifo(bfifo,0666);}int bfd=open(bfifo,O_RDONLY);char bbuf[128]={0};int blen=0;while(1){memset(bbuf,0,blen);blen=read(bfd,bbuf,128);printf("B:%s\n",bbuf);}close(bfd);}else if(var<0){perror("fork");return 1;}return 0;
}
ubuntu@ub

终端B:

#include<myhead.h>
int main(int argc, char *argv[])
{int var=fork();if(var>0){char afifo[32]="./afifo";if(access(afifo,F_OK)==-1){mkfifo(afifo,0666);}int afd=open(afifo,O_RDONLY);char abuf[128]={0};int alen=0;while(1){memset(abuf,0,alen);alen=read(afd,abuf,128);printf("A:%s\n",abuf);}close(afd);}else if(var==0){char bfifo[32]="./bfifo";int res=access(bfifo,F_OK);if(res==-1){mkfifo(bfifo,0666);}int bfd=open(bfifo,O_WRONLY|O_TRUNC);char bbuf[128]={0};int blen=0;while(1){memset(bbuf,0,blen);scanf("%128s",bbuf);while(getchar()!=10);blen=strlen(bbuf);write(bfd,bbuf,blen);}close(bfd);}else if(var==-1){perror("fork");return 1;}return 0;
}

效果图:

2:有2个.c文件1.c,2.c
1.c的代码负责:从键盘输入三角形的三边长 或者 长方形的长和宽

2.c的代码负责:根据1.c 输入的数据,计算三角形 或者 长方形的面积

1.c:

#include<myhead.h>
int main(int argc, char *argv[])
{int pipefd[2]={0};pipe(pipefd);//pipefd[0]=3//pipefd[1]=4;int res=fork();if(res>0){while(1){double data[3]={0};printf("请输入三角形的三边长或者长方形的长和宽:");scanf("%lf %lf %lf",data,data+1,data+2);while(getchar()!=10);write(pipefd[1],data,24);sleep(1);}}else if(res==0){char rfd[4]={0};sprintf(rfd,"%d",pipefd[0]);execl("./2","2",rfd,NULL);perror("execl");}return 0;
}

2.c:

#include<myhead.h>
int main(int argc, char *argv[])
{double buf[3]={0};double area=0;int rfd=atoi(argv[1]);while(1){read(rfd,buf,24);if(buf[0]!=0&&buf[1]!=0&&buf[2]!=0){double a=buf[0];double b=buf[1];double c=buf[2];double p=(a+b+c)/2;double q=p*(p-a)*(p-b)*(p-c);area=sqrt(q);printf("三角形面积为:%f\n",area);}else if(buf[0]==0){area=buf[1]*buf[2];printf("长方形面积为:%f\n",area);}else if(buf[1]==0){area=buf[0]*buf[2];printf("长方形面积为:%f\n",area);}else if(buf[2]==0){area=buf[1]*buf[0];printf("长方形面积为:%f\n",area);}}return 0;
}

效果图:

思维导图:

这篇关于IO_DAY7的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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 文件复制 字符编码内存操作流(

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: 数据写到缓存,再刷写到磁盘上

实习项目|苍穹外卖|day7

缓存菜品 1.根据原型进行需求分析与设计(接口文档) 2.根据接口设计DTO(redis数据类型选取) 3.编码controller-》service-》mapper @GetMapping("/list")@ApiOperation("根据分类id查询菜品")public Result<List<DishVO>> list(Long categoryId) {//判断缓存

linux基础IO——动静态库——进程编址、进程执行、动态库加载

前言:本节内容为基础IO部分的最后一节, 主要是为了讲一下动静态库里面的动态库如何加载到内存, 动态库的地址等等。 但是,这些内容牵扯到了程序的编址, 程序的加载, 进程的执行等等知识点, 所以,我们会从程序的编址讲起, 一直到进程的执行, 以及动态库加载结束。         ps:本节内容涉及到了进程地址空间, 磁盘的内容, 建议友友们了解相关知识后再来观看。 目录

mybatis错误——java.io.IOException Could not find resource comxxxxxxMapper.xml

在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang.RuntimeException: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: