不能使用sa_sigaction - " sigaction doens没有字段sa_sigaction"

时间:2015-05-07 17:42:42

标签: c

嘿伙计们我正在弄乱信号,并且有一个奇怪的错误: 我想为成员sa_sigaction设置一个值,但IDE和编译器似乎找不到它..

#define _POSIX_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <signal.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/wait.h>
#include <bits/siginfo.h>

struct sigaction new_action;

void SIGUSR1_handler(int sig, siginfo_t *siginfo, void *context) {
 ......
}

memset(&new_action, '\0', sizeof(new_action));  //cleaning the memory
new_action.sa_sigaction = SIGUSR1_handler;    //setting the handler for the signal
new_action.sa_flags = SA_SIGINFO;

我只发布了代码的相关部分。 有人可以帮帮我吗?

编辑:我怎样才能在siginfo结构或上下文指针中添加一些内容?

1 个答案:

答案 0 :(得分:2)

你没有指定你的操作系统,所以我不能确定,但​​我认为问题是你无意中通过以下不正确的功能测试宏用法请求缺少它的古老版本的POSIX:

#define _POSIX_SOURCE

{@ 1}}宏本身已被弃用;您应该使用_POSIX_SOURCE并将其定义为所需的API版本。为了确保工作_POSIX_C_SOURCE的可用性,您可能需要:

sigaction

因为它(如果我没记错的话)在早期版本的标准中有一个XSI扩展。或者,您可以使用:

#define _POSIX_C_SOURCE 200809L

因为您想要的功能在问题6中作为XSI扩展提供。