【发布时间】:2016-12-07 15:24:44
【问题描述】:
我有另一个程序 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标志的情况下调用shmget? -
您确定要使用 System V 共享内存吗? POSIX 共享内存更容易使用。检查
shm_open。 -
它奏效了,我使用 shmget 因为它用于一个项目,而且教授们使用它...无论如何感谢您的提示
标签: c shared-memory