Nanni16 ha scritto:
... è possibile passare delle variabili da un processo all'altro ?
Anche in questo caso la ti viene in aiuto. La syscall
mmap fa al caso tuo.
Puoi dichiarare ed inizializzare un intero chiamato, ad esempio,
sharedInteger e che rappresenta la
shared memory (memoria condivisa) tra il processo padre e quello figlio.
Eccoti un esempio adattato al tuo codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/mman.h>
int main(void)
{
//crea la memoria condivisa
int * sharedInteger = mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
int x,pid;
pid=fork();
switch(pid){
case -1:
exit(1);
case 0:
//il processo figlio gli dà un valore
*sharedInteger = 100;
return 1;
default:
wait(&x);
if (WIFEXITED(x)) {
printf("Il processo figlio (%d) ha ritornato valore: %d\n",pid,WEXITSTATUS(x));
//il padre stampa il valore scritto dal processo figlio
printf("Il valore della shared memory e' %d",*shardInteger);
}
}
return 0;
}
N.B: Se come libro di testo stai usando
Sistemi operativi: concetti ed esempi Di Abraham Silberschatz, ma penso di si, c'è un paragrafo dove parla di
Inter Process Communication (IPC) e quindi di meccanismi di
shared memory.