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)");
}
}
Vielleicht einfach 'shmget' anrufen, ohne' IPC_CREAT' Flagge? – gudok
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
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