Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.5 kB
3
Indexable
Never
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <sys/wait.h>


int fib(int num)
{
    if (num == 0)    {
       return 0; 
    }

    else if (num == 1)
    {
        return 1; 
    }

    else
    {
        return fib(num - 1) + fib(num - 2); 
    }
}

int fatt(int n){
  if(n==0)return(1);
  else return (n*fatt(n-1));
}


void ctrl_handler(int sign){
    int sum = fib(0)+fib(1)+fib(2)+fib(3);
    printf("La somma e'%d\n",sum);
    signal(SIGINT,ctrl_handler);


}
void ctrl_handler2(int sign){
  char BUFF[50];
  printf("Per continuare premere (c) per uscire (q)\n");
  scanf("%s",BUFF);
  if(*BUFF=='c'){
      signal(SIGINT,ctrl_handler2);
  }
  else{
    exit(0);
  }
  
 
}

int main(){
  int pid1,pid2;
  
  pid1 = fork();
  

  
  if(pid1==0){
    signal(SIGINT,ctrl_handler);
    for(int i = 0; i<20;i++){
        printf("fib: %d \n",fib(i));//prima c'era solo i ora ho aggiunto fatt(i)
        sleep(1);
        }
    }
    else if(pid1>0){
    //padre
      pid2 = fork();
        if(pid2<0){  printf("Errore nella creazione del figlio\n");}
      if(pid2== 0){
        signal(SIGINT,ctrl_handler2);
        for(int i = 0; i<20;i++){
        printf("fatt: %d \n",fatt(i));//prima c'era solo i ora ho aggiunto fatt(i)
        sleep(1);
        }
        }
    
    else if(pid2>0){
            signal(SIGINT,SIG_IGN);
            wait(NULL);
            wait(NULL);
            printf("\n I miei figli sono terminati\n termino anchhe io\n");

    }
    }
      }