0

鉴于此代码:

char * pathname; // some string 
int returnValue = shm_open(pathname, O_CREAT | O_TRUNC | O_RDWR, mode);  // create a shared memory object 

如果我这样做:注意 - 相同的路径名!)

int returnValue2 = shm_open(pathname, O_CREAT | O_TRUNC | O_RDWR, mode);  // create a shared memory object 

我没有收到错误,返回值没问题(0)。

这是否意味着我正在重新创建共享内存段/对象?

4

2 回答 2

2

shm_open() 手册页引用:

返回值:成功时,shm_open()返回一个非负文件描述符。失败时,shm_open()返回 -1。

基于此,我会说您已经创建并打开或打开了现有的共享内存对象。

于 2012-07-30T17:29:56.947 回答
2

您只是重新打开现有的共享内存段。

O_CREAT

如果共享内存对象不存在,则创建它。(...)

O_EXCL

如果还指定了 O_CREAT,并且具有给定名称的共享内存对象已经存在,则返回错误。

(来自 Linux人 shm_open。)

此外,来自POSIX(更明确一点):

O_CREAT

如果共享内存对象存在,则此标志无效,除非在下面的 O_EXCL 中注明。否则,创建共享内存对象。(...)

于 2012-07-30T17:30:06.070 回答