共享内存的学习
- 共享内存是可用IPC形式中最快的,使用共享内存可以减小系统的开销。
- 共享内存分为两种形式
1.Posix共享内存区
2.System V共享内存区
1. Posix共享内存区
Posix共享内存区涉及两个必要步骤。
(1)指定一个名字参数调用shm_open()函数,产生一个新的共享内存或者打开一个已经存在的共享内存区对象。
(2)调用mmap将这个共享区映射到内存中。
Posix共享内存区函数
shm_open和shm_unlink函数
- int shm_open(const char *name, int oflag, mode_t mode);
- name参数为要新产生的或者一个已经创建的共享内存区的名字,且名字必须以”/”开始且之后不得再出现”/”。
- oflag参数必须含有O_RDONLY标志或者O_RDWR标志,还可以使用如下标志
- mode参数指定权限位,必须在oflag为O_CREAT的情况下使用。如果oflag不为O_CREAT,则mode可以设为0。
- 重要的一点是使用shm_open是为了无亲缘关系进程间的Posix共享内存区。且通过shm_open产生的名字为name的文件,在/dev/shm/下可以找到。
- 使用open()函数打开的文件则是使用在亲缘关系进程间的Posix共享内存区使用。
- int shm_unlink(const char *name);
- shm_unlink删除的是一个共享内存区对象的名字,删除一个名字不会影响对于底