0

我有这个代码:

#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;
}

谢谢

4

1 回答 1

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);
   : :
于 2010-10-29T16:24:32.823 回答