2016-12-07 284 views
0

我有另一个程序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)"); 
} 

} 
+2

也许只是调用'shmget'没有'IPC_CREAT'标志? – gudok

+0

您确定要使用System V共享内存吗? POSIX共享内存更容易处理。检查'shm_open'。 – jch

+0

它的工作,即时通讯使用shmget,因为它的一个项目,因为它的教授使用...无论如何感谢提示 – GamerGirl

回答

5

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

之进一步资料手册页..

SHMGET

+0

它的工作,我认为我们总是不得不使用IPC_CREAT为了它的工作,因为我没有看到没有它的例子。谢谢您的帮助! – GamerGirl

+0

@Livernal: - )...检查手册页,您将从那里获得更多信息。 – sas