代码之家  ›  专栏  ›  技术社区  ›  mabounassif

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

  •  0
  • mabounassif  · 技术社区  · 14 年前

    我有这个代码:

    #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 回复  |  直到 11 年前
        1
  •  2
  •   paxdiablo    14 年前

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

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

    如果你真的想这样做,你可以 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);
       : :