#include #include #include #include #include #define key ftok("./clef",13) int *p; void traite_sig(int sig) { alarm(7); switch(sig) { case SIGUSR1 : printf("."); fflush(stdout); kill(*p,SIGTERM); break; case SIGUSR2 : printf("_"); fflush(stdout); kill(*p,SIGTERM); break; case SIGINT : printf(" "); fflush(stdout); kill(*p,SIGTERM); break; } } void traite_SIGALRM(int sig) { printf("'\n"); shmdt(p); exit(0); } main() { int idshm; idshm = shmget(key,2*sizeof(int),0); p = shmat(idshm,NULL,0); printf("J'ai recu '");fflush(stdout); struct sigaction action; action.sa_handler = traite_sig; sigfillset(&action.sa_mask); action.sa_flags = 0; sigaction(SIGUSR1,&action,NULL); sigaction(SIGUSR2,&action,NULL); sigaction(SIGINT,&action,NULL); action.sa_handler = traite_SIGALRM; sigaction(SIGALRM,&action,NULL); *(p+1) = getpid(); while(*p==0); alarm(7); while(1); }