int shmget(key_t key, size_t size, int shmflg); //size:共享内存至少分配1兆(1024)大小
//创建或获取一个共享内存,成功返回共享内存ID,失败返回-1。void *shmat(int shmid, const void *shmaddr, int shmflg);
//连接共享内存到当前进程的地址空间;//成功返回指向共享内存的指针,失败返回-1。int shmdt(const void *shmaddr);
//断开与共享内存的连接;成功返回0,失败返回-1。int shmctl(int shmid, int cmd, struct shmid_ds *buf);
//控制共享内存相关信息;成功返回0,失败返回-1。//cmd:IPC_RMID删除该共享内存。查看存在的共享内存:ipcs -m
删除共享内存:ipcrm -m 12312(id号)
创建共享内存:
#include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include <stdio.h> #include <string.h>
int main() { int shmid; char *shamadd;
key_t key; key = ftok(".",1);
shmid = shmget(key,1024*4,IPC_CREAT|0600); //创建共享内存
shamadd = shmat(shmid,0,0); //返回值为指向共享内存指针 printf("shmat is ok\n");
strcpy(shamadd,"creat is success!");
shmdt(shamadd); // 断开与共享内存的连接
sleep(5); //等待其他进读取完成后再删除该共享内存 shmctl(shmid,IPC_RMID,0); //删除共享内存
printf("quit\n"); return 0; }
获取共享内存:
int main() { int shmid; char *shamadd;
key_t key; key = ftok(".",1);
shmid = shmget(key,1024*4,0); //获取共享内存
shamadd = shmat(shmid,0,0); printf("shmat success\n");
printf("data : %s\n",shamadd);
shmdt(shamadd);
printf("quit\n");
return 0; }