int shmget(key_t key,size_t size,int flag)
功能:创建打开共享内存
参数:
返回值:成功返回id,失败-1
void *shmat(int shm_id,const void* addr,int flag)
功能:连接共享内存地址空间
参数:
返回值:成功地址void可以是任何类型例如结构体,失败-1
注:这个指针不需要free释放
int shmdt(void* addr)
功能:断开连接
参数:地址
返回值:成功0,失败-1
int shmctl(int shm_id,int cmd,struct shmid_ds* buf)
功能:控制共享内存,释放
参数:
返回值:成功0,失败-1
size_t getpagesize(void);
功能:返回一分页的大小,单位为字节(byte)。此为系统的分页大小,不一定会和硬件分页大小相同。
用法举例:
创建打开共享内存
连接映射共享内存
读写数据(用memcpy,strcpy)
尤其在接收端,必须要拷贝到本地的结构体中,本地化才行!!!
不要直接操作共享内存内容
原文链接:https://blog.csdn.net/shine_journey/article/details/72723836
断开连接
释放干掉共享内存
//发
#include
#include
#include
#include
#include
#include
#include
struct student{int age;char name[12];
};int main(int argc, char **argv)
{int shm_id;struct student *shmatadd;struct student stu = {.age = 24,.name = "xiaowei",};key_t key;key = ftok(".",'a');shm_id = shmget(key,getpagesize(),IPC_CREAT|0666);if(shm_id == -1) {perror("shmget()");}shmatadd = (struct student *)shmat(shm_id,0,0);printf("shmat ok\n"); memcpy(shmatadd, &stu, sizeof(stu));sleep(5);shmdt(shmatadd);shmctl(shm_id,IPC_RMID,0);return 0;
}//收
#include
#include
#include
#include
#include
#include
#include
struct student{int age;char name[12];
};int main(int argc, char **argv)
{int shm_id;struct student *shmatadd;struct student stu;key_t key;key = ftok(".",'a');shm_id = shmget(key,getpagesize(),IPC_CREAT|0666);if(shm_id == -1) {perror("shmget()");}shmatadd = (struct student *)shmat(shm_id,0,0);memcpy(&stu, shmatadd, sizeof(stu));printf("shmat ok\n");printf("stu.age=%d\n",stu.age);printf("stu.name=%s\n",stu.name);shmdt(shmatadd);printf("quit\n");return 0;
}
上一篇:5-点选3DTiles模型要素
下一篇:从FPGA说起的深度学习(五)