网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > C语言 >

共享内存函数接口

时间:2025-05-08 08:41

人气:

作者:admin

标签:

导读:共享内存 共享内存是物理内存中的一段内存空间,而物理内存是由内核进行维护的,所以进程必须向操作系统申请一块物理内存。 shmget函数 使用此函数可以向内核申请物理内存 int sh...

共享内存是物理内存中的一段内存空间,而物理内存是由内核进行维护的,所以进程必须向操作系统申请一块物理内存。

shmget函数

使用此函数可以向内核申请物理内存

int shmget(key_t key,size_t size,int shmflg)
//key:IPC对象使用的键值,ftok()函数生成一个唯一的键值key
//size:新的共享内存段的大小,其值等于四舍五入之后的PAGE_SIZE倍数的大小
//shmflg:可以是IPC_CREAT和IPC_EXCL
//ret:成功返回共享内存的标识符id,失败返回-1
//notice:创建新的内存段的时候会把该内存段进行清零处理,相应的数据结构体也会被初始化

shmat函数

该函数可以实现把共享内存映射到进程的内存空间。

void *shmat(int shmid, const void *shmaddr, int shmflg);
//shmid:共享内存的id
//shmaddr:映射后的地址,一半由系统指定,填NULL即可
//shmflg:填0即可,表示默认,权限为可读可写
//ret:成功返回追加成功的共享内存的地址,失败返回(void *) -1

shmdt函数

此函数可以解除映射

int shmdt(const void *shmaddr);
//shmaddr:是shmat函数的返回值
//ret:成功返回0,失败返回-1

shmctl函数

该函数实现设置共享内存的属性、获取共享内存的属性、删除共享内存等相关操作。

struct shmid_ds {
               struct ipc_perm shm_perm;    /* Ownership and permissions */
               size_t          shm_segsz;   /* Size of segment (bytes) */
               time_t          shm_atime;   /* Last attach time */
               time_t          shm_dtime;   /* Last detach time */
               time_t          shm_ctime;   /* Last change time */
               pid_t           shm_cpid;    /* PID of creator */
               pid_t           shm_lpid;    /* PID of last shmat(2)/shmdt(2) */
               shmatt_t        shm_nattch;  /* No. of current attaches */
               ...
           };

int shmctl(int shmid, int cmd, struct shmid_ds *buf);
//shmid:共享内存的id
//cmd:可以是IPC_SET、IPC_RMID、IPC_INFO等
//buf:结构体的地址
//ret:成功时返回 0,失败时返回 -1,并设置 errno 为相应的错误码。

image

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信