网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 共享内存本质是一段特殊的内存区域,所有需要访问该共享区域的进程都要把该共享区域映射到本进程的地址空间中去,不同的进程可以通过对内存简单的读写,发生信息交换,从容实现通信。而这块虚拟内存的页面被每个共享进程的页表条目所引用, 同时并不需要在所有进程的虚拟内存都有相同的地址。 进程对象对于共享内存的访问通过 key(键) 来控制, 同时通过 key 进行访问权限的检查。
函数定义如下:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
key_t ftok(const char *pathname, int proj_id); 不常用。
int shmget(key_t key, int size, int shmflg);
void *shmat(int shmid, const void *shmaddr, int shmflg);
int shmdt(const void *shmaddr);
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
shmget接口:
- 函数 ftok 用于创建一个关键字, 可以用该关键字关联一个共享内存段。
- 函数 shmget 用于创建或打开一共享内存段, 该内存段由函数的第一个参数唯一创建。函数成功, 则返回一个唯一的共享内存标识号(相当于进程号, 唯一的标识着共享内存),失败返回-1。
- 参数 key 是一个与共享内存段相关联关键字, 如果事先已经存在一个与指定关键字关联的共享内存段, 则直接返回该内存段的标识, 表示打开, 如果不存在, 则创建一个新的共享内存段。------可用于连接。
- key 的值既可以用 ftok 函数产生,也可以是IPC_PRIVATE(用于创建一个只属于创建进程的共享内存, 主要用于父子通信) ,表示总是创建新的共享内存段;
- 参数 size 指定共享内存段的大小, 以字节为单位;一般为页面的整数倍–一般一个页面为4k—4096个字节
- 参数 shmflg 是一掩码合成值, 可以是访问权限值与(IPC_CREAT 或 IPC_EXCL)的
- 合成。 IPC_CREAT 表示如果不存在该内存段, 则创建它。 IPC_EXCL 表示如果该内存
- 段存在, 则函数返回失败结果(-1)。 如果调用成功, 返回内存段标识, 否则返回-1
shmat接口:
- 函数 shmat 将共享内存段映射到进程空间的某一地址。
- 参数 shmid 是共享内存段的标识 通常应该是 shmget 的成功返回值
- 参数 shmaddr 指定的是共享内存连接到当前进程中的地址位置。通常是 NULL, 表示让系统来选择共享内存出现的地址。
- 参数 shmflg 是一组位标识, 通常为 0 即可。
- 如果调用成功, 返回映射后的进程空间的首地址, 否则返回(char *)-1。
函数 shmdt 用于将共享内存段与进程空间分离。
- 参数 shmaddr 通常为 shmat 的成功返回值
- 它共享内存分离并没删除它, 只是使得该共享内存对当前进程不在可用。
函数 shmctl 是共享内存的控制函数, 可以用来删除共享内存段。
- 参数 shmid同上。
- 参数 cmd 是对共享内存段的操作方式, 可选为 IPC_STAT,IPC_SET,IPC_RMID。 通常为 IPC_RMID, 表示删除共享内存段。
- 参数 buf 是表示共享内存段的信息结构体数据, 通常为 NULL。
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 */
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新