View Full Version : [C] variabili e processo figlio
ho un problema...("...altrimenti non avresti scritto...", qualcuno di voi dirà....)
non so come (se si può) fare in modo che un processo figlio modifichi una variable del processo padre...in pratica, faccio un esempio:
int main(int argc, char* argv[]){
int var=0;
if (fork() == 0){/*creo il figlio che modifica la variabile*/
var=1;
}
printf(" %d ", var);
}
se vado a vedere il valore della varibile "var", questo non è cambiato, cioè è sempre 0....infatti la fork crea una copia esatta di stack e dati del padre, quindi quello che il figlio va a modificare non è la variabile del padre, ma quella sua....vorrei quindi sapere se esiste un modo per riuscire a far modificare il valore della var del padre al figlio....
ilsensine
10-06-2004, 16:18
Dopo il fork i processi hanno storia indipendente. O usi segmenti di memoria condivisa, oppure usi i thread.
Grazie della risposta intanto...
Segmenti di memoria condivisa?
cosa intedi in parole povere?
potresti farmi un esempio...se non approfitto troppo della tua disponibilità.....
IPC (Inter Process Comunication): qui trovi tutto e di più
http://www.lilik.it/~mirko/gapil/gapilse37.html#gapilsu184.html
ilsensine
10-06-2004, 16:26
Guarda le manpage per shmget/shmat; oppure su google:
http://www.google.it/search?hl=it&ie=ISO-8859-1&q=%22shared+memory%22+linux+shmget&btnG=Cerca&lr=
nb con i thread è molto più semplice, se puoi evitare di creare due processi indipendenti.
thanks a tutti e due!! ;)
no veramente puoi provare anche con un altro comando
si chiama vfork ed in pratica non effetua la copia di tutte le variabile
prova un pò...cmq funge!:)
ilsensine
05-07-2004, 11:44
Originariamente inviato da Ricky
si chiama vfork ed in pratica non effetua la copia di tutte le variabile
prova un pò...cmq funge!:)
vfork non è adatta a questo problema. Hai letto bene cosa fa? E' utilizzata principalmente nei sistemi senza mmu, dove la COW è impossibile.
Originariamente inviato da akyra
thanks a tutti e due!! ;)
Come e' andato l'esame? :D :D :D :D :D
spero bene, ho fatto un paio di cazzate, però spero di averlo passato....c'eri anche tu?
Sisi :)
Spero anchio bene dai.
Hai sentito? I risultati escono tra domani e dopodomani, la correzione c'e' venerdi :)
Fossero tutti cosi' tempestivi :)
Cya!
non so cosa sia sta cow e sto mmu cmq al corso di sistemi che ho seguito mi è sembrato di capire che con la vfork non c è una nuova allocazione delle variabili, ma che in realtà vengono passate direttamente al figlio che quindi potrà modificarle......poi boh non so cosa intendi tu!:)
Ed_Bunker
05-07-2004, 21:34
Originariamente inviato da Ricky
non so cosa sia sta cow e sto mmu cmq al corso di sistemi che ho seguito mi è sembrato di capire che con la vfork non c è una nuova allocazione delle variabili, ma che in realtà vengono passate direttamente al figlio che quindi potrà modificarle......poi boh non so cosa intendi tu!:)
Hai mai sentito parlare di memory management unit ?!? Se fai il corso di sistemi dovresti...
:D :D
Il cow (copy on write) e' un "meccanismo" mediante il quale il processo padre ed i figli creati mediante fork() condividono le variabili fintanto che non si tenta di aggiornare (sovrascrivere) tali variabili. A quel punto, per il processo che ha tentato di sovrascrivere, ne viene fatta una copia (Privata al processo) e l'aggiornamento avviene solo su quella copia. Piu' o meno e' cosi... penso...
ma non ho capito perchè non si può utilizzare la vfork cmq....:rolleyes:
ho seguito il modulo a di sistemi!:) non tutto il corso e cmq non so cosa sia, la unità di gestione della memoria....bene...ci sono sistemi che non hanno una unità della gestione della memoria?
il problema è che la vfork non restituisce il controllo al chiamante fino a che il figlio non ha eseguito una exec oppure ena exit, quindi mi sarebbe stata poco utile....comunque grazie lo stesso....
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.