我有另一个程序1,我创建一个共享内存,我有一个程序2,我想检查共享内存是否已经创建,如果没有,然后打印错误和不要做任何事情,如果它已经创建,然后接受它。 如果之前创建共享内存然后它可以正常工作,我可以访问它,但即时通讯的问题是,如果共享内存尚未创建,那么而不是什么都不做和打印错误的program2创建共享内存和我不希望发生这种情况。 任何帮助将不胜感激,请问任何可能有用的信息,谢谢!检查共享内存是否存在,以及是否存在共享内存
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)");
}
}
也许只是调用'shmget'没有'IPC_CREAT'标志? – gudok
您确定要使用System V共享内存吗? POSIX共享内存更容易处理。检查'shm_open'。 – jch
它的工作,即时通讯使用shmget,因为它的一个项目,因为它的教授使用...无论如何感谢提示 – GamerGirl