copsa-ctrlc

Programa que emet el missatge "Ei! No facis això!!! " cada cop que l’usuari prem simultàniament les tecles <ctrl>` i C.

  1. Guió executable de python copsa-ctrlc

    #!/usr/bin/python3
    from copsa-ctrlc import copsa-ctrlc
    
    copsa-ctrlc()
    
  2. Mòdul de python copsa-ctrlc.py

    #!/usr/bin/python3
    import signal, os, sys
    # gestor del senyal INT (Interrupció des del terminal)
    def copsaINT(sig_num, frame):
        signal.signal(signal.SIGINT, copsaINT) 
                   # refem l'associació del senyal al gestor. 
                   #Si no es fa, el següent cop que
                   #es faci ctrl-c, no passarà per aquí 
        print("Ei! No facis això!!!\n")
        sys.stdout.flush()
    
    def copsa_ctrlc():
        signal.signal(signal.SIGINT, copsaINT) # Associació el senyal INT al gestor
                                               # copsaInt  
        while True: #Iteració de durada infinita
            signal.pause(); # procés dormint fins arribada senyal
    
    
    if __name__ == '__main__':
        copsa_ctrlc()
    
  3. Fitxer C copsa-ctrlc.c

    #include <stdio.h>     /* biblioteca d'E/S estandard  */
    #include <unistd.h>    /* biblioteca UNIX estandard   */
    #include <signal.h>    /* biblioteca d'ús de senyals  */
    /* gestor del senyal INT (Interrupció des del terminal)*/
    void copsaINT(int sig_num) {
        signal(SIGINT, copsaINT);/* refem l'associació del senyal al gestor. 
                                    Si no es fa, el següent cop que
                                    es faci ctrl-c, no passarà per aquí  */
        printf("Ei! No facis això!!!\n");
        fflush(stdout);
    }
    
    int main(int argc, char* argv[]) {
        signal(SIGINT, copsaINT);/* Associació el senyal INT al gestor
                                    copsa_int */ 
        while (1) {pause();}     /* Iteració de durada infinita */
    }
    

Un cop descarregats, estudieu que fa i com ho fa cada fitxer. Pel cas del python, en bash, feu:

$ chmod +x copsa-ctrlc
$ export PATH=$PATH":."
$ copsa-ctrlc

Us anirà sortint el missatge "Ei! No facis això!!! " cada cop que premeu simultàniament les tecles <ctrl> i C.

Trobareu els mateixos resultats des de l’intèrpret:

$ python3
>>> from copsa-ctrlc import copsa-ctrlc
>>> copsa-ctrlc()

El programa en C, primer cal compilar-lo (primera línia amb el resultat d’un nou fitxer objecte copsa-ctrlc.o), després muntar-lo (segona línia creant l’executable en codi màquina ecu [1])

$ gcc -c copsa-ctrlc.c
$ gcc -o ctrlc copsa-ctrlc.o
$ ctrlc

Observacions

Un cop activat el programa no es pot aturar prement les tecles <ctrl> i C. Per fer-ho aneu a un altre terminal, identifique el procés a aturar (amb les comandes ps aux i grep nom executable ) i destruiu el procés mitjançant la comanda kill -9.

Footnotes