Publi

  • Controlar señales

    A veces, se nos presenta la necesidad de modificar el comportamiento de nuestro programa por ejemplo cuando el usuario pulse Control+C, o cuando terminemos nuestra aplicación, o cuando… dividamos por 0, o más cosas… podemos ver un listado de las diferentes señales con:

    man 7 signal

    Podemos utilizar para probar este programa (signals.c):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    #include <signal.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    void salir(int recib);
    void alarma(int que);
    int tmp=0;
    int divi=5;
    int main()
    {
        signal(SIGINT, salir);  /* Control+C */
        signal(SIGKILL, salir); /* kill */
        signal(SIGFPE, salir);  /* división por 0 */
        signal(SIGALRM, alarma);    /* alarma */
        signal(SIGUSR1, alarma);    /* definido por el usuario */
        int numero=4;
        while (1)
            {
                usleep(1000);       /* Le damos un respiro a la CPU mientras estamos en el bucle */
                tmp++;
                if (tmp%1000==0)
                {
                    tmp=tmp/divi;
                    printf("tmp = %d\n", tmp);
                }
            }
    }
    void salir(int recib)
    {
        printf("Salgo porque ");
        switch (recib)
            {
            case SIGINT: printf("has pulsado Control+C...
    Leer artículo completo