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:
mi potete aiutare a caprie perchè non funziona??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); } } }

Rispondi quotando