检查共享内存是否存在以及是否可以访问它

时间:2016-12-07 15:24:45

标签: c shared-memory

我有另一个program1,我创建一个共享内存,我有一个program2,我想检查共享内存是否已创建,如果没有然后打印错误,什么都不做,如果它已经创建然后访问它。 如果之前已经创建了共享内存它可以正常工作并且我可以访问它但是我遇到的问题是如果没有创建共享内存然后不执行任何操作并打印错误,则program2创建共享内存并且我没有& #39; t希望这种情况发生。 任何帮助将不胜感激,请询问任何可能有用的信息,谢谢!

void main(){

int sm_id;
sm_id = shmget(9000, MAX_USERS * sizeof(User), IPC_CREAT | IPC_EXCL | 0666);
if(sm_id>0){
    perror("Shared memory has not been created yet");
    exit(1);
}else{
    sm_id = shmget(9000, MAX_USERS * sizeof(User), IPC_CREAT | 0666);
    list = (User *)shmat(sm_id,0,0);
    exit_on_null(list, "Exit on null(error attach)");
}

}

1 个答案:

答案 0 :(得分:5)

不要使用IPC_CREAT标志。如果该共享内存不存在,它将返回错误ENOENT

查看手册页以获取更多信息..

SHMGET