Ho questo codice:
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:
codice:
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?
Se puntano alla stessa area di memoria, potrebbero entrare in confilitto?