检查共享内存是否存在以及是否访问它
Checking if a shared memory exists and if it does access it
我有另一个程序1,我在其中创建共享内存,我有一个程序2,我想检查共享内存是否已创建,如果没有,则打印错误并且什么都不做,如果它已经创建然后访问它。
如果之前创建了共享内存那么它工作正常并且我可以访问它但是我遇到的问题是如果没有创建共享内存然后而不是什么都不做并打印错误程序2创建共享内存而我没有'希望这种情况发生。
任何帮助将不胜感激,请询问任何可能有用的信息,谢谢!
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)");
}
}
不要使用 IPC_CREAT
标志。如果该共享内存不存在,它将 return 错误 ENOENT
。
查看手册页以获取更多信息..
我有另一个程序1,我在其中创建共享内存,我有一个程序2,我想检查共享内存是否已创建,如果没有,则打印错误并且什么都不做,如果它已经创建然后访问它。 如果之前创建了共享内存那么它工作正常并且我可以访问它但是我遇到的问题是如果没有创建共享内存然后而不是什么都不做并打印错误程序2创建共享内存而我没有'希望这种情况发生。 任何帮助将不胜感激,请询问任何可能有用的信息,谢谢!
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)");
}
}
不要使用 IPC_CREAT
标志。如果该共享内存不存在,它将 return 错误 ENOENT
。
查看手册页以获取更多信息..