IPC--共享内存
有了之前的学习经验,共享内存对我们学习起来相对简单一些了,这里简单说说共享内存的一些,然后对于函数的分析直接在代码里面的注释部分有说明,如果还是不懂,可以先看看前面的关于IPC–信号量还有IPC–消息队列的讲解
共享内存以传递数据为目的,速度最快,不需要数据在内存还物理内存的来回的拷贝,直接访问访问虚拟地址空间
共享内存没有同步与互斥机制,这个时候我们可以结合着IPC–信号量进行进程间通信
下面我们直接粘贴代码
client.c
#include"comm.h"int main()
{int shmid = getShm(0);int i = 0;char* arr = (char*)shmat(shmid,NULL,0);while(1){sleep(1);printf("%s\n",arr);i++;if(i==25)break;}int dt = shmdt(arr);if(dt < 0){perror("shmdt\n");return -1;}return 0;
}
comm.c
#include"comm.h"static int commShm(int size,int flag) //size:共享内存的大小,flag:进行何种操作,是获取还是创建
{key_t key = ftok(PATHNAME,ID);if(key < 0){perror("key_t\n");return -1;}int shmid = shmget(key,size,flag); //key:键值,size:大小,这里传入的大小最好是4k(4096)的倍数//因为4096是一页,如果我们传递的是4097,系统会自动的对齐到8192,//但是因为我们申请的是4097,剩下的内存系统不会给你,flag:创建方式if(shmid < 0){perror("shmget\n");return -2;}return shmid;
}int creatShm(int size) //size:创建内存空间的大小
{return commShm(size,IPC_CREAT|IPC_EXCL|0666);
}int getShm(int size)
{return commShm(size,IPC_CREAT); //size:默认设置为0
}int desShm(int shmid)
{int des = shmctl(shmid,IPC_RMID,NULL); //shmid:删除的是哪一个共享内存,IPC_RMID:控制方式,这里是删除的意思//NULL:这里是struct shmid_ds *buf,这是一个维护共享 内存的一个结构体//暂时不关心if(des < 0){perror("shmctl\n");return -1;}return des;
}
comm.h
#ifndef _COMM_H_
#define _COMM_H_#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>#define PATHNAME "."
#define ID 0x6666int creatShm(int size);
int getShm(int size);
int desShm(int shmid);#endif
server.c
#include"comm.h"int main()
{int i = 0;int shmid = creatShm(27);char* arr = (char*)shmat(shmid,NULL,0); //这里可以把shmat当成是malloc使用,shmid:信号量标识符//NULL:const void* shmaddr,虚拟地址空间,设置为NULL,这个是系统自己定义的//返回值void* 这个时候我们要强制转换成我们需要的类型for(;i<26;){sleep(1);arr[i] = 'A' + i; //这里可以直接当成是malloc开辟的一个数组使用i++;arr[i] = 0;}int dt = shmdt(arr); //arr:这个就是我们上面的那个内存空间地址if(dt < 0){perror("shmdt\n");return -1;}desShm(shmid);return 0;
}
相关文章:

2020年行政区划代码_2020年柳州市行政区划,了解柳州市有几个区,详细数据
本文通过整理了柳州市行政区划代码数据及柳州市统计用的城乡划分代码,带你了解柳州市有几个区、县及下面的街道和镇划分详细情况。柳州市有几个区、县、县级市?答:柳州市有5个区、5个县(行政区划2020年7月)。分别为:城中区、鱼峰区…

sql2000 转sql2008
1,在sql2008服务器上新建空数据库,与sql2000同名,当然可以不同名。 2,在sql2008服务器上选择数据库,点右键,任务-导入数据。打开导入数据向导。 3,点击下一步,选择数据源。数据源可以…

linux下查看网卡型号
查看网卡型号[rootcentos /]# lspci | grep Ethernet02:01.0 Ethernet controller: Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE] (rev 10)我这里型号是79c970,驱动pcnet32.查看驱动信息[rootcentos /]# modinfo pcnet32filename: /lib/modules/2.6.18-194.el5/…

linux_域名映射
vi /etc/hosts在最后加上ip及映射的域名192.168.229.111 node001192.168.229.112 node002192.168.229.113 node003 转载于:https://www.cnblogs.com/lxyuuuuu/p/9578659.html
地址解析协议ARP
设计需求 ARP协议解决的问题就是:在同一个局域网中,解决主机IP地址和硬件地址的映射问题 基本使用原理 当数据在网络中某一条链路传输的时候我们知道目的主机的IP地址,但是不知道硬件地址,ARP协议就是解决这个问题的一个协议&a…

ie8加载js太慢_js ie8 慢
Re请教ap6214f2r版主一些问题引用第2楼ap6214f2r于2012-09-10 14:08发表的 :楼主,关于你说的慢,我去看了下你网站响应速度非常快[attachment26863]这个请求是计算签名,跳转到OSS的。.......老大,我刚才试了一下,不是线…

LINQ : IEnumerableT and IQueryableT区别
本地数据源计算机会自动使用IEnumberable<T>,远程数据源会使用IQueryable<T> 下面这条语句没有使用数据库里的EF数据,显示如下: 下面这条语句使用数据库里的EF数据,显示如下: 针对Linq “LINQ TO to OBJECTS”&#…

九大网络安全失误,需要注意
在我们的职业生涯中大都曾经有过一次这样的经历——我是说你认为足以让你丢掉饭碗的失误。我的第一次重大失误是曾经重启了校园里的所有路由器,不是一个接一个的,而是所有一次完成。我写了一个脚本,为所有的路由器安装一个安全更新࿰…

python学习笔记——Thread常用方法
http://blog.sina.com.cn/s/blog_4b5039210100ewie.html Thread对象中的一些方法: 以前说过多线程,用到threading模块中的Thread对象,其中的start和run方法比较熟悉了,start()是重载了Thread对象中的run方法…

常见的路由选择算法
一、路由表 所谓路由表,指的是路由器或者其他互联网网络设备上存储的表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。 二、常见路由表生成算法 路由算法是提高路由协议功能,尽量…

linux 远程挂载摄像头_基于Linux的嵌入式网络摄像机设计
本嵌入式网络摄像机采用高性能ARM9芯片微处理器,内置嵌入式Web服务器。通过嵌入式多任务操作系统采集摄像机视频数据;采集的视频信号数字化后经MJPEG算法压缩,再通过内部总线送到内置的Web服务器;使用者可以直接用浏览器观看Web服…

2012 ARM嵌入式开发应用研讨会杂谈
记得以前参加的ARM的研讨会,名称是技术研讨会,不知道为什么现在改名为嵌入式开发应用研讨会了。不过今年演讲的重点就是 ARM DS-5开发工具(还免费发放了一本《Linux/Android开发利器 ARM DS-5使用指南》书籍),也许这就…

打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )
此文章参考《深入理解计算机系统》P31。 先看如下代码: 12345的十六进制表示为:0x00003039 1 #include <stdio.h>2 3 int main()4 {5 int a 12345;6 char *q (char *)(&a);7 for(int i 0; i < sizeof(a); i)8 prin…

NAT技术和代理服务器
一、代理服务器 所谓“代理”,就是代而劳之的意思。代理服务器就是代理网络用户去取得网络信息,形象的说:它是网络信息的中转站,使得一个网络终端和另一个网络终端不直接进行相连,代理网络用户去取得信息。主要工作在O…
链接全局变量再说BSS段的清理
废话就不多说了,开始。。。 再说BSS段的清算 以前遇到一个裸机程序不能改变全局变量值的问题,最后模模糊糊处理了:手动添加了一个链接脚本,清算了BSS段。问题得以处理,就认定是BSS段清算的问题,全局变量在B…

ios启动页尺寸_关于移动端App启动页的策划方案
App启动页是指app在启东时需要加载必要的运行环境和配置,在这个过程中提示用户等待的一个过渡页面。在产品经理眼里启动页是app给予用户重要的第一印象;也是App最重要的黄金页面之一,所有用户100%都会看到的页面。启动页适合用来做以下几个事…

事件流--事件冒泡现象及阻止
事件冒泡现象 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>事件冒泡现象</title><style>div{padding: 50px;}#div1{background: red;}#div2{background: blue;}#div3{background: yell…

谁知道静态成员的纠结心境
我们在实际开发的过程中,可能需要某些类的成员变量并不是针对每一个对象的,而是针对每一个类而言的,比如在银行中有一个利率数据,我们希望的是,当一个利率改变的时候,所有的对象都能够看到这个改变的数据&a…
.net ConfigurationSectionDesigner插件使用
最近接触了vs2010的一款插件:ConfigurationSectionDesigner。ConfigurationSectionDesigner是一个图型化设计.net的配置块和自动生成需要代码和schema定义的codeplex上的一个开源项目,现在分享出来,希望对大家有所帮助。 .Net配置体系中可以是…

对应到对象 数据库驼峰_【GI的自主空间数据库】一种竞争力,叫技术引领;一种竞争力,叫时间沉淀...
引子:GI的自主空间数据库及GIS框架来自于求学时MAPGIS的引导,工作时ARCGIS的追随,读博时IBM和Microsoft2篇文献...。即使在大数据技术发展的今天,自主空间数据库存储仍然有其技术优势,近20年的时间沉淀,是G…

TSM备份Windows数据
一、备份数据 1.使用备份勾当客户端,可以在原始文件出现损坏的时候,恢复备份版本。TSM提供备份和恢复文档的类型包括:FAT,NTFS和FAT32.2.合适备份和合适归档文件当备份-归档客户端备份或归档一个文件,他会发送一份文档的副本和它的…

GM Tech 2 works with Hummer Yes or No
This is about GM Tech 2 scan tool for Hummer troubleshooting and programming. Can I have a cheap Tech 2 for Hummer? Yep. Both the original and HQ clone can work for your car. Where can I get a working clone at a good price? https://www.obd2tool.com/goods…
程序的编译和链接过程
一.虚拟机、linux简介简单介绍一下虚拟机还有就是各种操作系统,比如centos,Ubuntu操作系统:linux(centos、Ubuntu、redhat),Android,Windows(xp、win8、win10)进程&#…

Nosql网络阅读
#1 Node.jsmongodb 开源项目 https://github.com/DoubleSpout/wujb 作者博客:http://snoopyxdy.blog.163.com/blog/static/60117440201261844125973/ #1 关系数据库还是NoSQL数据库 NoSQL的分类 NoSQL仅仅是一个概念,NoSQL数据库根据数据的存储模型和特点分为很多…

python 文案自动生成_Python自动化测试如何自动生成测试用例?
原文作者:陈安妮annie1原出处:简书上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰,我们将立即处理。传统的测试用例需要测试或者开发人员将用户的操作用代码表示出来,通过断言判断是否和预…

Linux下图解minicom安装
Linux下图解minicom安装 minicom是一个串口通信工具,就像Windows下的HyperTerminal。可用来与串口设备通信,如调试交换机和Modem等。它的Ubuntu软件包的名称就叫minicom,用apt-get install minicom即可安装。全文见附件pdf

【C#技术】一篇文章搞掂:Infragistics组件库
工具栏 // 按钮不可按 tool.SharedProps.Enabled false; Grid // Grid中记录时间 // 建议SQL Server中使用字符字段(没有深入测试,只是字符字段可行),然后设置Grid的属性中,列的Style属性为Time或TimeWithSpin// 使用…

移动端开发小结
1. viewport viewport:除去所有工具栏、状态栏、滚动条等之后用于查看网页的区域,打个比方,现在有一张报纸摆在你面前,但是这张报纸被一本书压住了,所以你只能看到报纸的一部分,这部分可以查看到的区域就是…
vim编辑文章后不能修改
我们在使用vim打开一个文件的时候,经常会弹出下面的界面 为什么会出现这个界面呢 用vim编辑文件(如这里的test.txt)时,系统会自动产生一个文件叫.test.txt.swp.如果正常退出,此文件会被自动删去.如果上次非正常退出,如果再编辑它,系统会首先查.test.txt.swp 是否存…

echart x轴标签偏移_移动端H5页面滑动手势X轴实例
话不多少,上代码。let touchX 0 // 默认初始值// 两行注释伪代码,绑定 touchstart 与 touchend 事件// dom.addEvenetListener(touchstart, touchStart)// dom.addEvenetListener(touchend, touchEnd)function touchStart(e) { // 手指触碰时候…