1

假设我有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);

char *除了使用外部缓冲区之外,我如何在调用 raise 时传递参数?

4

1 回答 1

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)以从共享库中获取缓冲区。

于 2013-06-11T19:20:48.523 回答