C共享内存存在标志?



我已经在SO上看到了这个问题,但我不清楚以下情况:

已创建shm。如果我在这里调用:

int shmid = shmget(key, sizeof(struct messageQueue), IPC_CREAT | S_IRWXU | IPC_EXCL);

如果SHM已经存在,shmid变为-1。但我能在什么地方拿到它的身份证吗?或者我是否需要再次调用没有EXCL标志的shmget(…)以获得ID?

Thanks in advance

通常,如果您想创建和初始化,则使用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 );

最新更新