1.简介:共享内存具有最高的效率
共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。
2.实现共享内存
1.创建共享内存
头文件:
#include <sys/ipc.h>
#include <sys/shm.h>
原型:
int shmget(key_t key, size_t size, int shmflg);
2.映射)
头文件:
#include <sys/types.h>
#include <sys/shm.h>
原型:
void *shmat(int shmid, const void *shmaddr, int shmflg);
3.管理数据
写入或读出数据;
int shmget(key_t key, size_t size, int shmflg)
4.释放内存
int shmdt(const void *shmaddr);
shmdt(shmaddr);
5.“干掉”共享内存
头文件:
#include <sys/ipc.h>
#include <sys/shm.h>
原型:
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
3.代码测试
#include<stdio.h>
#include<string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
//int shmget(key_t key, size_t size, int shmflg);
int main()
{
int shmid;
char *shmaddr;
key_t key;
key = ftok(".",1);
shmid = shmget(key,1024*4,IPC_CREAT|0666);
if(shmid == -1){
printf("shmget no\n");
exit(-1);
}
// void *shmat(int shmid, const void *shmaddr, int shmflg);
// int shmdt(const void *shmaddr);
shmaddr = shmat(shmid,0,0);
printf("shmat is ok\n");
strcpy(shmaddr,"hello world\n");
sleep(3);
// int shmctl(int shmid, int cmd, struct shmid_ds *buf);
shmdt(shmaddr);
shmctl(shmid,IPC_RMID,0);
printf("quit\n");
return 0;
}
结果:
shmat is ok
quit
#include<stdio.h>
#include<string.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdlib.h>
//int shmget(key_t key, size_t size, int shmflg);
int main()
{
int shmid;
char *shmaddr;
key_t key;
key = ftok(".",1);
shmid = shmget(key,1024*4,IPC_CREAT|0666);
if(shmid == -1){
printf("shmget no\n");
exit(-1);
}
// void *shmat(int shmid, const void *shmaddr, int shmflg);
// int shmdt(const void *shmaddr);
shmaddr = shmat(shmid,0,0);
printf("shmat is ok\n");
printf("shmat:%s\n",shmaddr);
// int shmctl(int shmid, int cmd, struct shmid_ds *buf);
shmctl(shmid,IPC_RMID,0);
printf("quit\n");
return 0;
}
结果:
shmat is ok
shmat:hello world
quit
学识浅薄,希望可以帮到您