我有这段代码:
#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;
}
谢谢
答案 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);
: :