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

时间:2016-03-17 09:01:21

标签: c linux operating-system

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

shm_open()还不知道大小时,{1}}如何首先创建内存区域?如果情况并非如此,我完全错了,那么请告诉我shm_open()ftruncate().提前致谢的目的!

1 个答案:

答案 0 :(得分:10)

shm_open的要点是您可以打开现有内存区域。但是,如果它不存在且您创建,则shm_open在创建文件时的行为与open相似; 新创建的内存区域的大小为0.来自arbitrary instance

  

O_CREAT

     

如果共享内存对象不存在,则创建它。对象的用户和组所有权取自调用进程的相应有效ID,对象的权限位根据模式的低9位设置,除了在进程文件模式创建掩码中设置的那些位(见umask(2))被清除为新对象。 open(2)中列出了一组可用于定义模式的宏常量。 (这些常数的符号定义可以通过包含来获得。)

     

新的共享内存对象最初的长度为零 - 可以使用ftruncate(2). 设置对象的大小。共享内存对象的新分配字节会自动初始化为0。

(强调我的)

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

当然,您不必将ftruncate用于已正确创建并在其他位置调整大小的共享内存段。如果您想知道它的大小,请使用fstat。另请参阅Linux manuals