a

mail@pastecode.io avatar
unknown
abc
a year ago
1.4 kB
1
Indexable
Never
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include<sys/wait.h>
#include<sys/types.h>
#include<unistd.h>
int fat(int n){
if(n==0)return(1);
  else return(n*fat(n-1));
}
int fib(int n){
if(n<=1) return n;
else return(fib(n-1)+fib(n-2));

}


void ctrl1(int sign){
int somma = 0;
for(int i = 1;i<=4;i++){
  somma = somma + fib(i);
  printf("%d\n",somma);
  }
  signal(SIGINT,ctrl1);//errore ho dimenticato di mettere la signal
wait(NULL);
}

void ctrl2(int sign){
char buff[50];
printf("vuoi continuare c o vuoi terminare n \n");
scanf("%s",buff);
if(*buff == 'c') 
  signal(SIGINT,ctrl2);
else 
  exit(0);

}

int main(){
int pid1,pid2,status;
pid1 = fork();
if(pid1 < 0){
  printf("errore creazione figlio1 \n");
  exit(1);
}
else if(pid1 == 0){
  signal(SIGINT,ctrl1);  //ho scritto SIG_INT al posto di SIGINT
  for(int i=1;i<= 30;i++){
    printf("i primi 30 numeri di fib: %d\n",fib(i));
    sleep(1);
  }

}

else if(pid1 >0){
  pid2 = fork();
  if(pid2 < 0){
    printf("errore creazione figlio 2 \n");
    exit(1);
    }
  else if(pid2 == 0){
    signal(SIGINT,ctrl2); //ho scritto SIG_INT al posto di SIGINT
    for(int i=1; i<=20;i++){
      printf("i primi 20 numeri fattoriali sono: %d\n",fat(i));
      sleep(1);
 }
}
 else if(pid2>0){
  signal(SIGINT,SIG_IGN);   //ho scritto SIG_INT al posto di SIGINT
  wait(&status);
  wait(&status);
  
  printf("I figli sono terminati\n");
  exit(0);
  }
 }
}