Estoy escribiendo un programa shell que debe manejar señales. Mi código relacionado con el manejo de señales relevante es la siguiente:compila errores usando signal.h en Linux
#include <signal.h>
...
#include <sys/types.h>
...
void installSigactions(int, struct sigaction*);
void handler_function(int signal_id);
...
/*define signal table*/
struct sigaction signal_action;
/*insert handler function*/
signal_action.sa_handler = handler_function;
/*init the flags field*/
signal_action.sa_flags = 0;
/*are no masked interrupts*/
sigemptyset(&signal_action.sa_mask);
/*install the signal_actions*/
sigaction(SIGINT, &signal_action, NULL);
Compilación me da los siguientes avisos y errores:
gcc -Wall -ggdb -ansi -static -pedantic -o os1shell2 os1shell2.c
os1shell2.c:35: warning: 'struct sigaction' declared inside parameter list
os1shell2.c:35: warning: its scope is only this definition or declaration,
which is probably not what you want
os1shell2.c: In function 'main':
os1shell2.c:66: error: storage size of 'signal_action' isn't known
os1shell2.c:75: warning: implicit declaration of function 'sigemptyset'
os1shell2.c:78: warning: implicit declaration of function 'sigaction'
Puede alguien decirme por qué estoy recibiendo estos avisos y errores?
eliminando '-ansi' me deja con: ' /tmp/ccl4HmT7.o: En la función main': ' '/home/stu1/s11/gaw9451/Cursos/OS_3/os1shell2.c: 68: undefined' 'referencia a handler_function'' ' collect2: ld devuelto 1 estado de salida' Añadiendo el '-D_POSIX_C_SOURCE' hace lo mismo. Alguna idea sobre esto ?? – Ataraxia
¿Tiene 'handler_function' definido en alguna parte? Está declarado en su pregunta, pero no hay un código para eso. Tuve que agregar 'void handler_function (int signal_id) {}', y luego su código compilado bien. –