共享内存相关api
创始人
2024-06-02 02:22:13
0

一、shmget,shmat,shmdt,shmctl

int shmget(key_t key,size_t size,int flag)

功能:创建打开共享内存

参数:

  1. key,用ftok
  2. 创建内存大小,必须以m为单位
  3. 创建共享内存IPC_CREAT,可读写0666

返回值:成功返回id,失败-1

void *shmat(int shm_id,const void* addr,int flag)

功能:连接共享内存地址空间

参数:

  1. 共享内存id
  2. 0
  3. 0

返回值:成功地址void可以是任何类型例如结构体,失败-1

注:这个指针不需要free释放

int shmdt(void* addr)

功能:断开连接

参数:地址

返回值:成功0,失败-1

int shmctl(int shm_id,int cmd,struct shmid_ds* buf)

功能:控制共享内存,释放

参数:

  1. id
  2. IPC_RMID
  3. 0

返回值:成功0,失败-1

size_t getpagesize(void);

功能:返回一分页的大小,单位为字节(byte)。此为系统的分页大小,不一定会和硬件分页大小相同。

用法举例:

  1. 创建打开共享内存

  2. 连接映射共享内存

  3. 读写数据(用memcpy,strcpy)
    尤其在接收端,必须要拷贝到本地的结构体中,本地化才行!!!

    不要直接操作共享内存内容
    原文链接:https://blog.csdn.net/shine_journey/article/details/72723836

  4. 断开连接

  5. 释放干掉共享内存

//发
#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;
}

相关内容

热门资讯

安卓系统车机互联软件 你有没有发现,现在开车的时候,手机和车机之间的互动越来越频繁了呢?想象你正驾驶着爱车,一边享受着音乐...
荣耀play4安卓系统,智能生... 你有没有发现,最近手机圈里又掀起了一股热潮?没错,就是荣耀Play4这款新机!它不仅外观时尚,性能强...
安卓模拟苹果多开系统,打造跨平... 你有没有想过,在安卓手机上也能享受到苹果系统的多开功能呢?没错,这就是今天我要跟你分享的神奇话题——...
广汽埃安是安卓系统吗,搭载安卓... 你有没有想过,你的爱车广汽埃安,它的操作系统是不是安卓呢?这个问题,估计不少车友都在心里默默琢磨过。...
安卓系统是google的吗,谷... 你有没有想过,安卓系统是不是谷歌的亲生孩子呢?这个问题,就像是在问苹果是不是苹果树的宝宝一样,让人好...
安卓系统的设置程序下载,轻松掌... 你有没有发现,手机里的安卓系统设置程序真是五花八门,让人眼花缭乱?今天,就让我带你一起探索这个神秘的...
安卓系统的手机家园,打造个性化... 你有没有发现,现在手机的世界里,安卓系统的手机家园可是越来越热闹了呢!想象每天打开手机,就像走进了一...
安卓系统哪些相机可以调,支持实... 你有没有发现,手机拍照已经成为我们生活中不可或缺的一部分呢?无论是记录生活的点滴,还是捕捉美丽的瞬间...
安卓手机系统英文变中文,And... 你有没有发现,你的安卓手机上那些英文字母的系统提示,突然间变成了熟悉的中文呢?是不是觉得瞬间亲切感倍...
系统语言可以删除吗安卓,基于系... 你有没有想过,手机里的那些系统语言,是不是有时候觉得有点多余呢?比如,你是个地道的英语使用者,却总是...
安卓系统收取专利吗,揭秘科技巨... 你有没有想过,那个陪伴你每天刷手机、玩游戏、办公的安卓系统,它背后是不是也有自己的“小金库”呢?没错...
安卓屏幕怎么更新系统,轻松掌握... 亲爱的安卓手机用户们,你是不是也和我一样,时不时地想给手机来个“大变身”,让它焕然一新呢?没错,说的...
安卓系统有没有类似carpla... 你有没有想过,在安卓系统上,能不能也像苹果用户那样,轻松连接汽车音响系统呢?没错,我说的就是那个神奇...
安卓系统哪里升级包,生成与更新... 亲爱的安卓用户们,你是不是也和我一样,时不时地想给手机来个“大变身”,让它焕然一新呢?那就得提到那个...
安卓手机怎么恢复老系统,轻松恢... 手机用久了,是不是觉得系统越来越卡,功能也越来越不跟得上潮流了呢?别急,今天就来教你怎么把安卓手机恢...
安卓系统如何安装windows... 亲爱的安卓用户们,你是否曾幻想过在手机上体验Windows 7的韵味?别再羡慕那些拥有Windows...
旧的安卓系统怎么备份,轻松保存... 亲爱的安卓用户们,你是否曾经因为系统升级或者手机意外重启而担心丢失了珍贵的照片、联系人或者应用数据呢...
安卓手机系统文件被破坏,全面解... 手机突然间罢工了,是不是很崩溃?别急,今天就来聊聊安卓手机系统文件被破坏的那些事儿。相信我,掌握了这...
街头霸王四安卓系统,畅享格斗盛... 你知道吗?最近在安卓系统上,有一款游戏可是火得一塌糊涂,那就是《街头霸王四》!这款经典格斗游戏在安卓...
阿里tv安卓系统刷机,畅享智能... 你有没有发现,家里的阿里TV用久了,系统有点卡卡的呢?别急,今天就来教你怎么给它来个焕然一新的刷机大...