所有函数所需的头文件请用man手册查阅,这里都不写了使用共享内存步骤:① 开辟一块共享内存shmget② 允许本进程使用共某块共享内存shmat③ 写入/读取删除共享内存步骤①禁止本进程使用这块共享内存shmdt②删除这块共享内存shmctl或者命令行下ipcrm1、创建共享内存任务描述:使用shm...
分类:
其他好文 时间:
2015-08-27 00:14:14
阅读次数:
413
进程通讯
内存共享
A进程创建共享区 shmget(…) 映射内存共享区 shmat(…)
B进程通过key找到共享区 映射内存共享区
进程间通讯
撤销各自的内存映射 shmdt()
删除共享区 shctl()
管道Pipe
A进程与B进程进行相互通讯 需要建立两个管道
当A->B时,需要在A中write end 在B中read end;当写入满时,管道阻塞;当管道无东西看读时 同样...
分类:
系统相关 时间:
2015-08-04 17:22:47
阅读次数:
186
共享内存是最高效的IPC机制,因为它不涉及进程之间的任何数据传输。这种高效带来的问题是,我们必须使用其他辅助手段来同步进程对内存的访问,否则会产生竞态条件(一般我们与信号量结合使用)。因此,共享内存通常和其他进程间通信方式一起使用。
Linux共享内存的API都定义在sys/shm.h头文件中,包括4个系统调用:shmget、shmat、shmdt和shmctl
#include ...
分类:
系统相关 时间:
2015-06-30 15:08:00
阅读次数:
267
linux应用开发-内存共享
一 虚拟内存
程序运行时,将需要的数据载入物理内存,其他的载入虚拟内存
内核态和用户态是系统内的方式
二 命令ipcs查看系统当前的通信方式
三 操作函数
获取共享内存地址shmget
映射到进程空间shmat
操作空间memcpy
关闭映射shmdt
根据需要是否删除该空间shmctl
...
分类:
系统相关 时间:
2015-05-18 14:48:01
阅读次数:
174
共享内存API#include
#include
int shmget(key_t key, size_t size, int shmflg);
void *shmat(int shmid, const void *shmaddr, int shmflg);
int shmdt(const void *shmaddr);
int shmctl(int shmid, int cmd, stru...
分类:
系统相关 时间:
2015-02-19 15:06:52
阅读次数:
228
shmdt函数功能:将共享内存段与当前进程脱离原型:int shmdt(const void *shmaddr);参数: shmaddr: 由shmat所返回的指针 返回值: 成功返回0;失败返回-1//实践:运行程序,观察ipcs输出
int main()
{
//获取或者打开共享内存
int shmid = shmget(0x15764221, 1024 * siz...
分类:
系统相关 时间:
2014-11-27 16:16:35
阅读次数:
332
共享内存是Linux下提供的最基本的进程通信方法,它通过mmap或者shmget系统调用在内存中创建了一块连续的线性地址空间,而通过munmap或者shmdt系统调用释放这块内存,使用共享内存的好处是多个进程使用同一块内存时,在任何一个进程修改了共享内存中的内容后,其它进程通过访问这段内存就能够得到内存变化。这里探讨nginx对共享内存的封装。...
分类:
其他好文 时间:
2014-11-14 17:54:49
阅读次数:
361
1) 用ftok()函数获得一个ID号.2) shmget()用来开辟/指向一块共享内存的函数3) shmat()将这个内存区映射到本进程的虚拟地址空间。4) shmdt()函数删除本进程对这块内存的使用5) shmctl() 控制对这块共享内存的使用1) mmap()系统调用使得进程之间通过映射同...
分类:
系统相关 时间:
2014-10-28 00:18:18
阅读次数:
387
本文首先介绍了众所周知的共享内存API,然后介绍了相关的内核主要数据结构,并逐一分析了shmget、shmat、数据访问、shmdt的内核实现及数据结构之间的动态关系,从数据的关联图即可一窥共享内存的实现机制。...
分类:
系统相关 时间:
2014-09-23 01:59:03
阅读次数:
537
一 概念
内核分配的一块存储去,多个进程可以将物理内存映射到进程的虚拟地址空间,从而实现对内存的直接操作,是效率最高的IPC。
消息队列和管道都有在用户地址空间和内核空间相互复制产生的开销。
二 操作函数
1 创建共享内存
#include
#include
int shmget( key_t key, //代...
分类:
其他好文 时间:
2014-09-22 15:56:52
阅读次数:
312