linux编程,如何给信号处理函数传递参数。

时间:2020-12-21 04:44:23

主函数里有 lenth 这个变量,我想用信号处理函数处理它,那么是不是除了将lenth这个变量定义成全局变量,就没有其他方法了?能不能将length这个变量传给信号处理函数呢?

我看书上好像信号处理函数只能有一个参数,是传递信号量的。

signal( SIGALRM, hand )

如果不能传参数给信号处理函数,那么我要是有好多变量要给信号处理函数处理,那么我就要定义好多全局变量,那程序太乱了。。。。。。求大神,有没有其他神奇的方法。。。。。
求大神

6 个解决方案

#1


没办法, 你可以把全局变量收集到一个结构体里.

#2


将 主函数里的 lenth 变量,传递给另一个函数,然后在 信号处理函数 中调用这个 函数

#3


很遗憾 hand也不是变量 而是处理函数的函数指针

#4


可以用sigaction加上SA_SIGINFO标志。

#5


引用 4 楼 mymtom 的回复:
可以用sigaction加上SA_SIGINFO标志。

++
void (*sa_sigaction)(int signo, siginfo_t * siginfo, void * args)

#6


引用 5 楼 lvjing_CSDN 的回复:
Quote: 引用 4 楼 mymtom 的回复:

可以用sigaction加上SA_SIGINFO标志。

++
void (*sa_sigaction)(int signo, siginfo_t * siginfo, void * args)


不能传,那个函数基本上跟signal一样
第二个参数只是信号的信息,
第三个参数没有用到

#1


没办法, 你可以把全局变量收集到一个结构体里.

#2


将 主函数里的 lenth 变量,传递给另一个函数,然后在 信号处理函数 中调用这个 函数

#3


很遗憾 hand也不是变量 而是处理函数的函数指针

#4


可以用sigaction加上SA_SIGINFO标志。

#5


引用 4 楼 mymtom 的回复:
可以用sigaction加上SA_SIGINFO标志。

++
void (*sa_sigaction)(int signo, siginfo_t * siginfo, void * args)

#6


引用 5 楼 lvjing_CSDN 的回复:
Quote: 引用 4 楼 mymtom 的回复:

可以用sigaction加上SA_SIGINFO标志。

++
void (*sa_sigaction)(int signo, siginfo_t * siginfo, void * args)


不能传,那个函数基本上跟signal一样
第二个参数只是信号的信息,
第三个参数没有用到