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

0805作业+梳理

一、作业:

代码:

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.lryc.cn/news/415841.html

相关文章:

  • Java高并发编程详解教程(对高并发更深一层的领悟和体会 电子版)
  • 字符串中的第一个唯一字符
  • leetcode数论(​3044. 出现频率最高的质数)
  • 70.加载功能菜单功能设计
  • 在线Banner设计工具大比拼:谁更胜一筹
  • C++ STL copy, move 用法
  • MoonBit 周报 Vol.52:增加类型别名的支持、错误类型声明方式说明、MoonBit AI 支持生成文档等!
  • Android开发之事件分发
  • PyTorch深度学习实战(2)——PyTorch快速入门
  • ServletConfig、ServletContext超详细讲解
  • 【文献阅读】GraphAny: A Foundation Model for Node Classification on Any Graph
  • 动态规划.
  • PHP常用函数
  • 完全用python 实现消息中间件4
  • 公司新来的两个Java后端,因题背太熟轻松过面试?
  • Pinia状态管理库
  • 利用ffmpeg转码视频为gif图片,调整gif图片的大小
  • 【Java 第四篇章】流程控制、容器
  • 华为云全域Serverless技术创新:全球首创通用Serverless平台被ACM SIGCOMM录用
  • 除自身以外数组的相乘 C++
  • Element UI 如何配置文件来设置全局的语言选项。
  • Windows 常用命令集锦
  • 第一阶段面试问题(后半部分)
  • 【AIGC】ComfyUI入门-使用ComfyUI_MagicClothing插件在生成图片时候出现的问题
  • 巴黎奥运会8K转播科技为国产品牌自主研发设计
  • 【Material-UI】Button 组件中的图标和标签按钮(Buttons with Icons and Label)详解
  • K个一组翻转链表(LeetCode)
  • 2-56 基于matlab的图像融合增强技术
  • 序列化定义以及使用和注意事项
  • 吴恩达机器学习COURSE1 WEEK3