背景:使用共享内存来进行进程间的通信
环境:ubuntu20.04,vscode,c++
1.头文件的问题
《操作系统概念》书中共享内存实现的代码中头文件使用的是<sys/shm.h>,可是当使用shm_open()以及mmap()等时报未定义符号的错误,编译的时候也已经加上了-lrt指令还是无效。将头文件改为<sys/mman.h>时解决。如下:
2.执行时发生段错误,导致我的窗口程序异常退出
后来发现原因在于共享内存文件创建失败,也就是shm_open()执行时未成功,返回-1,导致进行文件映射时失败,然后返回的是空指针,我使用了空指针指向的位置写入内容,当然会报段错误
3.shm_open()打开文件失败原因
shm_open会向/dev/shm创建文件,因此第一开始我以为是权限不足的原因,后来发现是创建文件的名称中使用了路径符号导致错误,可是官方给的实例中也带了路径符号,看来是一个坑。
至于带路径符号时为什么会有错误原因,请看该博主
【记一次shm_open返回EINVAL的错误排查 - woder - 博客园】
后来发现还是存在着权限问题,在读取共享内存文件时发生错误,因此可能带路径符号应该不是问题所在,权限才是主问题。
因此创建时,权限不能设为0,如下更改权限设置:
最后,运行成功