日期:2014-05-16  浏览次数:20852 次

信号方面的问题请教.请大家指点
我是想让 链接库 在一定条件下给 程序 发一个自己定义的信号的.信号响应函数我需要在 程序里实现.于是我打算做一个传递函数的参数来实现这个过程.

以下代码实现:
// ------------lib.cpp
#include <...>

typedef void (*fn_t)(int);

void initlib(fn_t fn)
{
  signal(SIGUSR1,fn);
  raise(SIGUSR1);
}

//----------main.cpp
#include <...>
#include "lib.cpp"

static void sig_fn(int signo)
{
}

int main(void)
{
  initlib(sig_fn);
  while(1)
  pause();

  return 1;
}

现在单独编译都可以过的去.在link的时候说多次定义 initlib(void (*)(int)) 这是为啥哪?

再请教一下如我这样的要求,一般要怎么设计这个信号哪?


------解决方案--------------------
/* lib.h */
#ifndef MYSIGLIB_H
#define MYSIGLIB_H

/* type */
typedef void (*fn_t)(int);

/* func dec */
void initlib(fn_t fn);

#endif

/* lib.cpp */
#include "lib.h"

void initlib(fn_t fn)
{
signal(SIGUSR1, fn);
}

/**********************/

/* main.cpp */
#include <lib.h>

/* signal handler */
static void sig_fn(int signo)
{
/* TODO */
}

/* main */
int main()
{
initlib(sig_fn);
while (1)
pause();

return 0;
}