标签:
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