Neste trabalho iremos implementar uma calculadora que funciona através do mecanismo mais simples de comunicação interprocessos: passagem de sinais.
No Linux, sinais podem ser enviados a processos usando o programa kill -SIGNAL PID, onde SIGNAL é um sinal disponível no sistema (ver man 7 signal). Programas podem informar ao sistema como cada sinal deve ser tratado usando a função sigaction. Neste trabalho iremos implementar uma calculadora que recebe comandos através de sinais. O "protocolo" de comunicação será o seguinte:
Usaremos SIGUSR1 para incrementar o operando atual. Operandos começam em 0 e só podem ter valores positivos. Para passar à calculadora um operando com valor 3, basta enviar o sinal SIGUSR1 três vezes.
Usaremos SIGUSR2 para confirmar entradas de parâmetros. Após enviar a quantidade desejada de sinais SIGUSR1, o usuário da calculadora deve enviar um SIGUSR2 para confirmar o valor do operando. Quando um operando é confirmado, o programa deve imprimir na tela o valor do operando.
Logo após a confirmação de um operando via SIGUSR2, podemos enviar um operando. Usaremos SIGHUP para soma, SIGINT para subtração, e SIGALRM para igual. Ao receber cada operador, a calculadora deve imprimí-lo na tela; quando receber o operador igual, a calculadora deve imprimir o resultado na tela.
A calculadora deve iniciar no modo de recepção de operador, e deve voltar ao modo de recepção de operador após tratar o operador igual.
Deve ser entregue o código do programa da calculadora. Documentação é opcional. Se entregue, deve ser em formato PDF e ter no máximo duas páginas.
A correção do trabalho será semi-automática através de um "usuário" simulador pelo professor. Teste seu programa sobre cargas de utilização pesadas (milhares de operações e alta frequência de recebimento de sinais).