shm_open()和ftruncate()的目的是什么?

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)