问题描述:
SylixOS中 使用 shm_open 函数创建共享内存设备文件,shm_open 函数返回一个文件描述符,然后使用 mmap 函数映射该共享内存到进程的虚拟空间内,mmap 函数返回一个虚拟地址,之后便可以通过这个虚拟地址对共享内存进行读和写操作。
但是使用 shm_open 穿件文件后,使用 mmap 函数进行映射会出现下图中的错误。
解决方法:
对于共享内存设备上的文件,不能保证在所有的系统中都能够使用 write 函数(SylixOS 中使用 write 函数操作内存设备上的文件将直接返回错误)。如果文件长度为 0,使用 mmap 函数将会失败。为了更好的可移植性,在创建文件后,我们使用 ftruncate函数调整了文件大小。ftruncate 函数的使用参考上图 20 行位置注释掉的代码实现。