如何在unix中调用raise时共享/传递参数?

时间:2013-06-11 16:23:56

标签: c unix signals ipc

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

1 个答案:

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