Como criar uma bind em C?

raVemjr

I'm cool cuz I Fold
Puseram-me essa dúvida: tendo eu um programa em execução, como posso gerar uma interrupção ou coisa do género com uma combinação do estilo Ctrl+D.

Pensei em ler do stdin, mas creio que esse tipo de press não passa como um char para dentro dele...
 
Dá para fazer.

Tens que apanhar o Signal e criar uma função de handle para o mesmo.

Por exemplo, para apanhares um CTRL + C (que é uma interrupção), fazes:

Código:
signal(SIGINT, handleCtrlC);
Em que handleCtrlC é a função que corre quando o sinal é apanhado (normalmente nestas situações é guardar o estado da máquina).


--EDIT--

Li agora o teu post direito ... e a minha resposta axo k não tem nada a ver :P
 
Última edição:
(Lendo de stdin)Se usares o scanf(); e estiveres a ler valores, por exemplo num ciclo, e pressionares CTRL-D, a função scanf() devolve -1.

A partir daí interpreta :D
 
Dá para fazer.

Tens que apanhar o Signal e criar uma função de handle para o mesmo.

Por exemplo, para apanhares um CTRL + C (que é uma interrupção), fazes:

Código:
signal(SIGINT, handleCtrlC);
Em que handleCtrlC é a função que corre quando o sinal é apanhado (normalmente nestas situações é guardar o estado da máquina).


--EDIT--

Li agora o teu post direito ... e a minha resposta axo k não tem nada a ver :P

Penso que é esta a resposta que ele procura :)
 
(Lendo de stdin)Se usares o scanf(); e estiveres a ler valores, por exemplo num ciclo, e pressionares CTRL-D, a função scanf() devolve -1.

A partir daí interpreta :D

Pois, já tinham dito que o Ctrl+D fazia EOF no stdin, mas não me parecia fazer sentido, por isso liguei.

Então nesse caso tenho que ler do stdin ciclicamente, e quando ele estiver vazio (supondo que ctrl+d limpa o stdin) então gero a interrupção.

Isto tira a dúvida do meu colega, mas eu continuo curioso. No caso do Ctrl+D tá o problema resolvido, mas e se fosse ctrl+A, ou outra bind que não estivesse associada a um signal de Linux?

@Madril

Isso tem a ver com interpretação de sinais, mas então existe um sinal para qualquer combinação Ctrl+letra?
 
Back
Topo