创建共享内存时,我们使用shm_open()ftruncate()函数。根据我的信息shm_open()创建一个共享内存区域。然后,我们使用ftruncate()函数来配置共享内存区域的大小。

那么shm_open()在尚不知道大小的情况下如何首先创建内存区域?如果不是这种情况,而我完全错了,那么请告诉我shm_open()ftruncate().的目的提前致谢!!!

最佳答案

shm_open的要点是,您可以打开一个现有存储区。但是,如果它不存在并且您创建shm_open将创建一个0字节的新共享内存对象,就像openO_CREAT会创建一个0字节的文件一样。从Linux manuals:



(强调我的)

由于shm_open不会将新创建的区域的大小作为参数(这会使系统调用/库调用复杂化,以添加各种情况的参数),因此ftruncate()必须用于更改其打开的共享内存区域的大小初始大小。

当然,对于已正确创建并在其他地方调整大小的共享内存段,您不必使用ftruncate。如果您想知道其大小,请使用fstat。另请参阅 shm_overview(7)

10-06 03:16