Salve ,sapreste dirmi perchè questo programma mi da un errore di segmentation fault, oppure di illegal instruction
codice:/* * Realizzare un programma C e Posix sotto Linux che con l'uso dei segnali sincronizzi un processo padre ed un processo figlio che scrivono e leggono, rispettivamente, un numero intero alla volta (da 1 a n, dove n è passato da riga di comando) nella prima posizione di un file temporaneo opportunamente creato. * */ #include <signal.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <fcntl.h> int fdTemp,i; void handler(int signum) { char c,num[100]; lseek(fdTemp,0,SEEK_SET); if(signum==SIGUSR1) { sprintf(num,"%d",i); if(write(fdTemp,num,strlen(num))<0) { perror("write"); exit(-1); } printf("processo %d scrivo %s\n",getpid(),num); } else if(signum==SIGUSR2) { while(read(fdTemp,&c,1)>0) { printf("Letto %c\n",c); } } } int main(int argc,char**argv) { struct sigaction act; int n; pid_t pid; sigset_t mask,mask1,mask2; act.sa_handler=handler; n=atoi(argv[1]); sigemptyset(&mask); sigaddset(&mask,SIGUSR1); sigaddset(&mask,SIGUSR2); sigprocmask(SIG_BLOCK,&mask,NULL); printf("Processo padre pid=%d n=%d\n",getpid(),n); if((fdTemp=open("temp",O_RDWR|O_TRUNC|O_CREAT,S_IRUSR|S_IWUSR))<0) { perror("open"); exit(-1); } pid=fork(); if(pid==0) { sigaction(SIGUSR2,&act,NULL); printf("Processo figlio pid=%d\n",getpid()); sigemptyset(&mask1); for(i=1;i<=n;i++) { kill(getppid(),SIGUSR1); sigsuspend(&mask1); } } else if(pid>0) { sigaction(SIGUSR1,&act,NULL); sigemptyset(&mask2); for(i=1;i<=n;i++) { sigsuspend(&mask2); kill(pid,SIGUSR2); } } return 0; }

Rispondi quotando