首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能使用sa_sigaction -- "sigaction doens没有字段sa_sigaction“

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

Stack Overflow用户
提问于 2015-05-07 17:42:42
回答 1查看 108关注 0票数 0

嘿,伙计们,我在摆弄信号,有一个奇怪的错误:我想给成员sa_sigaction设置一个值,但是IDE和编译器似乎找不到它。

代码语言:javascript
复制
#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结构或上下文指针中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-07 17:50:55

您没有指定操作系统,所以我无法确定,但我认为问题是,您无意中通过以下错误的特性测试宏用法请求了一个缺乏POSIX的旧版本:

代码语言:javascript
复制
#define _POSIX_SOURCE

_POSIX_SOURCE宏本身是不受欢迎的;您应该使用_POSIX_C_SOURCE并将其定义为您想要的API版本。为了确保工作sigaction的可用性,您可能需要:

代码语言:javascript
复制
#define _POSIX_C_SOURCE 200809L

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

代码语言:javascript
复制
#define _XOPEN_SOURCE 600 /* or 700 */

因为在第6期中,您想要的功能可以作为XSI扩展。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30108195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档