/* * Implementação simples do comando sleep. Funciona sempre? */ #include #include #include #include int sinal; void trata_SIGALRM(int signum) { sinal = 1; printf("Recebi SIGALRM.\n"); } int mysleep(int nseg) { sigset_t so_alarme, mascara; signal(SIGALRM, trata_SIGALRM); sigfillset(&so_alarme); sigdelset(&so_alarme, SIGALRM); sigdelset(&so_alarme, SIGINT); sigprocmask (SIG_SETMASK, &so_alarme, &mascara); sinal = 0; alarm(nseg); if (!sinal) pause(); sigprocmask (SIG_SETMASK, &mascara, NULL); return 0; } int main(int argc, char* argv[]) { int nseg; if (argc == 1) nseg = 1; else nseg = atoi(argv[1]); if (nseg > 0) mysleep(nseg); return 0; }