C 共享内存存在标志?
C Shared memory existing flag?
我已经在 SO 上看到了这个问题,但我不清楚以下情况:
shm 已创建。所以如果我打电话给我:
int shmid = shmget(key, sizeof(struct messageQueue), IPC_CREAT | S_IRWXU | IPC_EXCL);
如果 shm 已经存在,shmid 变为 -1。但是我可以在某个地方得到它的 ID 吗?或者我是否需要再次调用不带 EXCL 标志的 shmget(...) 以获得 ID?
提前致谢
通常,如果您想创建并初始化一个新的内存块,则使用IPC_CREAT | IPC_EXCL
。例如:
int shmid = shmget(key, sizeof(struct messageQueue), IPC_CREAT | S_IRWXU | IPC_EXCL);
if( shmid != -1 )
{
/* initialization code */
}
/* if it already exists, open it: */
if( shmid == -1 && errno == EEXIST )
shmid = shmget(key, sizeof(struct messageQueue), S_IRWXU );
if( shmid == -1 ) {
perror("shmget");
}
如果不需要初始化,可以跳过IPC_EXCL
:
int shmid = shmget(key, sizeof(struct messageQueue), IPC_CREAT | S_IRWXU );
如果不需要创建,可以跳过IPC_CREAT
:
int shmid = shmget(key, sizeof(struct messageQueue), S_IRWXU );
我已经在 SO 上看到了这个问题,但我不清楚以下情况:
shm 已创建。所以如果我打电话给我:
int shmid = shmget(key, sizeof(struct messageQueue), IPC_CREAT | S_IRWXU | IPC_EXCL);
如果 shm 已经存在,shmid 变为 -1。但是我可以在某个地方得到它的 ID 吗?或者我是否需要再次调用不带 EXCL 标志的 shmget(...) 以获得 ID?
提前致谢
通常,如果您想创建并初始化一个新的内存块,则使用IPC_CREAT | IPC_EXCL
。例如:
int shmid = shmget(key, sizeof(struct messageQueue), IPC_CREAT | S_IRWXU | IPC_EXCL);
if( shmid != -1 )
{
/* initialization code */
}
/* if it already exists, open it: */
if( shmid == -1 && errno == EEXIST )
shmid = shmget(key, sizeof(struct messageQueue), S_IRWXU );
if( shmid == -1 ) {
perror("shmget");
}
如果不需要初始化,可以跳过IPC_EXCL
:
int shmid = shmget(key, sizeof(struct messageQueue), IPC_CREAT | S_IRWXU );
如果不需要创建,可以跳过IPC_CREAT
:
int shmid = shmget(key, sizeof(struct messageQueue), S_IRWXU );