共享内存,多进程间共享结构体

共享内存 中 存结构体,多线程多进程间实现共享。

#define FILE_MSG_KEY	0xc54be5 ///< File message key.
#define PROC_MEM_SIZE 4096*3
#define MAX_SHARE_PROC	9
#define IPC_CREAT  00001000   /* create if key is nonexistent */
static int mFileId,qFileId;
static void *pShareMem;
int pShareMemInit(int key)
{
	int mid = shmget(key, PROC_MEM_SIZE * MAX_SHARE_PROC, IPC_CREAT | 0660);
	printf("shared memory size %d\n", PROC_MEM_SIZE * MAX_SHARE_PROC);
	if(mid < 0)
		mid = shmget(key, 0, 0);
	printf("shared memory id:%d\n",mid);
	if(mid < 0)
		return -1;
	return mid;
}

int readSysInfoCfg()
{
	mFileId = pShareMemInit(FILE_MSG_KEY);
	if(mFileId < 0)
		return -1;
	pShareMem = shmat(mFileId,0,0);

 	SysInfo *pSysInfo = (SysInfo *)pShareMem;

}
时间: 2024-10-09 04:06:21

共享内存,多进程间共享结构体的相关文章

C语言共享内存使用思路利用结构体

这里不介绍如何创建共享内存,如果想知道百度一下就好了.只介绍一下如何使用这一段连续的共享内存空间.思路就是利用结构体. 创建一个结构体,它的大小可以用sizeof()获取.注意这里有一个四字节对齐的问题,所以结构体的大小不仅仅是结构体内变量所占内存的简单相加. 思路:你创建一个结构体,无论你的结构体怎样,利用memcpy函数配合sizeof将结构体变量,copy到共享内存中然后,用的时候再用memcpy从共享内存copy到结构体中就行了. 一个例子如下: #include <string.h>

共享内存和操作共享内存几个函数的用法

简介:共享内存是进程间通信中最简单的方式之一.共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针.当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改. 在创建共享内存和操作共享内存的时候被下面这些函数的参数弄糊涂了, 遂写下各个函数的说明. 所需头文件 #include<sys/ipc.h> #include<sys/shm.h> 函数 (1)shmget(key_t key,int size,int

内存对齐模式与结构体

1.结构体是一种新的数据类型,对C语言的数据类型进行了极大的扩充. struct STU{ int age; char name[15]; }; struct STU  a;   //结构体实例 struct STU  *b;  //结构体指针 (1).可以通过a.age对其进行取成员的操作,b->age也可以进行结构体的操作. b->age存在问题,必须有一个结构体空间已经让b指向,b的值为此结构体空间的地址. (2).a.name = "lilei"; false,因为

你必须知道的指针基础-6.内存的初始化及结构体的使用

一.内存的使用 1.1 你创建的内存区域可能是脏的 当我们创建一个内存区域的时候,内存中的数据可能是乱七八糟的(可能是其他代码用过后遗留的数据),如下面一段代码: int main(int argc, char *argv[]) { // 下面申请的20个字节的内存有可能被别人用过 char chs[20]; // 这个代码打印出来的可能就是乱码,因为printf的%s是“打印一直遇到'\0'”. printf("%s\n",chs); return 0; } 其运行结果是如下图所示的

进程间通信IPC之--共享内存

每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication) 如下图所示: 进程间通信共七种方式: 第一类:传统的unix通信机制: # 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用.进程的亲

进程间通信_05共享内存_System V实现

一 概念 内核分配的一块存储去,多个进程可以将物理内存映射到进程的虚拟地址空间,从而实现对内存的直接操作,是效率最高的IPC. 消息队列和管道都有在用户地址空间和内核空间相互复制产生的开销. 二 操作函数 1 创建共享内存 #include <sys/ipc.h> #include <sys/shm.h> int shmget( key_t key, //代表共享内存唯一性的key值 size_t size, //共享内存的大小 int shmflg); //共享内存的属性设置 /

linux进程间的通信(C): 共享内存

一.共享内存介绍 共享内存是三个IPC(Inter-Process Communication)机制中的一个. 它允许两个不相关的进程访问同一个逻辑内存. 共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式. 大多数的共享内存的实现, 都把由不同进程之间共享的内存安排为同一段物理内存. 共享内存是由IPC为进程创建一个特殊的地址范围, 它将出现在该进程的地址空间中. 其他进程可以将同一段共享内存连接它们自己的地址空间中. 所有进程都可以访问共享内存中的地址, 就好像它们是由mallo

linux进程间的通信之 共享内存

一.共享内存介绍 共享内存是三个IPC(Inter-Process Communication)机制中的一个. 它允许两个不相关的进程访问同一个逻辑内存. 共享内存是在两个正在进行的进程之间传递数据的一种非常有效的方式. 大多数的共享内存的实现, 都把由不同进程之间共享的内存安排为同一段物理内存. 共享内存是由IPC为进程创建一个特殊的地址范围, 它将出现在该进程的地址空间中. 其他进程可以将同一段共享内存连接它们自己的地址空间中. 所有进程都可以访问共享内存中的地址, 就好像它们是由mallo

进程间通信(IPC)之————共享内存

一. 共享内存 在系统中,两个不同的进程都会维护自己的一块地址空间,这个地址空间一般是虚拟地址,会通过mmu和页表映射到对应的物理内存中,因为不同的进程会有不同的内存空间,因此两个进程之间是无法看见彼此的数据的,而共享内存就是使两个进程看到同一块地址空间,以此来实现不同进程间的数据交互. 值得提出的是,共享内存是进程间通信方式中最高效的一种,因为是直接通过访问内存来交换数据的,省去了消息队列中数据的复制和信号量中进行P.V操作所占用的时间. 二. 共享内存中的函数 共享内存的创建与销毁 创建: