next up previous
Next: Processos manipulando sinais: Exemplos Up: Recepção de sinais: Previous: Primitive signal()

Primitive pause()

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



Celso Alberto Saibel Santos 2000-11-14