键盘信号处理,向回调处理函数添加参数(Ubuntu,intel)

时间:2010-10-29 16:20:14

标签: c keyboard signals signal-handling

我有这段代码:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

// Define the function to be called when ctrl-c (SIGINT) signal is sent to process
void
signal_callback_handler(int signum)
{
   printf("Caught signal %d\n",signum);
   // Cleanup and close up stuff here

   // Terminate program
   exit(signum);
}

int main()
{
   // Register signal and signal handler
   signal(SIGINT, signal_callback_handler);

   while(1)
   {
      printf("Program processing stuff here.\n");
      sleep(1);
   }
   return EXIT_SUCCESS;
}

有没有办法在回调函数中传递额外的参数? 类似的东西:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

// Define the function to be called when ctrl-c (SIGINT) signal is sent to process
void
signal_callback_handler(int signum, int k)
{

   k++; // Changing value of k
}

int main()
{
   int k = 0;
   // Register signal and signal handler
   signal(SIGINT, signal_callback_handler(k);

   while(1)
   {
      printf("Program processing stuff here.\n");
      printf(" blah %d\n", k);
      sleep(1);
   }
   return EXIT_SUCCESS;
}

谢谢

1 个答案:

答案 0 :(得分:2)

不,没有,而且实际上你应该在信号处理程序中的情况很少。

我通常只设置一个标志然后返回,让真正的代码从那时开始处理它。

如果你真的想这样做,你可以使k成为文件级静态,这样main和信号处理程序(以及文件中的其他所有函数)都可以访问它,但是您可能想要调查该选项的安全性(在真实程序使用或更新值时,信号处理程序是否可以运行)。

换句话说,比如:

static int k = 0;

void signal_callback_handler(int signum) {
   k++; // Changing value of k
}

int main() {
   // Register signal and signal handler
   signal(SIGINT, signal_callback_handler);
   : :