假设我有main.c
:
void myfunc(int num)
{
printf("%d \n", num);
signal(SIGUSR1, myfunc);
}
int main(void)
{
void (*prev_fn)(int);
prev_fn = signal(SIGUSR1, myfunc);
if (prev_fn == SIG_IGN) signal(SIGUSR1,SIG_IGN);
}
并.so
main.c
加载foo
函数调用raise
:
raise(SIGUSR1);
除了使用extern缓冲区之外,如何在调用raise时传递参数char *
?
答案 0 :(得分:1)
在评论中,您写道:
我无法使用全局变量,因为
foo
位于.so
文件中且无法访问main.c
中的变量我可以使用extern
但我不知道想。
您可以做的是在.so
文件中提供一个函数,该函数根据信号处理程序可用的信息(信号)返回适当的缓冲区:
char * get_foo_buffer (int sig)
{
char *buffer = 0;
/* ... retrieve the right buffer ... */
return buffer;
}
现在,信号处理程序可以调用get_foo_buffer(num)
从共享库中获取缓冲区。