// Programa temporizador. // // Importante: algumas implementações da função sleep podem // conflitar com alarmes de temporização, causando resultado // não esperado. #include #include #include #include #include #include unsigned count = 0; // Contador de sinal SIGINT (cntr-C) void mypause(int sign) { switch (sign) { case SIGALRM: printf("Recebido sinal do temporizador (3 segundos)...\n"); // Reprograma novo alarme para daqui a 3 segundos alarm(3); break; case SIGINT: count++; if (count == 1) { // Primeiro sinal SIGINT printf("\nAinda estou ativo .... primeiro Cntr-C recebido ... programando temporizador ...\n"); // Programa alarme para daqui a 3 segundos alarm(3); } else printf("\nAinda estou ativo ... recebido Cntr-C %d vezes ...\n", count); break; case SIGQUIT: printf("\nRecebido Cntr-\\ ... vou encerrar! \n\n"); exit(0); break; } } int main() { printf("Programa temporizador\n"); printf(" Digite cntr-C para iniciar temporizador\n"); printf(" Digite cntr-\\ para encerrar\n"); printf("\n"); signal(SIGALRM, mypause); // Trata sinal do temporizador signal(SIGINT , mypause); // Trata sinal inter(cntr-C) signal(SIGQUIT, mypause); // Trata sinal SIGQUIT (cntr-\) while (1); return (0); }