//----------------------------------------------------------- // fork.c //----------------------------------------------------------- #include #include #include #include #include //----------------------------------------------------------- pid_t servidor, cliente; //----------------------------------------------------------- void manejador_sigusr1(int) { signal(SIGUSR1, manejador_sigusr1); puts("[servidor]: petición recibida"); puts("[servidor]: respuesta enviada"); kill(cliente, SIGUSR2); } //----------------------------------------------------------- void manejador_sigusr2(int) { signal(SIGUSR2, manejador_sigusr2); puts("[cliente ]: respuesta recibida"); puts("[cliente ]: petición enviada"); kill(servidor, SIGUSR1); } //----------------------------------------------------------- int main() { alarm(1); 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); while (1) sleep(1); // man 3 sleep break; default: signal(SIGUSR1, manejador_sigusr1); wait(NULL); break; } } //-----------------------------------------------------------