1

これは、私が勉強している試験の質問の例です。質問は、コードの何が問題になっているのかということです。私はそれがalarm(3)かもしれないと思っています、それがwhileループに飛び込む原因となる遅延?あるいは、そのSIGALRMを使用して睡眠から目覚めるべきではないかもしれませんが、それはここでは有効なポイントではないと思います。フィードバックをいただければ幸いです。この種のものに関連する関連情報を見つけるのは非常に難しいと思います。

static void foo(int signo) {
  printf("Nudge-nudge\n");
  alarm(3);
}
int main() {
  sigset_t set;
  sigemptyset(&set);
  sigset(SIGALRM, foo);
  alarm(3);
  while (1) {
    sigsuspend(&set);
  }
  return (0);
}
4

1 に答える 1

3

ここでの問題(おそらくそのうちの1つ)は、空の信号セットでプロセスを一時停止し、sigset(3)データを入力しないことです。sigsuspend(2)プロセス信号マスクを変更するため、SIGALRMブロックされます。

于 2012-08-14T14:19:28.740 に答える