共享内存
1. 获取共享内存的ID号 — shmget() — man 2 shmget
2. 根据共享内存的ID号映射内存空间地址 shmat() -->man 2 shmat
3. 撤销映射 shmdt – man 2 shmdt
4. 设置共享内存的属性(删除共享内存) – shmctl – man 2 shmctl
发送端示例代码
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
int main()
{
key_t key;
int shmid;
//1. 申请key值
key = ftok(".",10);
//2. 根据key值申请共享内存的ID号
shmid = shmget(key,8192,IPC_CREAT|0666);
//3. 根据shmid去内存空间映射一块内存
char *p = (char *)shmat(shmid,NULL,0);
//4. 清空内存中数据
bzero(p,8192);
//5. 从键盘输入数据,写入内存中
while(1)
{
fgets(p,8192,stdin); // 包含了\n在内
if(strncmp(p,"quit",4) == 0)
{
break;
}
}
return 0;
}
接收端示例代码
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/shm.h>
int main()
{
key_t key;
int shmid;
//1. 申请key值
key = ftok(".",10);
//2. 根据key值申请共享内存的ID号
shmid = shmget(key,8192,IPC_CREAT|0666);
//3. 根据shmid去内存空间映射一块内存
char *p = (char *)shmat(shmid,NULL,0);
//4. 读取共享内存的数据
while(1)
{
printf("from shm:%s",p);
usleep(500000);
if(strncmp(p,"quit",4) == 0)
{
break;
}
}
//5. 撤销映射
shmdt(p);
//6. 删除共享内存
shmctl(shmid,IPC_RMID,NULL);
return 0;
}