struct als shared memory / semaphores
-
hallo,
hab probleme beim zusammenspiel der 3 oben genannten komponenten. ich versuche ein shared memory segment zu erstellen, welches aus ein struct aus 2 unsigned int besteht. dann werden 2 semaphoren erzeugt, welche dafür zuständig sein sollen, das 2 prozesse ( fork) via den shared memory miteinander arbeiten können.(child soll 2 u-int einlesen und im shared memory speichern, danach der parent diese addieren und ausgeben.
Ich bekomme beim ausführen immer speicherzugriffsfehler und gebe zu das ich mit denn ganzen pointern , sharedmemory speicher etc auch den überblick verloren habe. kann jemand helfen?
#define SHAREDMEM_SIZE 4096 typedef struct add{ unsigned int one; unsigned int two; }values; values *v; void server();void client() ; void *x; sem_t *ser;sem_t *cli; int main() { int id = shmget(IPC_PRIVATE, SHAREDMEM_SIZE,IPC_CREAT|IPC_EXCL); v = shmat(id, NULL, 0 ); ser = (sem_t *)v; cli = (sem_t *)v+1; sem_init(ser,1,0); sem_init(cli,1,1); setbuf(stdout, NULL); pid_t pid = fork(); if ( pid == 0 ) { client(); } else if ( pid > 0 ) { server(); waitpid(pid,NULL,0); } else if ( pid == -1 )perror("fork fails"); } void client() { for(;;) {//50 sem_wait(cli); scanf("%u%u",&v->one,&v->two); sem_post(ser); if(v->one == -1) break; printf("%u", v->one); } if(shmdt(x)==-1) perror(NULL); exit(1); } void server() { for(;;) { sem_wait(cli); if( v->one==-1) break; printf ( "Ergebniss= %u\n", (unsigned int)(v->one + v->two)); sem_post(ser); } }
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89 und C99) in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
http://myref.de?247795 , Kapitel 9