社区
Linux/Unix社区
帖子详情
关于共享内存的的问题~
bm1408
2006-05-11 09:22:14
最近在弄一个程序,要使用共享内存,要求很简单,就是父进程写进信息,子进程读出来
大家给一个例子吧
比如说:
struct student
{
int id;
char name[`11];
}STU[MAX];
父进程把这个结构体信息放入共享内存中,然后子进程读出并修改,
大家给个例子~~~
...全文
161
1
打赏
收藏
关于共享内存的的问题~
最近在弄一个程序,要使用共享内存,要求很简单,就是父进程写进信息,子进程读出来 大家给一个例子吧 比如说: struct student { int id; char name[`11]; }STU[MAX]; 父进程把这个结构体信息放入共享内存中,然后子进程读出并修改, 大家给个例子~~~
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
x86
2006-05-11
打赏
举报
回复
#include <stdlib.h>
#include <sys/shm.h>
#define ARRAY_SIZE 40000
#define MALLOC_SIZE 100000
#define SHM_SIZE 100000
#define SHM_MODE 0600 /* user read/write */
char array[ARRAY_SIZE]; /* uninitialized data = bss */
int
main(void)
{
int shmid;
char *ptr, *shmptr;
printf("array[] from %lx to %lx\n", (unsigned long)&array[0],
(unsigned long)&array[ARRAY_SIZE]);
printf("stack around %lx\n", (unsigned long)&shmid);
if ((ptr = malloc(MALLOC_SIZE)) == NULL)
printf("malloc error\n");
printf("malloced from %lx to %lx\n", (unsigned long)ptr,
(unsigned long)ptr+MALLOC_SIZE);
if ((shmid = shmget(IPC_PRIVATE, SHM_SIZE, SHM_MODE)) < 0)
printf("shmget error\n");
if ((shmptr = shmat(shmid, 0, 0)) == (void *)-1)
printf("shmat error\n");
printf("shared memory attached from %lx to %lx\n",
(unsigned long)shmptr, (unsigned long)shmptr+SHM_SIZE);
if (shmctl(shmid, IPC_RMID, 0) < 0)
printf("shmctl error\n");
exit(0);
}
Android专用驱动
Android专用驱动构成了Android运行时的基石。从技术上来讲,Android专用驱动也是整个Android系统的亮点,特别是Binder驱动。Binder是一种进程间通信机制(IPC),它与传统的IPC机制对比,最大的特点是高效,因为通信数据在两个进程之间只需要执行一次拷贝即可。Binder在Android系统里面使用得非常广泛以及频繁。在涉及到比较大的通信数据时,Binder通常还结合另外一个驱动Ashmem来使用。Ashmem是一个
共享内存
驱动,它与传统的
共享内存
相比,最大的特点是它是通过文件描述符来描述的,并且可以动态地进行分块管理。动态分块管理的目的是可以将部分不再使用了的内存交回给系统,非常适合内存较小的移动设备使用。另外一个专用驱动Logger是一个日志驱动,它与传统的日志系统对比,特点是日志是记录在内核空间而非文件中,这样就可以提高日志的读写速度。这个PPT讲Logger、Binder和Ashmem三个Android专用驱动的实现原理。由于这三个驱动在Android源代码里面用得非常广泛和频繁,因此理解它们的实现原理,就可以掌握Android的精华。这对以后阅读Android系统的其它代码,也是非常有帮助的。
进程间通信——
共享内存
(Shared Memory)
共享内存
是System V版本的最后一个进程间通信方式。
共享内存
,顾名思义就是允许两个不相关的进程访问同一个逻辑内存,
共享内存
是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问
共享内存
中的地址。如果某个进程向
共享内存
写入数据,所做的改动将立即影响到可以访问同一段
共享内存
的任...
Linux:
共享内存
共享内存
的原理 在物理内存中开辟一块空间; 不同进程通过页表将该空间映射到字节的进程虚拟地址空间中; 不同进程通过操作自己进程虚拟地址空间当中的虚拟地址,来操作
共享内存
; 使用
共享内存
步骤: 创建
共享内存
; 附加,将进程附加该
共享内存
上(将进程虚拟地址和物理地址通过页表建设映射关系); 分离,将虚拟地址和物理地址的映射关系从页表中删除
共享内存
映射到物理地址空间时 ,是映射在共享区中(在栈区和堆区中间)
共享内存
接口: 1.创建或者获取
共享内存
key_t ftok(const char
Linux_System V进程通信_
共享内存
+命令查看
共享内存
Linux SystemV通信包括:
共享内存
,消息队列,信号量 其中信号量为了进程的同步与互斥而设计的
共享内存
和消息队列为了进程间传递数据设计 这里讨论其中之一的
共享内存
文章目录1.
共享内存
原理2
共享内存
建立过程①申请
共享内存
shmget函数(sys/ipc.h -sys/shm.h)(创建
共享内存
)保证
共享内存
的唯一性ftok函数的代码(sys/types.h sys/ipc.h)shmflg:创建
共享内存
的选项。申请
共享内存
代码命令查看
共享内存
(ipcs -m)②
共享内存
挂接到进程空间(建立映射关
共享内存
和内存映射的区别
1.
共享内存
可以直接创建,内存映射需要磁盘文件(匿名映射除外) 2.
共享内存
效果更高 3.内存 所有的进程操作的是同一块
共享内存
。 内存映射,每个进程在自己的虚拟地址空间中有一个独立的内存。 4.数据安全 - 进程突然退出
共享内存
还存在 内存映射区消失 - 运行进程的电脑死机,宕机了 数据存在在
共享内存
中,没有了 内存映射区的数据 ,由于磁盘文件中的数据还在,所以内存映射区的数据还存在。 5.生命周期 - 内存映射区:进程退出,内存映射区销毁 -
共享内存
:进程退出,
共享内存
还在,标记删除(所有的关联的进
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章