a
unknown
abc
3 years ago
1.4 kB
4
Indexable
#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);
}
}
}Editor is loading...