/* master.c */

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<sys/types.h>
#include<signal.h>


main(argc, argv)
int argc;		//indica il numero di parole inserite sulla riga di comando
char *argv[];		//vettore puntatori alle stringhe della riga di comando
{
int i,j,n,nproc,w;
sscanf(argv[1],"%d",&nproc);
int s2=fork();
    if(s2==0)
    {
        system("sleep 1");
        execl("/Danneggiato/Scuola/Sistemi Operativi/unix/slave2","slave2","&",0);
    }
int s1=fork();
    if (s1==0)
    {
        system("sleep 1");
        execl("/Danneggiato/Scuola/Sistemi Operativi/unix/slave1","slave1","&",0);
    }
	else
		{
		
		
		for(i=0; i<nproc; i++)
		{	
		system("sleep 1");
		time_t t1;
		srand(time(&t1));
		int random=rand();
		int n=(random%10)+1;
		if(n>10)exit(0);
		printf("\n - generato numero random: %d - \n",n);
		fflush(stdout);
	
			for (j=0; j<n; j++)
				{
		 		system("sleep 1");
		 		printf(".\n");
				fflush(stdout);
		 		}

			if ( n%2== 0)  /* mando un segnale a slave2 */
	    		{
	    		printf("(Master) invio segnale a slave2\n");
			fflush(stdout);
	    		kill(s2,SIGUSR1);
	    		}
	
			 else      /* mando un segnale a slave1 */
	    		{
	    		printf("(Master) invio segnale a slave1\n");
			fflush(stdout);
	   		kill(s1,SIGUSR1);
	    		}
		}
		
		}
		
	system("sleep 1");
	printf("\n(Master) ora uccido slave1\n");
	kill(s1,SIGKILL);
	printf("(Master) ora uccido slave2\n");
	kill(s2,SIGKILL);	
	printf("(Master) ora muoio anche io\n");
	exit(0);		
}
