No consigo implementar una función

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
danidetenerife
Mensajes: 2
Registrado: 10/01/2019 8:40 am

No consigo implementar una función

#1 Mensaje por danidetenerife » 10/01/2019 8:43 am

Hola buenas tardes, soy principiante en lenguaje C y me estoy volviendo loco intentando implementar una función para que me de la fecha y la hora del sistema cuando le escribo un comando. ¿Alguien puede ayudarme y decirme que estoy haciendo mal?, les adjunto mi código:

Código: Seleccionar todo

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <sys/types.h>
#include <signal.h>
#include <unistd.h>

void posibleSenal(int codigo_senal);

int main(int argc,char* argv[]){
        
    if (signal(SIGUSR1,posibleSenal)==SIG_ERR){
        time_t tiempo = time(0);
        struct tm *tlocal = localtime(&tiempo);
        char output[128];
        strftime(output,128,"%d/%m/%y %H:%M:%S",tlocal);
        printf("%s\n",output);
        perror("Error de señal SIGUSR1\n");
        exit(EXIT_FAILURE);
    }

    if (signal(SIGTERM,posibleSenal)==SIG_ERR){
        perror("Error de señal SIGTERM\n");
        exit(EXIT_FAILURE);
    }

    while(1){
        pause();
    }
}

void posibleSenal(int codigo_senal){
    switch(codigo_senal){
        case SIGUSR1:
            printf("Señal recibida SIGUSR1\n");
            break;
        case SIGTERM:
            printf("Señal recibida SIGTERM\n Fin\n");
            exit(EXIT_SUCCESS);
    }
}
Si recibe SIGTERM(señal nº 15) sacará mensaje de identificación , se despide y acaba. Si recibe SIGUSR1 (señal 10) se identifica y dice fecha , hora del sistema.

Muchas gracias
Última edición por mollok el 10/01/2019 9:35 am, editado 1 vez en total.
Razón: Los códigos deben ir entre etiquetas 'code', botón </>

mollok
Mensajes: 452
Registrado: 30/01/2018 9:47 am
Ubicación: Mallorca, España

Re: No consigo implementar una función

#2 Mensaje por mollok » 10/01/2019 11:07 am

A ver si alguien con Linux te puede ayudar.

De todas formas signal es para enlazar una manejador con una señal, es decir, cuándo el programa reciba una señal saltará a esa función. Tal cómo lo tienes puesto vas a hacer lo que has dicho sólo en caso de que se falle en configurar el manejador.

Deberías preparar dos funciones y cada una que haga las operaciones que has dicho y a cada función le das una señal diferente. Usa if(signal...==SIG_ERR) para informar de que has fallado en capturar el manejador.

Un ejemplo aquí: https://en.cppreference.com/w/c/program/SIG_ERR
while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}

danidetenerife
Mensajes: 2
Registrado: 10/01/2019 8:40 am

Re: No consigo implementar una función

#3 Mensaje por danidetenerife » 11/01/2019 6:47 am

La verdad es que todavía no veo la manera de implementarla, ¿puedes darme alguna indicación un poco más precisa?, estoy bastante verde en esto. Muchas gracias por tu respuesta.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 6 invitados