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 に答える