#include <unistd.h> int pause(void) /* espera de um sinal qualquer */
Valor de retorno: sempre retorna -1.
A primitiva pause() corresponde a uma espera simples. Ela não faz nada, nem espera nada de particular. Entretanto, uma vez que a chegada de um sinal interrompe toda primitiva bloqueada, pode-se dizer que pause() espera simplesmente a chegada de um sinal.
Observe o comportamento de retorno clássico de um primitiva bloqueada, isto é o posicionamento de errno em EINTR. Note que, geralmente, o sinal esperado por pause() é o relógio de alarm().
Exemplo:
/* arquivo test_pause.c */ /* teste sobre o valor retornado por pause() */ #include <errno.h> #include <unistd.h> #include <signal.h> #include <stdio.h> void it_main(sig) /* tratamento sobre o 1o SIGINT */ int sig ; { printf("recepcao do sinal numero : %d\n",sig) ; printf("vamos retomar o curso ?\n") ; printf("é o que o os profs insistem em dizer geralmente!\n") ; } void it_fin(sig) /* tratamento sobre o 2o SIGINT */ int sig ; { printf("recepcao do sinal numero : %d\n",sig) ; printf("ok, tudo bem, tudo bem ...\n") ; exit(1) ; } int main() { signal(SIGINT,it_main) ; /* interceptacao do 1o SIGINT */ printf("vamos fazer uma pequena pausa (cafe!)\n") ; printf("digite CTRL-c para imitar o prof\n") ; printf("retorno de pause (com a recepcao do sinal): %d\n",pause()) ; printf("errno = %d\n",errno) ; signal(SIGINT,it_fin) ; /* rearma a interceptacao: 2o SIGINT */ for(;;) ; exit(0) ; }
Resultado da execução:
euler:~/> test_pause vamos fazer uma pequena pausa (cafe!) digite CTRL-c para imitar o prof recepcao do sinal numero : 2 vamos retomar o curso ? é o que o os profs insistem em dizer geralmente! retorno de pause (com a recepcao do sinal): -1 errno = 4 recepcao do sinal numero : 2 ok, tudo bem, tudo bem ... euler:~/>
A primitiva pause() é interrompida pelo sinal SIGINT, retorna -1 e errno é posicionado em 4: interrupted system call.