0805作业+梳理

news2024/9/22 23:36:10

一、作业:

代码:

create.c
#include<myhead.h>
int main(int argc, const char *argv[])
{
    //创建一个有名管道文件
    if(mkfifo("./linux",0664)==-1)
    {
        perror("mkfifo linux error");
        return -1;
    }
    getchar();
    system("rm linux");
    return 0;
}
write.c 

#include<myhead.h>
int main(int argc, const char *argv[])
{

	//以写的形式打开linux文件
	int wfd = open("./linux",O_WRONLY);
	if(wfd==-1)
	{
		perror("open error");
		return -1;
	}
	//准备一个字符串用于写入数据
	char sbuf[128] = "";
	while(1)
	{
		printf("请输入>>>");
		fgets(sbuf,sizeof(sbuf),stdin);//从终端获取字符串
		sbuf[strlen(sbuf)-1] = 0;
		//将数据通过写端写入管道
		write(wfd,sbuf,strlen(sbuf));

		//判读终端获取的数据 
		if(strcmp(sbuf,"quit")==0)
		{
			break;
		}
		
	}
	//关闭文件
	close(wfd);
	return 0;
}
reciv.c
#include<myhead.h>
int main(int argc, const char *argv[])
{
	//以只读的形式打开linux文件
	int rfd = open("./linux",O_RDONLY);
	if(rfd==-1)
	{
		perror("open error");
		return -1;
	}
	//打开存储文件
	int fd = -1;
	if(fd =open("./cunchu.txt",O_WRONLY|O_CREAT|O_TRUNC,-664)==-1)
	{
		perror("open cunchu error");
		return -1;
	}
	//定义一个字符串准备接受消息
	char rbuf[128] = "";
	while(1)
	{
		bzero(rbuf,sizeof(rbuf));
		//从管道读取数据
		read(rfd,rbuf,sizeof(rbuf));
		if(strcmp(rbuf,"quit")==0)
		{
			break;
		}
		//输出数据
		int src = sizeof(rbuf);
		if(src != 0)
		{
			int a = write(fd,rbuf,sizeof(rbuf));
			printf("%d\n",a);
		}
	    printf("存储完成\n");

		printf("收到来信:%s\n",rbuf);
	}
	//关闭文件
	close(rfd);
	close(fd);
}

运行结果:

代码:

create.c

#include<myhead.h>
int main(int argc, const char *argv[])
{
	//创建一个有名管道文件
	if(mkfifo("./linux2",0664)==-1)
	{
		perror("mkfifo linux2 error");
		return -1;
	}
	getchar();
	system("rm linux2");
	return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{
	//创建一个有名管道文件
	if(mkfifo("./linux1",0664)==-1)
	{
		perror("mkfifo linux1 error");
		return -1;
	}
	getchar();
	system("rm linux1");
	return 0;
}

recv.c

#include<myhead.h>
void *task1(void *arg)
{
	//以读的形式打开管道文件
	int rfd = open("./linux1",O_RDONLY);
	if(rfd == -1)
	{
		perror("open error");
	}
	printf("管道文件已打开");
	char rbuf[128] = "";
	while(1)
	{
		bzero(rbuf,sizeof(rbuf));
		read(rfd,rbuf,sizeof(rbuf));
		if(strcmp(rbuf,"quit")==0)
		{
			break;
		}
		printf("接收端收到的消息为:%s\n",rbuf);
	}
	close(rfd);
}
void *task2(void *arg)
{
	//以写的形式打开管道文件
	int wfd = open("./linux2",O_WRONLY);
	if(wfd == -1)
	{
		perror("open error");
	}
	printf("管道文件已打开");
	//发送数据
	char wbuf[128] = "";
	while(1)
	{
		printf("请输入>>>>>");
		fgets(wbuf,sizeof(wbuf),stdin);
		wbuf[strlen(wbuf)-1] = 0;
		//将数据发送到管道文件
		write(wfd,wbuf,strlen(wbuf));
		//判断数据
		if(strcmp(wbuf,"quit")==0)
		{
			break;
		}
	}
	close(wfd);
}

int main(int argc, const char *argv[])
{
	//定义两个存储线程号
	pthread_t tid1=-1;
	pthread_t tid2=-1;
	//创建两个分支线程
	if(pthread_create(&tid1,NULL,task1,NULL)!=0)
	{
		printf("pthread_create error\n");
		return -1;
	}
	if(pthread_create(&tid2,NULL,task2,NULL)!=0)
	{
		printf("pthread_create task2 error\n");
		return -1;
	}
	//回收线程资源
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);
	return 0;
}

send.c

#include<myhead.h>
void *task1(void *arg)
{
	//以读的形式打开管道文件
	int rfd = open("./linux2",O_RDONLY);
	if(rfd == -1)
	{
		perror("open error");
	}
	printf("管道文件已打开");
	char rbuf[128] = "";
	while(1)
	{
		bzero(rbuf,sizeof(rbuf));
		read(rfd,rbuf,sizeof(rbuf));
		if(strcmp(rbuf,"quit")==0)
		{
			break;
		}
		printf("接收端收到的消息为:%s\n",rbuf);
	}
	close(rfd);
}
void *task2(void *arg)
{
	//以写的形式打开管道文件
	int wfd = open("./linux1",O_WRONLY);
	if(wfd == -1)
	{
		perror("open error");
	}
	printf("管道文件已打开");
	//发送数据
	char wbuf[128] = "";
	while(1)
	{
		printf("请输入>>>>>");
		fgets(wbuf,sizeof(wbuf),stdin);
		wbuf[strlen(wbuf)-1] = 0;
		//将数据发送到管道文件
		write(wfd,wbuf,strlen(wbuf));
		//判断数据
		if(strcmp(wbuf,"quit")==0)
		{
			break;
		}
	}
	close(wfd);
}


int main(int argc, const char *argv[])
{
	//定义两个存储线程号
	pthread_t tid1=-1;
	pthread_t tid2=-1;
	//创建两个分支线程
	if(pthread_create(&tid1,NULL,task1,NULL)!=0)
	{
		printf("pthread_create error\n");
		return -1;
	}
	if(pthread_create(&tid2,NULL,task2,NULL)!=0)
	{
		printf("pthread_create task2 error\n");
		return -1;
	}
	//回收线程资源
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);

	return 0;
}

运行结果:

二、思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8.15 C++作业

输入一组字符&#xff0c;实现各字符的归类统计 #include <iostream> #include <string.h>using namespace std;namespace xiaoli {string str;int len; } using namespace xiaoli;int main() {getline(cin,str);//识别空格len str.size();int a0,b0,c0,d0,e0;fo…

x-cmd mod | x yq - 轻量级的 YAML、JSON、XML 处理器

目录 简介使用语法参数子命令x yq repl 简介 yq (YAML Query) 是一个轻量级的 YAML、JSON、XML 处理器&#xff0c;主要用于查询和提取 YAML 数据。 x yq 是基于 yq 命令、为提升 yq 使用体验而设计的增强模块&#xff0c;具体的增强性改动如下&#xff1a; 简化 yq 命令的安…

【GoodERP更新日志】增加模块 质检管理 处理来料检、发货检功能

开源项目GoodERP更新-2024年8月5日 本次提交合并增加的功能或解决的问题&#xff1a;增加 质量管理模块->增加来料质检、发货质检功能 提交前: 无 提交后: 1、按供应商来料&#xff0c;安排来料质检工作&#xff1b; 2、按销售订单&#xff0c;安排对计划发货商品进行…

比较推荐哪种可视耳勺?5大热门产品专业测评分享!

由于现在人们对健康生活越来越重视&#xff0c;可视耳勺成为了个护健康产品&#xff0c;受到了越来越多消费者的关注和喜爱。这种挖耳勺采用了先进的无线技术和高清摄像头&#xff0c;能够让人们更加清晰地观察自己耳内的状况&#xff0c;从而更加安全、有效地清洁耳朵。但同时…

封装组件之使用vue3封装简易Button按钮

1.新建Button.vue <template><button :class"buttonClass"><!-- 用于输入内容 --><slot></slot></button> </template> <script lang"ts" setup> import { computed } from vue; //定义类型 const props…

OpenGL投影矩阵

OpenGL Projection Matrix OpenGL投影矩阵

大模型检索增强生成RAG

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhlRAG简介 大模型检索增强生成(Retrieval-Augmented Generation,简称RAG)是一种结合了信息检索技术和语言生成模型的人工智能技术,主要用于增强大型语言模型(Large Language Models, LLMs)处理…

能见度监测站在机场中的应用

在繁忙的机场&#xff0c;每一个细节都关乎着飞行安全。其中&#xff0c;能见度作为关键的气象因素&#xff0c;直接影响着飞机的起降安全。为此&#xff0c;能见度监测站在机场中扮演着重要的角色。 能见度监测站利用先进的传感器技术&#xff0c;实时监测机场周边的能见度情况…

【医学图像】医学图像基础

目录 引言 医学成像常识 1. 正交投影面 2 医学图像种类 3 医学图像质量评价标准 3.1 图像对比度成因 3.2 对比度 3.3 空间分辨率 3.4 时间分辨率 3.5 信噪比 signal-to-noise ratio SNR 3.6 数字和模拟图像 4 医疗临床的性能 4.1 图像获取和感知 4.2 灵敏度和特异…

WEB服务器安全加固与检查

01.安全加固定义 什么是安全加固? 安全加固是实现信息系统安全的关键环节。通过安全加固&#xff0c;将在信息系统的网络层、主机层、软件层、应用层等层次建立符合安全需求的安全状态&#xff0c;并以此作为保证网络信息系统安全的起点。 安全加固是配置软件…

使用gitea私有仓库作为依赖

实际问题 由于公司团队使用gitea搭建了git私有仓库&#xff0c;在开发Go程序的时候会有一些公共代码&#xff0c;比如插件和主程序之间要共享接口和数据结构&#xff0c;所以就需要在gitea私有仓库中创建依赖仓库&#xff0c;然后其他仓库引用这个私有仓库作为依赖。 解决方案…

记录|LabVIEW从0开始【09~10】

目录 前言一、属性节点案例&#xff1a;Step1. 表格控件设置Step2. 下拉列表控制Step1~Step2 效果展示Step3. 编写事件分支分支1&#xff1a;前面板关闭&#xff1f;分支2&#xff1a;表格&#xff0c;鼠标按下创建分支创建表格引用获得单元格的2种位置。设置下拉框的位置下拉框…

【秋招笔试题】矿脉开采(树形DP)

此题直接按树形dp做即可&#xff0c;每次从0枚举到k转移状态 #include <iostream> #include <cstring> #include <algorithm>using namespace std; #define endl \n #define lson node << 1 #define rson node << 1 | 1 const int maxn 1e5 5…

未授权访问漏洞系列详解⑥!

JBoss未授权访问漏洞 JBoss是一个基于J2EE的开放源代码应用服务器&#xff0c;代码遵循LGPL许可&#xff0c;可以在任何商业应用中免费使用;JBoss也是一个管理EJB的容器和服务器&#xff0c;支持EJB1.1、EJB 2.0和EJB3规范。,默认情况下访问 http://ip:8080/jmx-console 就可以…

宠物空气净化器哪个牌子好?希喂、霍尼韦尔宠物空气净化器对比推荐

随着养宠物人群变多&#xff0c;现在打着宠物专用旗号的空气净化器也越来越多&#xff0c;但是很多空气净化器对宠物的效果&#xff0c;真的是只有宣传上和宠物有关&#xff0c;实际设计和效果上和宠物毫无关系。需要大家擦亮眼睛&#xff0c;多做功课&#xff0c;才能不被那些…

PXE+kickstart实现无人值守自动安装操作系统

PXEkickstart实现无人值守自动安装操作系统 让待安装系统的主机自动安装系统&#xff0c;并且自动的安装kickstart文件安装系统&#xff0c;不需要人工干预&#xff0c;直接自动化批量安装操作系统 文章目录 PXEkickstart实现无人值守自动安装操作系统在VMware虚拟机中进行操作…

Day19 标准IO的学习

标准IO 1.I input 输入 键盘 O output 输出 显示器 2.一般我们调用相关IO操作时必须调用stdio头文件库&#xff0c;其位置在/usr/include/stdio.h&#xff0c;linux系统中最高管理者是root。 stdio.h ~ stdio.c ~ libc.so ~ /usr/lib so动态库 3.…

56 函数递归调用

函数的递归调用是函数调用的一种特殊情况。递归函数就是一个调用自己的函数。 函数递归通常用来把一个大型的复杂问题层层转化为一个与原来问题本质相同但规模很小、很容易解决或描述的问题&#xff0c;只需要很少的代码就可以描述解决问题过程中需要的大量重复计算。 # 使用递…

浅谈简单的程序优化技巧(C++)

在 C 编程中&#xff0c;优化是提升程序性能的关键步骤。常数优化&#xff0c;虽然看似细微&#xff0c;但在某些情况下却能显著提高程序的运行效率。本文将为您介绍一些实用的 C 常数优化技巧。 输入输出优化 看一下这道题&#xff1a; 【模板】快速读入 题目背景 制约解…

(多态)向上和向下转型的注意

两个无继承关系的类&#xff0c;即使都继承同一父类Fruit&#xff0c;但是Apple和Banana毫无关联&#xff0c;所以不能苹果类对象不能转型为香蕉类&#xff0c;只有有继承关系的类&#xff0c;才能向上和向下转型。 程序代码实现如下&#xff1a; class Fruit{}class Apple ex…