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

根据描述生成图片的网站网页制作的基本步骤视频

根据描述生成图片的网站,网页制作的基本步骤视频,问答网站建设怎么提问,中国建筑集团有限公司官网子公司Linux:进程间通信-CSDN博客 我们说匿名管道只能用于父子进程这样的关系通信,那么陌生进程怎么通信? 我们之前说父子进程能通信的最关键的地方就在于子进程复制了一份父进程的files_struct,从而通过文件的inode映射同一份文件来通…

Linux:进程间通信-CSDN博客

我们说匿名管道只能用于父子进程这样的关系通信,那么陌生进程怎么通信?

我们之前说父子进程能通信的最关键的地方就在于子进程复制了一份父进程的files_struct,从而通过文件的inode映射同一份文件来通信;而陌生的进程他们怎么看见同一份文件?

通过文件内核缓冲区

什么叫文件内核缓冲区?

来先看看一个朴素的通信:

一个进程把数据写到磁盘上的一个文件,另一个进程从磁盘中读取来完成通信

但是每次我们都要把文件从磁盘加载出来,很慢,所以我们理想的情况是这个中间文件,如果放到内存里(而不是磁盘),然后两个需要通信的进程一个从里面读,另一个从里面写,最后不用把数据刷新到磁盘里(因为是临时数据,无意义),这样就可以最大效益化的通信了

那么这两个文件怎么找到这个中间文件?

通过路径+文件名的方案

所以这个文件就要具备两个特点:

1.当该文件被打开时,不会被刷新在磁盘上,而是在内存中作为数据被临时保存

2.但是在磁盘层面上要有自己的文件名和路径,方便进程锁定

符合这两个条件的文件就是命名管道

利用命名管道进行进程间通信

命名管道的创建:mkfifo

第一个参数:创建的文件名,第二个参数:创建的管道的权限(管道也是一种文件)

成功返回0,失败返回-1

我们来写一下用命名管道来实现两个陌生进程的通信:

        大体逻辑是实现一个客户端和用户端的通信

comm.h:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include <sys/types.h>        
#include <sys/stat.h>
#include <fcntl.h>
#define MY_FIFO "./fifo"

server:


#include "comm.h"
int main(){umask(0);//防止设置权限时受umask影响//if(mkfifo(MY_FIFO,0666)<0){//创建管道文件//    perror("mkfifo");//    return 1;//}//printf("start");int fd=open(MY_FIFO,O_RDONLY);//打开文件if(fd<0){perror("open error");}//让我们的server提供读服务while(1){char buffer[1024]={0};ssize_t s=read(fd,buffer,sizeof(buffer)-1);if(s>0){buffer[s]=0;printf("client say:");//读取结束printf("%s",buffer);//break;}else if(s==0){printf("Client disconnected...\n");break;break;}else{perror("read error");//处理error}}close(fd);    
}

client.c:

#include"comm.h"//client和server都包含fifo文件,上图可以通信
int main(){//printf("start");int fd=open(MY_FIFO,O_WRONLY);if (fd<0){perror("open error");return 1;}while(1){printf("请输入:");fflush(stdout);//刷新缓冲区char buffer[64]={0};ssize_t s=read(0,buffer,sizeof(buffer)-1);if(s>0){buffer[s]=0;printf("%s\n",buffer);write(fd,buffer,strlen(buffer));}}close(fd);return 1;
}

实现结果:

这两个进程,我们要先执行./server/.exe来生成我们的命名管道文件fifo:

再执行./client.exe,用client端来操作server端

我们来验证一下命名管道到底会不会从磁盘加载内容:

./client.exe:

./server.exe:

会先卡在这里没有反应,卡多久呢?

因为是sleep(10)当然是10s了

所以如果你一次性输入很多内容到命名管道文件里,但是server并没有读取,一般来讲数据只能在管道文件里,可是我们发现管道文件的大小是0。这说明命名管道的数据为了效率,不会刷新到磁盘 ,等一会就会刷新

为什么之前的pipe叫匿名管道,这样子通信叫命名管道?

因为这个管道文件有名字啊!有名字有路径,大家是陌生的进程也可以看见同一份命名管道文件;而匿名管道靠的是父子间进程的继承,才实现的通信

好了就说到这里吧。。。放一张和兔兔的合照

http://www.bjxfkj.com.cn/article/108308.html

相关文章:

  • 街舞舞团公司做网站制作一个网站怎么架构
  • 网站建设开发数据库住房和建设部执业资格注册中心网站
  • 南阳高端网站建设前程无忧官网
  • 宁波全网营销型网站建设如何在社交网站上做视频推广
  • 网站域名审核时间网红营销分析
  • 网站更换服务器 seo外贸假发 网站
  • 无锡新区建设局网站龙岩kk网手机版
  • 常用的网站类型有哪些阳江网络推广公司
  • 网站规划与建设与安全管理html界面设计
  • wordpress网站速度做的好的微信商城网站
  • 网站 维护方案如何在国外推广自己的网站
  • 广西网站建设服务好山西省大同市网站建设公司
  • 关于网站图片番禺电商网站建设
  • 免费网站重生做军嫂建设银行网站优点
  • 想自己建一个公司网站怎么做北京网站关键词
  • 宜昌市城市建设学校网站微信公众平台登录入口内村完小
  • 信誉好的常州网站建设网站样板
  • 网站服务器内网打不开网页优化建议怎么写
  • 响应式自适应网站模板远程管理wordpress站群
  • 四川煤矿基本建设工程公司网站龙华网站建设-信科网络
  • 学校网站建设管理制度凡客诚品品牌授权
  • 室内设计网站大全免费自媒体app下载
  • 微信分销网站开发网络商城设计
  • 宁波cms模板建站如何做点对点视频网站
  • 湘潭网站建设方案案例网站开发 百度网盘
  • 比较好网站设计公司网址大全123设为主页
  • 网站建设答辩pptseo优化与品牌官网定制
  • 宁波网站建设流程有哪些wordpress锚文字
  • 刚注册在域名可以自己做网站吗国内seo服务商
  • 制作网站需要什么技术seo优化关键词排名优化