C Linux中的信号处理库无效

C Linux中的信号处理库无效,c,linux,gcc,signals,C,Linux,Gcc,Signals,我正在尝试用Linux(Ubuntu12.01LTS)编译一个信号处理程序。这是我的密码: #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <fcntl.h> sigset_t ens1, ens2

我正在尝试用Linux(Ubuntu12.01LTS)编译一个信号处理程序。这是我的密码:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <fcntl.h>
sigset_t ens1, ens2; 
int sig; 

int main(){
    /* Construction de l'ensemble ens1 = { SIGINT, SIGQUIT, SIGUSR1 }*/
    sigemptyset(&ens1); 
    sigaddset(&ens1, SIGINT); 
    sigaddset(&ens1, SIGQUIT); 
    sigaddset(&ens1, SIGUSR1); 
    sigprocmask(SIG_SETMASK, &ens1, NULL);  /* Installation du masque ens1 */
    /* Envoi à lui-même de deux exemplaires de SIGINT et un de SIGUSR1 */
    raise(SIGINT); 
    kill(getpid(), SIGINT); 
    kill(getpid(), SIGUSR1);
    /* Extraction des signaux pendants masqués */ 
    sigpending(&ens2);
    /* Impression de la liste des signaux pendants */
    printf("Signaux pendants: ");
    for(sig = 1; sig < NSIG; sig++){
        if(sigismember(&ens2, sig)) printf("%d ", sig); 
        }
    putchar('\n');
    sleep(15); 
    sigemptyset(&ens1); 
    printf("Déblocage de tous les signaux\n");
    sigprocmask(SIG_SETMASK, &ens1, NULL); 
    printf("Fin du processus\n"); 
    exit(0);    
    }

signal.h
是一个POSIX库,而不是标准的C库,请删除
-ansi
标志。

并将
\define\u POSIX\u SOURCE
添加到源代码的顶部,或者使用gcc选项
-D\u POSIX\u SOURCE
。感谢您的回答,我在代码的顶部添加了#define \u POSIX\u SOURCE 1。但有一个问题是他们找不到NSIG符号:错误:“NSIG”未声明(首次在该函数中使用)src/Signal/signauxPendants.c:37:21:注意:每个未声明的标识符对于它出现在与BSD\u源冲突的is\u POSIX\u源中的每个函数只报告一次?_BSD_源不允许kill()吗?
gcc -o obj/signauxPendants.o -c src/Signal/signauxPendants.c -Iinclude -Wall -ansi
src/Signal/signauxPendants.c:18:1: error: unknown type name ‘sigset_t’

src/Signal/signauxPendants.c: In function ‘main’:
src/Signal/signauxPendants.c:23:2: warning: implicit declaration of function     ‘sigemptyset’ [-Wimplicit-function-declaration]

src/Signal/signauxPendants.c:24:2: warning: implicit declaration of function ‘sigaddset’ [-Wimplicit-function-declaration]

src/Signal/signauxPendants.c:27:2: warning: implicit declaration of function ‘sigprocmask’ [-Wimplicit-function-declaration]

src/Signal/signauxPendants.c:27:14: error: ‘SIG_SETMASK’ undeclared (first use in this function)
src/Signal/signauxPendants.c:27:14: note: each undeclared identifier is reported only once for each function it appears in

src/Signal/signauxPendants.c:30:2: warning: implicit declaration of function ‘kill’ [-Wimplicit-function-declaration]

src/Signal/signauxPendants.c:33:2: warning: implicit declaration of function ‘sigpending’ [-Wimplicit-function-declaration]

src/Signal/signauxPendants.c:36:21: error: ‘NSIG’ undeclared (first use in this function)

src/Signal/signauxPendants.c:37:3: warning: implicit declaration of function ‘sigismember’ [-Wimplicit-function-declaration]

make: *** [obj/signauxPendants.o] Error 1