创建同名的共享内存段 - 返回错误?

时间:2012-07-30 17:25:48

标签: c linux pipe shared-memory

鉴于此代码:

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)。

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

2 个答案:

答案 0 :(得分:2)

引用shm_open() man page

  

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

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

答案 1 :(得分:2)

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

O_CREAT
     

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

O_EXCL
     

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

(来自Linux man shm_open。)

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

O_CREAT
     

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