Muz*_*ain 9 c linux operating-system
当我们创建一个共享内存时,我们使用shm_open()和ftruncate()运行.根据我的信息shm_open()创建一个共享内存区域.然后我们使用ftruncate()函数来配置共享内存区域的大小.
那么shm_open()当它还不知道尺寸时,如何首先创建内存区域?如果情况并非如此,我完全错了,请告诉我目的,shm_open()并ftruncate().提前致谢!
Ant*_*ala 12
重点shm_open是您可以打开现有的内存区域.但是,如果它不存在并且你创建它,shm_open就像open创建文件时的行为; 在新创建的内存区域有0.从大小Linux指南手册:
O_CREAT如果共享内存对象不存在,请创建它.对象的用户和组所有权取自调用进程的相应有效ID,对象的权限位根据模式的低9位设置,除了在进程文件模式创建掩码中设置的那些位(见umask(2))被清除为新对象.open(2)中列出了一组可用于定义模式的宏常量.(这些常数的符号定义可以通过包含来获得.)
新的共享内存对象最初的长度为零 - 可以使用
ftruncate(2).共享内存对象的新分配字节自动初始化为0 来设置对象的大小.
(强调我的)
由于shm_open不将新创建的区域的大小作为参数(它使系统调用/库调用复杂化以添加各种情况的参数),因此ftruncate()必须使用从其初始大小更改已打开的共享内存区域的大小.
当然,您不必使用ftruncate已在其他位置正确创建和调整大小的共享内存段.如果您想知道它的大小,请使用fstat.也可以看看shm_overview(7)