#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.