//----------------------------------------------------------- // fork.c //----------------------------------------------------------- #include // signal #include // puts #include // exit #include // wait #include // fork, getpid, kill, pause //----------------------------------------------------------- pid_t servidor, cliente; //----------------------------------------------------------- void manejador_sigusr1(int) { puts("[servidor]: petición recibida\n" "[servidor]: respuesta enviada"); kill(cliente, SIGUSR2); } //----------------------------------------------------------- void manejador_sigusr2(int) { puts("[cliente ]: respuesta recibida\n" "[cliente ]: petición enviada"); kill(servidor, SIGUSR1); } //----------------------------------------------------------- int main() { alarm(1); setbuf(stdout, NULL); // desactivar buffering de stdout signal(SIGUSR1, manejador_sigusr1); servidor = getpid(); cliente = fork(); switch (cliente) { case -1: exit(EXIT_FAILURE); break; case 0: alarm(1); signal(SIGUSR2, manejador_sigusr2); puts("[cliente ]: petición enviada"); kill(servidor, SIGUSR1); for(;;) pause(); break; default: wait(NULL); break; } } //-----------------------------------------------------------