码迷,mamicode.com
首页 > 其他好文 > 详细

共享内存

时间:2016-02-07 02:17:24      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

 1 一个创建共享内存的实例
/*
下面这个例子用shmget函数创建一块共用内存,程序中在调用shmget函数时指定key的值位IPC_PRIVATE,这个参数的有意识创建一个新的内存共享区,创建成功后,使用shell命令来看当前目录系统共享内存的状态

*/ 2 #include<stdio.h> 3 #include<sys/types.h> 4 #include<sys/ipc.h> 5 #include<sys/shm.h> 6 #include<stdlib.h> 7 #define BUFSZ 4096 8 int main(void) 9 { 10 int shm_id;/*共享内存标识符*/
 1 shmget函数
 2 函数的头文件如下
 3 #include<sys/types.h>
 4 #inlcude<sys/ipc.h>
 5 #include<sys/shm.h>
 6 函数的原型如下:
 7 int shmget (key_t key,int size,int flags);
 8 
 9 函数功能:创建或者打开一个已经存在的共享内存,若成功返回共享内存ID,若失败,返回-1
10 
11 key_t是所要创建或者打开的共享内存的键值
12 size是共享内存的区域大小,只有在创建共享内存是生效
13 flag是调用的函数操作类型的,也可以用作设置共享内存的访问权限,两者通过逻辑或表示
14 参数key和flag决定了调用函数的作用
15 
16 当key的为IPC_PRIVATE时,创建一个新的共享内存,此时参数flag取值无效
17 当key不为IPC_PRIVATE时,且flag设置了IPC_CREAT位,而没有设置IPC_EXCL位,则执行操作由key决定。
18 如果key不为IPC_PRIVATE,且flag设置为IPC_CREAT和IPC_EXCL位,则只有创建共享内存的操作,参数key的取值应该与内核中已经存在的任何共享内存的键值都不相同,否则函数调用失败!
19 
20 
21 另外调用shmget函数创建一个新的共享内存时,此共享内存的shmid_ds结构被初始化。ipc_perm中的各个域被设置为相应的值。shm_lpid,shm_nattch、shm_atime、shm_dtime被初始化为0,shm_ctime被设置为系统的当前时间

11         shm_id=shmget(IPC_PRIVATE,BUFSZ,0666);
12         if(shm_id<0)
13         {
14                 printf("shmget fialed!\n");
15                 exit(1);
16         }
17         printf("Creat a shared memory segment successfully:%d \n",shm_id);
18         system("ipcs -m");
19         return 0;
20 }

 

共享内存

标签:

原文地址:http://www.cnblogs.com/wireless-dragon/p/5184483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!