1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Como criar uma bind em C?

Discussão em 'Programação' iniciada por raVemjr, 23 de Novembro de 2007. (Respostas: 6; Visualizações: 961)

  1. raVemjr

    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...
     
  2. Madril

    Madril 1st Folding then Sex

    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: 23 de Novembro de 2007
  3. MadOnion

    MadOnion Folding Member

    (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
     
  4. souto

    souto To fold or to FOLD?

    Penso que é esta a resposta que ele procura :)
     
  5. raVemjr

    raVemjr I'm cool cuz I Fold

    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?
     
  6. Tyran

    Tyran Power Member

    penso que neste caso não é eof mas sim feof :P tenta lá isto
    Código:
    while(!feof(stdin)) {
    ...
    }
    
    cumpzz
     
  7. raVemjr

    raVemjr I'm cool cuz I Fold

    Acho que eles já se tinham desenrascado na mesma com a informação que lhes dei ontem, mas obrigado na mesma.
     

Partilhar esta Página