鉴于此代码:
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
)。
这是否意味着我重新创建共享内存段/对象?
答案 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中注明。否则,将创建共享内存对象。 (...)