2016-12-07 3 views
0

Ich habe ein anderes Programm1, wo ich einen gemeinsamen Speicher erstelle und ich habe ein Programm2, das ich überprüfen möchte, ob der Shared Memory erstellt wurde, wenn nicht dann einen Fehler und tue nichts und wenn es schon erstellt wurde, dann pass auf. Wenn der shared memory erstellt wurde, dann funktioniert es gut und ich kann es zugreifen, aber das Problem ist, dass, wenn der Shared Memory nicht erstellt wurde dann anstelle von nichts zu tun und einen Fehler zu drucken das Programm2 erstellt den gemeinsamen Speicher und ich wollte das nicht geschehen. Jede Hilfe wäre willkommen und bitte fragen Sie alle Informationen, die nützlich sein könnten, danke!Überprüfen, ob ein gemeinsamer Speicher vorhanden ist und ob er darauf zugreift

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

Vielleicht einfach 'shmget' anrufen, ohne' IPC_CREAT' Flagge? – gudok

+0

Sind Sie sicher, dass Sie System V Shared Memory verwenden möchten? Es ist viel einfacher mit POSIX Shared Memory zu arbeiten. Überprüfen Sie 'shm_open'. – jch

+0

Es hat funktioniert, ich benutze Shmget, weil es für ein Projekt ist und da die Professoren das verwenden ... danke für den Tipp sowieso – GamerGirl

Antwort

5

Verwenden Sie nicht IPC_CREAT Flag. Wenn dieser freigegebene Speicher nicht vorhanden ist, wird Fehler ENOENT zurückgegeben.

Überprüfen Sie die man-Seite für weitere Informationen ..

SHMGET

+0

Es hat funktioniert, ich nahm an, dass wir immer IPC_CREAT verwenden mussten, damit es funktionierte, da ich es nicht gesehen hatte ein Beispiel ohne es. Danke für die Hilfe! – GamerGirl

+0

@Livernal: -) ... Überprüfen Sie auch die Manpage, von dort erhalten Sie weitere Informationen. – sas

Verwandte Themen