#include #include #include #include #include #include int flag = 1; void f(int signo) { /* nop (juste pour reveiller le processus) */ flag = 0; } main(int argc, char *argv[]) { char c; int pid; int fd; struct sigaction action; sigset_t signaux; action.sa_handler = f; sigemptyset(&action.sa_mask); action.sa_flags = 0; sigaction(SIGUSR1,&action,NULL); sigemptyset(&signaux); fd = open(argv[1],O_WRONLY | O_CREAT | O_TRUNC, 0666); pid = fork(); if(pid == 0) { /* code du processus P1 */ for (c ='a';c<='z';c++) { write(fd,&c,1); kill(getppid(),SIGUSR1); if(flag) sigsuspend(&signaux); flag = 1; } close(fd); exit(0); } /* code du processus P2 */ for (c ='A';c<='Z';c++) { if(flag) sigsuspend(&signaux); flag = 1; write(fd,&c,1); kill(pid,SIGUSR1); } wait(NULL); close(fd); exit(0); }