- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 sigaction
联机帮助页中,它是这样写的:
sa_sigaction
还指定要与 signum
关联的操作。此函数接收信号编号作为其第一个参数,a指向 siginfo_t
的指针作为它的第二个参数和指向 ucon-text_t(转换为 void*
)作为其第三个参数。
所以我们可以将参数传递给信号处理程序(通过 void*
),但是我找不到路。有没有办法把它放在任何地方?
示例:
struct ping_val
{
int data1;
int data2;
};
void ping(int sig, siginfo_t *siginf, void *ptr)
{
// ....
}
int main()
{
struct sigaction sa_ping;
ping_val foo;
foo.data1 = 3;
foo.data2 = 4;
sa_ping.sa_sigaction = ping;
sigemptyset(&sa_ping.sa_mask);
sa_ping.sa_flags = 0;
sigaction(SIGALRM, &sa_ping, NULL);
// ....
}
我在哪里可以在 ping 的参数中传递 foo
结构值(在 struct *
中进行转换)???
最佳答案
您不能将任何参数传递给信号处理程序,因为您永远不会自己调用它。信号处理程序由对您的参数一无所知的操作系统调用。
让信号处理程序与主程序通信的标准方法是通过全局(或文件范围)变量。
关于c++ - sigaction : using "void (*sa_sigaction)(int, siginfo_t *, void *);",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44879718/
嘿伙计们,我正在处理信号,并且有一个奇怪的错误:我想为成员 sa_sigaction 设置一个值,但 IDE 和编译器似乎找不到它.. #define _POSIX_SOURCE #include
我有 struct sigaction pipe_act; pipe_act.sa_flags = SA_SIGINFO; pipe_act.sa_sigaction = sigpipehandler
当我捕获任何信号时,我想向子进程发送消息“end”,如果它们仍然存在,请使用kill pid来杀死它。没有全局变量 我想我必须使用 sa_sigaction,但我混淆了如何将管道的 FILE* 和子进
在查找 sigaction 的手册页时,我在 Linux 手册页中偶然发现了一个令人困惑的注释: On some architectures a union is involved: do not a
在 sigaction 联机帮助页中,它是这样写的: sa_sigaction 还指定要与 signum 关联的操作。此函数接收信号编号作为其第一个参数,a指向 siginfo_t 的指针作为它的第二
我是一名优秀的程序员,十分优秀!