salve ragazzi,
volevo chiedere il vostro aiuto in quanto sono alla prime armi con l'uso delle fork() e dei segnali. Non so se sia utile ma vi specifico che uso fedora 14. Vi chiedo aiuto perche volevo creare un programmino che non fa altro che crea un file temporaneo e creare un processo figlio. A questo punto, il padre scrive sul file, il figlio aspetta che il padre scriva, una volta completata l'operazione di scrittura invia un segnale al figlio tramite kill(pid,SIGUSR1), che a sua volta legge il file ed invia al padre un altro segnale tramite kill(getppid(),SIGUSR2). il tutto ripetuto "n" volte, con n inserito da tastiera.
Dato che nn mi funzionava ho provato a fare semplicemente una printf del "padre" che dice "padre e scrivo" ed una al figlio che dice "figlio leggo". ho usato una var globale chiamata "m", ed ho fatto un ciclo while con un pause(). ma mi viene schedulato prima n volte il padre e poi n volte il figlio.
VI posto il codice:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
static void sig_usr(int); //handler
int m=0;
// qui quando uno dei due invia il segnale la var m cambia, in modo da dare opportunita di "muoversi" solo ad 1 dei 2 processi
static void sig_usr(int signo){
if (signo==SIGUSR1) m=1;
else m=0;
}
int main(){
int i=0,n=0;
pid_t pid;
printf("inserisci il numero intero: ");
scanf("%d", &n);
signal(SIGUSR1,sig_usr); // installo i segnali
signal(SIGUSR2,sig_usr);
pid=fork();
// ciclo per n volte
for(i=0;i<n;i++){
if (pid==0){
while(m==0) // finche m=0 significa che è il padre ad agire
pause();
printf("\n Sono il figlio pidfiglio=%d pidpadre=%d\n",getpid(),getppid());
kill(getppid(),SIGUSR2);
}
else {
while(m==1) // se m=1 è il figlio ad agire
pause();
printf("\n Sono il padre pidfiglio=%d pidpadre=%d\n\n",pid,getpid());
kill(pid,SIGUSR1);
}
}
}
mi potete aiutare a caprie perchè non funziona??