|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jul 2003
Città: Cesate (MI)
Messaggi: 863
|
Comunicazione fra processi separati con memoria condivisa
Sto cercando di far funzionare questo programmino che ho trovato su internet perchè mi serviva da esempio per fare un esercizio più complesso. Il problema è che, quando l'ho fatto girare la prima volta ho fatto partire solo il primo modulo ed è andato. La seconda volta ha dato un segmentation fault (la stessa cosa succede se faccio partire anche solo il secondo). Il problema dovrebbe essere causato dal settore di memoria che sono andato a scrivere e che non è stato pulito. Ho provato anche a riavviare il pc ma niente. Non so cosa fare (se metto come primo campodella shmget IPC_PRIVATE funziona naturalmente ma non ho modo di far comunicare i due processi). Cosa posso fare? Grazie a tutti quelli che mi risponderanno
// processo 1 main() { int shmid1; char *addr1; int key=1; shmid1 = shmget(key,100*sizeof(char),0600); addr1 = (char *) shmat ( shmid1, 0, 0); // assegno un valore al primo carattere *addr1='A'; printf("proc1: prima, carattere: %c\n", *addr1); // attendo che l'altro processo scriva sleep(10); // dovrei stampare B printf("proc1: dopo, carattere: %c\n", *addr1); shmctl(shmid1,IPC_RMID,NULL); } // processo 2 main() { int shmid1; char *addr1; int key=1; shmid1 = shmget(key,100*sizeof(char),0600); addr1 = (char *) shmat ( shmid1, 0, 0); // LEGGO printf("proc2: prima carattere: %c\n", *addr1); *addr1='B'; shmdt(addr1);
__________________
Core i7 920, Asus P6X58D-E, OCZ Platinum XTC CAS7 3x2GB, ATI HD5850, Creative X-FI Fatal1ty, Corsair SSD F60, 2x80GB WD SATA2 RAID0 + 500GB WD SATA2, Hiper TypeM 530W, Thermaltake Armor Silver, DVD-RW LiteOn Shm 165S6S Sata, HP LP2475w 24" 1920x1200. |
![]() |
![]() |
![]() |
#2 | |
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
Quote:
è da un po che non mastico più queste cose... cmq già i due programmi mi sembrano scritti in maniera pessima(a parte che per aspettare che un altro processo scriva non si chiama la primitiva sleep(),è una cattiva pratica di programmazione),cmq shmctl(..),shmdt(...), shmat(..),shmget(..)non ricordo cosa fanno precisamente,non mi sembrano metodi posix. se mi dici che fanno di preciso e quali sono i parametri di ingresso vedo se posso aiutarti. anche senza conoscere bene il metodo shmget in questa riga sembra che ci sia qualcosa che non va. shmid1 = shmget(key,100*sizeof(char),0600); |
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jul 2003
Città: Cesate (MI)
Messaggi: 863
|
Quote:
__________________
Core i7 920, Asus P6X58D-E, OCZ Platinum XTC CAS7 3x2GB, ATI HD5850, Creative X-FI Fatal1ty, Corsair SSD F60, 2x80GB WD SATA2 RAID0 + 500GB WD SATA2, Hiper TypeM 530W, Thermaltake Armor Silver, DVD-RW LiteOn Shm 165S6S Sata, HP LP2475w 24" 1920x1200. |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
ok! ciao
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:19.