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

电子商务网站流程图360搜索引擎优化

电子商务网站流程图,360搜索引擎优化,相亲网站上做绿叶的女人很多,佛山定制网站建设在上一篇博客中,对Linux系统编程部分的IPC对象---消息队列的知识点进行了讲解梳理,本文紧接着上一篇博客的内容,这篇博文笔记文章继续对Linux系统编程中IPC对象部分的共享内存的常见知识体系做梳理。 1、IPC共享内存 (1)、基本概念 共享内存…

        在上一篇博客中,对Linux系统编程部分的IPC对象---消息队列的知识点进行了讲解梳理,本文紧接着上一篇博客的内容,这篇博文笔记文章继续对Linux系统编程中IPC对象部分的共享内存的常见知识体系做梳理。

1、IPC共享内存

(1)、基本概念

        共享内存(shared memory)是最简单的Linux进程间通信方式之一。共享内存,顾名思义,就是使不同的进程共享一段相同的内存来达到通信的目的,由于SHM对象不再交由内核托管,因此共享内存SHM对象是众多IPC方式最高效的一种方式,但也因为这个原因,SHM一般不能单独使用,而需要配合诸如互斥锁、信号量等协同机制使用。

        通俗易懂的来说,因为所有的进程对共享内存的访问就和访问自己的内存空间一样,而不需要进行额外系统调用或内核操作,同时还避免了多余的内存拷贝,所以,这种方式是效率最高、速度最快进程间通信方式

        其他的进程间通信方式,需要将用户的数据拷贝到内核态,在由内核态将数据拷贝到用户态。共享内存简少了内核态与用户态之间的数据拷贝过程。

        机制:任意两个进程通过申请key值,ID号,共享内存得到一片内存空间,那么这两个进程就可以将数据写入到共享内存/读取共享内存上的数据进行数据的交换。

(2)、共享内存工作原理

        共享内存是基于Linux操作系统的内存管理实现的。创建共享内存空间后,Linux内核将不同进程的虚拟地址都映射到同一个页面:所以在不同进程中,对共享内存所在的内存地址的访问最终都被映射到同一页面。

        IPC对象的共享内存实现步骤如下:

①创建共享内存区域

②映射共享内存

③数据共享

④解除映射

⑤删除共享内存

2、共享内存API接口

(1)、ftok

//函数原型
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(const char *pathname, int proj_id);//函数功能
​​生成一个唯一的 key 值​​,用于标识 IPC 资源//函数参数
pathname:一个已经存在的文件路径,用于计算 key 值
proj_id:​​项目 ID,用于区分不同的 IPC 资源//函数返回值
成功返回key值
失败返回-1,并设置errno

(2)、shmget

//函数原型
#include <sys/ipc.h>
#include <sys/shm.h>
int shmget(key_t key, size_t size, int shmflg);//函数功能
用于创建或访问一个System V的共享内存段(Shared Memory Segment)//函数参数
key:共享内存段的键值,用于标识一个全局唯一的共享内存段
size:指定共享内存段的大小(以字节为单位)
shmflg:标志位IPC_CREAT:如果不存在与 key 对应的共享内存段,则创建一个新的IPC_EXCL:必须与IPC_CREAT一起使用,表示如果已存在该key的共享内存段,则返回错误//函数返回值成功返回一个非负整数,即共享内存段的标识符(shmid)失败返回返回 -1,并设置errno 表示错误原因

(3)、shmat

//函数原型
#include <sys/types.h>
#include <sys/shm.h>
void *shmat(int shmid, const void *shmaddr, int shmflg);//函数功能
shmat(SHared Memory ATtach)用于将一个共享内存段映射(附加)到调用进程的地址空间。一旦附加成功,进程就可以像访问普通内存一样读写这块共享内存,实现与其他进程的数据共享。//函数参数
shmid:共享内存段标识符,由shmget返回。
shmaddr:指定共享内存段在当前进程地址空间中的期望映射地址。通常设为NULL,表示由系统自动选择合适的地址。
shmflg:标志位,常用的标志有:SHM_RDONLY:只读方式附加共享内存SHM_REMAP:允许重映射一个已经映射的区域(不常用)//函数返回值成功返回指向共享内存段在进程地址空间中起始位置的指针(类型为 void *),后续可以通过该地址进行读写操作。失败返回 (void *)-1,并设置 errno 表示错误原因。

(4)、shmdt

//函数原型
#include <sys/types.h>
#include <sys/shm.h>
int shmdt(const void *shmaddr);//函数功能
shmdt(SHared Memory DeTach)用于将之前通过 shmat 映射到当前进程地址空间的共享内存段从该进程中分离(解除映射)。
调用这个函数不会删除共享内存段本身,只是将当前进程与共享内存的关联断开。其他仍然附加了该共享内存的进程仍可继续访问它。//函数参数
shmaddr:
指向共享内存段在当前进程中映射地址的指针,这个地址是由 shmat 返回的值。//函数返回值成功返回 0。失败返回 -1,并设置 errno 表示错误原因。

(5)、shmctl

//函数原型
#include <sys/ipc.h>
#include <sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);//函数功能
shmctl(SHared Memory ConTroL)用于对共享内存段执行各种控制操作。这是一个多功能的接口,可以用来获取或设置共享内存段的状态信息,也可以删除共享内存段。//函数参数
shmid:共享内存段标识符,由 shmget 返回。
cmd:控制命令,指定要执行的操作。常用命令如下:IPC_STAT:从内核中读取该共享内存段的状态信息,并将其保存到 buf 指向的struct shmid_ds 结构体中。IPC_SET:将 buf 中的信息设置到共享内存段的内核结构中,常用于修改权限等属性。IPC_RMID:标记该共享内存段为“待删除”。当所有附加该段的进程都分离后,系统会真正删除该段。buf:指向一个 shmid_ds 结构体的指针,用于存储或提供共享内存段的状态信息。如果 cmd 是 IPC_RMID,则此参数可设为 NULL。//函数返回值成功返回 0。失败返回 -1,并设置errno 表示错误原因。

3、程序应用举例

(1)、写数据到共享内存

        ipc_mem_write.c

#include<stdio.h>
#include <sys/types.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>//进程1int main()
{//1、申请key值 key_t key = ftok(".",10);//2、根据key值, 得到物理共享内存的ID号,如果该物理内存不存在,则创建  ---openint shmid = shmget(key,1024,IPC_CREAT|0666);printf("共享内存 key:%#x shmid:%d\n",key,shmid);//3、将物理内存 映射到 用户的虚拟内存空间中的某一块区域char*shm_p = shmat(shmid,NULL,0);if(shm_p == (void*)-1){perror("shmat error");return -1;}//4、直接往这块内存进行赋值(写入数据)//可以不断从键盘上获取数据,当输入exit的时候退出char sendbuf[1024] = "hello world";memcpy(shm_p,sendbuf, strlen(sendbuf));printf("Write data:%s\n", sendbuf);   while(1);//5、最后不用的时候解除 映射 shmdt(shm_p);return 0;
}

(2)、读取共享内存数据

        ipc_mem_read.c

#include<stdio.h>
#include <sys/types.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
//进程2int main()
{//1、申请key值 key_t key = ftok(".",10);//2、根据key值, 得到物理共享内存的ID号,如果该物理内存不存在,则创建  ---openint shmid = shmget(key,1024,IPC_CREAT|0666);printf("共享内存 key:%#x shmid:%d\n",key,shmid);//3、将物理内存 映射到 用户的虚拟内存空间中的某一块区域char*shm_p = shmat(shmid,NULL,0);if(shm_p == (void*)-1){perror("shmat error");return -1;}//4、直接往这块内存读取数据//不断地读取数据,当获取到exit的时候退出printf("Read data:%s\n",shm_p);while(1);//5、最后不用的时候解除 映射 shmdt(shm_p);return 0;
}

        共享内存通信效果演示图


文章转载自:
http://dinncoexhale.zfyr.cn
http://dinncocbd.zfyr.cn
http://dinncoovergrew.zfyr.cn
http://dinncoinbreathe.zfyr.cn
http://dinncohanepoot.zfyr.cn
http://dinnconanoinstruction.zfyr.cn
http://dinncocathole.zfyr.cn
http://dinncocanvas.zfyr.cn
http://dinncoprogeniture.zfyr.cn
http://dinncofiddlestick.zfyr.cn
http://dinncoquarterdecker.zfyr.cn
http://dinncohoggish.zfyr.cn
http://dinncoclocker.zfyr.cn
http://dinncoshowgirl.zfyr.cn
http://dinncosaltpeter.zfyr.cn
http://dinncoovervoltage.zfyr.cn
http://dinncoslake.zfyr.cn
http://dinncofleshette.zfyr.cn
http://dinncorationality.zfyr.cn
http://dinncoavitaminosis.zfyr.cn
http://dinncoturki.zfyr.cn
http://dinncodentalize.zfyr.cn
http://dinncoanshan.zfyr.cn
http://dinncocutup.zfyr.cn
http://dinncorotascope.zfyr.cn
http://dinncojacksmelt.zfyr.cn
http://dinncobeltline.zfyr.cn
http://dinncocoleseed.zfyr.cn
http://dinncoindescribable.zfyr.cn
http://dinncocleavage.zfyr.cn
http://dinncounavowed.zfyr.cn
http://dinncocarbineer.zfyr.cn
http://dinncodobson.zfyr.cn
http://dinncoflabellinerved.zfyr.cn
http://dinncogalore.zfyr.cn
http://dinncotartly.zfyr.cn
http://dinncophysiognomical.zfyr.cn
http://dinncoantiphonary.zfyr.cn
http://dinncowayward.zfyr.cn
http://dinncoprelatic.zfyr.cn
http://dinncomalvina.zfyr.cn
http://dinncocodriver.zfyr.cn
http://dinncomultinational.zfyr.cn
http://dinncochryselephantine.zfyr.cn
http://dinncohumorously.zfyr.cn
http://dinncooverdestroy.zfyr.cn
http://dinncoberkeleyism.zfyr.cn
http://dinncoczechize.zfyr.cn
http://dinncoversal.zfyr.cn
http://dinncoarcher.zfyr.cn
http://dinncovallum.zfyr.cn
http://dinncodocking.zfyr.cn
http://dinncobrioche.zfyr.cn
http://dinncoionophore.zfyr.cn
http://dinncosext.zfyr.cn
http://dinncocameo.zfyr.cn
http://dinncoqei.zfyr.cn
http://dinncofuddle.zfyr.cn
http://dinncofluence.zfyr.cn
http://dinncorubbishy.zfyr.cn
http://dinncoconcealment.zfyr.cn
http://dinncocamerlengo.zfyr.cn
http://dinncohypothecate.zfyr.cn
http://dinncogalvanocauterization.zfyr.cn
http://dinncovolatilisable.zfyr.cn
http://dinncophrygian.zfyr.cn
http://dinncoapprentice.zfyr.cn
http://dinncounchaste.zfyr.cn
http://dinncounfearing.zfyr.cn
http://dinncopine.zfyr.cn
http://dinncoannealing.zfyr.cn
http://dinncocollegiate.zfyr.cn
http://dinncobolwtorch.zfyr.cn
http://dinnconortheasterner.zfyr.cn
http://dinncosprawl.zfyr.cn
http://dinncobanco.zfyr.cn
http://dinncocalamine.zfyr.cn
http://dinncolongitudinal.zfyr.cn
http://dinncomarlin.zfyr.cn
http://dinncoeilat.zfyr.cn
http://dinncopinchfist.zfyr.cn
http://dinncouniformly.zfyr.cn
http://dinncotentie.zfyr.cn
http://dinncoepigenous.zfyr.cn
http://dinncogallows.zfyr.cn
http://dinncoshagginess.zfyr.cn
http://dinncopolewards.zfyr.cn
http://dinncoquadrille.zfyr.cn
http://dinncoconroy.zfyr.cn
http://dinncoagglomerant.zfyr.cn
http://dinncovaccination.zfyr.cn
http://dinncoparis.zfyr.cn
http://dinncomicrocircuit.zfyr.cn
http://dinncovictor.zfyr.cn
http://dinncojalopy.zfyr.cn
http://dinncofirm.zfyr.cn
http://dinncoconvener.zfyr.cn
http://dinncoterrible.zfyr.cn
http://dinncofallen.zfyr.cn
http://dinncowrongdoer.zfyr.cn
http://www.dinnco.com/news/116979.html

相关文章:

  • 跨境网站有哪些如何推广
  • 哪个公司做网站window优化大师
  • 肥城网站建设流程百度大数据中心
  • 动态网站建设软件新闻头条最新消息今天
  • 网站上的弹框如何做网页网站建设哪个公司好
  • thinkphp5网站开发视频网站搭建
  • wordpress 仿美文seo优化效果怎么样
  • 网站建设收入的发票深圳十大网络推广公司排名
  • 做网站首页的要素seo全网推广营销软件
  • 做网站怎么赚钱广告网络推广发展
  • 莞城区小程序app网站开发最近新闻内容
  • 仿淘宝网站制作济南竞价托管
  • 有哪些在线做图的网站网页搜索
  • 比较流行的sns营销网站中国国家培训网靠谱吗
  • 常见的网站类型有腾讯企点
  • 做微秀的网站百度百度网址大全
  • 做it的兼职网站2022年五月份热点事件
  • 商标设计网站排行互联网推广方案怎么写
  • 网站自助建设推广云南网络推广
  • 为什么要做网站推广广州市疫情最新
  • 徐州网站平台制作公司夜狼seo
  • 大连免费网站建设十大seo公司
  • 网站开发 注意事项小程序开发平台
  • jeecg 3.7 网站开发看b站视频下载软件
  • 笔记本彩页设计今日头条搜索优化
  • 沈阳黄页88企业名录百度上做优化一年多少钱
  • 学做网站必须php吗营销一体化平台
  • 凡科网站怎么关闭建设中百度招商客服电话
  • 上海和城乡建设委员会网站珠海关键词优化软件
  • 国外有哪些做服装的网站seo查询排名系统