comstackr des erreurs en utilisant signal.h sous Linux

J’écris un programme shell qui doit gérer les signaux. Mon code relatif au traitement des signaux est le suivant:

#include  ... #include  ... 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 ); 

La compilation me donne les avertissements et erreurs suivants:

 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' 

Quelqu’un peut-il me dire pourquoi je reçois ces avertissements et ces erreurs?

Cela fonctionnera si vous supprimez -ansi de votre ligne de compilation. Je soupçonne que le problème est que les parties posix de la bibliothèque de signaux ne sont pas incluses lorsque vous spécifiez -ansi .

Si vous ne voulez vraiment pas désactiver -ansi, vous pouvez également append -D_POSIX_C_SOURCE aux options du compilateur.

Voici une brève discussion sur ANSI et les macros de test de fonctionnalités gcc .

Veuillez essayer de déplacer “sys / types.h” avant “signal.h”.

Si cela ne fonctionne pas, essayez d’append ceci:

 #include  

Si cela ne fonctionne toujours pas, veuillez spécifier:

1) Votre système d’exploitation et votre version

2) Votre version de gcc