PDA

Visualizza la versione completa : [C++]Processo figlio che non esegue la stampa


ramy89
08-03-2012, 14:19
Ho questo codice:




#include <iostream>
#include <unistd.h>

using namespace std;

int main(int argc, char **argv)
{
int* mem=new int[100];
int pid=fork(),val;
if(pid!=0) // padre
{
delete[] mem;
}
else // figlio
{
cin >> val;
for(int i=0;i<100;i++)
{
mem[i]=5;
cout << mem[i];
}
}
return 0;
}


Il problema è che il programma termina subito, ma non esegue alcuna stampa.
Eppure la dovrebbe eseguire la stampa, perchè il processo figlio ha la variabile pid che vale zero, per cui in quell' else ci dovrebbe antrare.
Poi nel libro scrive che "entrambe i processi hanno le proprie immagini private della memoria".
Questo proprio non l' ho capito, vengono copiate sia le variabili sullo stack che sull' heap?
E allora se uno ha un processore solo, potrebbe fare:



pid_t pid=fork();
void* mem=malloc(100);
cout << mem;

E ho constatato che stampa due indirizzi uguali.
Ma allora come fanno ad avere due indirizzi uguali? :confused:
Se puntano alla stessa area di memoria, potrebbero entrare in confilitto? :confused:

oregon
08-03-2012, 14:31
Gli indirizzi sono virtuali e indipendenti e sono riferiti ad ogni processo.

L'indirizzo virtuale viene mappato su diversi indirizzi fisici dal sistema.

ramy89
08-03-2012, 15:27
Ora è più chiara la cosa, ma ancora non ho capito perchè questa porzione di codice non viene eseguita:



else // figlio
{
cin >> val;
for(int i=0;i<100;i++)
{
mem[i]=5;
cout << mem[i];
}
}


PS: Il programma termina subito e non posso digitare niente in input.
Inoltre non stampa nemmeno un valore.

Loading