a
unknown
abc
2 years ago
1.4 kB
2
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...