Linux中的信号处理库无效。

3

我正在尝试在Linux(Ubuntu 12.01 LTS)中编译一个信号处理程序。以下是我的代码:

#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);    
    }

问题在于,总是会出现以下错误:
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 functionmain’:
src/Signal/signauxPendants.c:23:2: warning: implicit declaration of functionsigemptyset[-Wimplicit-function-declaration]

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

src/Signal/signauxPendants.c:27:2: warning: implicit declaration of functionsigprocmask[-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 functionkill[-Wimplicit-function-declaration]

src/Signal/signauxPendants.c:33:2: warning: implicit declaration of functionsigpending[-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 functionsigismember[-Wimplicit-function-declaration]

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

2

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


1
在源代码的顶部添加 #define _POSIX_SOURCE 或使用 gcc 选项 -D_POSIX_SOURCE - alk
感谢您的回答,我已在代码顶部添加了 #define _POSIX_SOURCE 1。但是有一个问题,他们找不到 NSIG 符号: 错误:‘NSIG’未声明(在此函数中第一次使用) src / Signal / signauxPendants.c:37:21:注:每个未声明的标识符仅报告一次,因为它出现在每个函数中 - minh-hieu.pham
_POSIX_SOURCE和_BSD_SOURCE是否冲突?_BSD_SOURCE不允许使用kill()函数吗? - Palo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接