创建共享内存时,我们使用shm_open()
和ftruncate()
函数。根据我的信息shm_open()
创建一个共享内存区域。然后,我们使用ftruncate()
函数来配置共享内存区域的大小。
那么shm_open()
在尚不知道大小的情况下如何首先创建内存区域?如果不是这种情况,而我完全错了,那么请告诉我shm_open()
和ftruncate().
的目的提前致谢!!!
最佳答案
shm_open
的要点是,您可以打开一个现有存储区。但是,如果它不存在并且您创建,shm_open
将创建一个0字节的新共享内存对象,就像open
与O_CREAT
会创建一个0字节的文件一样。从Linux manuals:
(强调我的)
由于shm_open
不会将新创建的区域的大小作为参数(这会使系统调用/库调用复杂化,以添加各种情况的参数),因此ftruncate()
必须用于更改其打开的共享内存区域的大小初始大小。
当然,对于已正确创建并在其他地方调整大小的共享内存段,您不必使用ftruncate
。如果您想知道其大小,请使用fstat
。另请参阅 shm_overview(7)