创建共享内存
来源:互联网 发布:linux重启mysql 编辑:程序博客网 时间:2024/06/10 00:25
在接受到客户端请求后需要先创建一个共享内存用于提高程序的运行效率,在接收到业务主机发来的状态信息时将其写入共享内存。
共享内存的创建
共享内存是存在于内核级别的一种资源,在shell中可以使用ipcs命令来查看当前系统IPC中的状态,在文件系统/proc目录下有对其描述的相应文件。函数shmget可以创建或打开一块共享内存区。函数原型如下:
#include <sys/shm.h>
int shmget( key_t key, size_t size, int flag );
函数中参数key用来变换成一个标识符,而且每一个IPC对象与一个key相对应。当新建一个共享内存段时,size参数为要请求的内存长度(以字节为单位)。
注意:内核是以页为单位分配内存,当size参数的值不是系统内存页长的整数倍时,系统会分配给进程最小的可以满足size长的页数,但是最后一页的剩余部分内存是不可用的。
当打开一个内存段时,参数size的值为0。参数flag中的相应权限位初始化ipc_perm结构体中的mode域。同时参数flag是函数行为参数,它指定一些当函数遇到阻塞或其他情况时应做出的反应。shmid_ds结构初始化如表14-4所示。
表14-4 shmid_ds的初始化
shmid_ds结构数据
初 值
shmid_ds结构数据
初 值
shm_lpid
0
shm_dtime
0
shm_nattach
0
shm_ctime
系统当前值
shm_atime
0
shm_segsz
参数 size
下面实例演示了使用shmget函数创建一块共享内存。程序中在调用shmget函数时指定key参数值为IPC_PRIVATE,这个参数的意义是创建一个新的共享内存区,当创建成功后使用shell命令ipcs来显示目前系统下共享内存的状态。命令参数-m为只显示共享内存的状态。
(1)在vi编辑器中编辑该程序如下:
程序清单14-8 create_shm.c 使用shmget函数创建共享内存
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <stdio.h>
#define BUFSZ 4096
int main ( void )
{
int shm_id; /*共享内存标识符*/
shm_id=shmget(IPC_PRIVATE, BUFSZ, 0666 ) ;
if (shm_id < 0 ) { /*创建共享内存*/
perror( "shmget" ) ;
exit ( 1 );
}
printf ( "successfully created segment : %d /n", shm_id ) ;
system( "ipcs -m"); /*调用ipcs命令查看IPC*/
exit( 0 );
}
$gcc create_shm.c-o create_shm(3)在shell中运行该程序如下:
$./ create_shm
successfully created segment : 2752516
------ Shared Memory Segments --------上述程序中使用shmget函数来创建一段共享内存,并在结束前调用了系统shell命令ipcs -m来查看当前系统IPC状态。
key shmid owner perms bytes nattch status
0x00000000 65536 root 600 393216 2 dest
0x00000000 2654209 root 666 4096 0
0x0056a4d5 2686978 root 600 488 1
0x0056a4d6 2719747 root 600 131072 1
0x00000000 2752516 root 666 4096 0
shmat
作用:共享内存区对象映射到调用进程的地址空间
核心处理函数: void *shmat( int shmid , char *shmaddr , int shmflag );shmat()是用来允许本进程访问一块共享内存的函数。
int shmid是那块共享内存的ID。
char *shmaddr是共享内存的起始地址
int shmflag是本进程对该内存的操作模式。如果是SHM_RDONLY的话,就是只读模式。其它的是读写模式
成功时,这个函数返回共享内存的起始地址。失败时返回-1
全国移动、联通、电信、Q币及各种游戏点卡在线充值,三分钟内到帐,
本商城网址:http://shop62211463.taobao.com,诚招易赛代理,想做淘宝的朋友也可以咨询我。
小颖充值,永远为你守候。
旺旺:qy_build,MSN:qy_build@126.com
QQ:459415231
- 创建共享内存
- windows创建共享内存
- shm创建共享内存
- c++ 创建共享内存
- 创建命名共享内存
- 创建共享内存
- win32创建共享内存
- 创建共享内存 的方式
- qt 创建共享内存举例
- Linux下的共享内存(02)---创建共享内存
- 创建内存共享的几个步骤:
- 怎样创建和读写共享内存?
- 创建共享内存分以下几个步骤
- 创建或者加载共享内存简单实现
- 创建进程间共享内存映射
- Linux下创建共享内存和测试
- 手动删除shmget创建的共享内存
- 进程创建时共享内存处理
- VC共享内存实现进程间数据的交换
- 如何实现 Ext grid导出Excel?写好的代码在我的资源里,可以进行下载
- 用带无线网卡的笔记本组建无线局域网
- 路由器设置桥接
- 进程间通信之共享内存
- 创建共享内存
- poj3253——Fence Repair
- Axis Web Service开发之旅 (三) --将Spring的装配JavaBean发布成WebService
- 彻底删除autorun.inf文件夹的方法
- 界地址寄存器(界限寄存器)
- 静态文本框响应单击事件
- 分支语句
- 路由器TCPMSS target
- USACO1.5.4 checker challenge