C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でCtrl+C(SIGINT)イベントをキャッチして処理する方法

キーボードの Ctrl + C は、現在実行中のプロセスに割り込み(中断)を送信するために使われる操作です。この記事では、C++でこのCtrl+Cイベントをプログラム側で捕捉(キャッチ)する方法を解説します。

Ctrl+Cは、C/C++におけるシグナルの一種です。そのため、シグナルハンドリングの仕組みを利用することで捕捉できます。Ctrl+Cに対応するシグナルコードは SIGINT(Signal for Interrupt:割り込みシグナル)で、その値は「2」です。

シグナルの捕捉には signal() 関数を使用します。この関数にシグナルの種類と、シグナルを受信した際に呼び出したいコールバック関数(シグナルハンドラ)のアドレスを渡すことで登録が完了します。

サンプルコード

#include <unistd.h>
#include <iostream>
#include <cstdlib>
#include <signal.h>
using namespace std;

// プロセスにCtrl+C(SIGINT)が送られたときに呼び出される関数を定義
void signal_callback_handler(int signum) {
    cout << "Caught signal " << signum << endl;
    // プログラムを終了する
    exit(signum);
}

int main(){
    // シグナルとシグナルハンドラを登録
    signal(SIGINT, signal_callback_handler);
    while(true){
        cout << "Program processing..." << endl;
        sleep(1);
    }
    return EXIT_SUCCESS;
}

実行結果

$ g++ test.cpp
$ ./a.out
Program processing...
Program processing...
Program processing...
Program processing...
Program processing...
Program processing...
^CCaught signal 2
$

コードのポイント

  • signal(SIGINT, handler): 第1引数に捕捉したいシグナル(SIGINT)、第2引数にハンドラ関数へのポインタを指定します。
  • シグナルハンドラ: Ctrl+Cが押されると、OSからSIGINT(値は2)がプロセスに送られ、登録済みのハンドラ関数が自動的に呼び出されます。
  • exit(signum): ハンドラ内でプログラムを明示的に終了させています。ここで終了しなければ、whileループが継続します。

なお、signal() 関数は動作が環境依存になる場合があるため、より移植性と制御性の高い sigaction() の使用が推奨されることもあります。ただし、簡単なシグナル捕捉であれば上記のように signal() でも十分に機能します。

  1. C++プログラムから外部アプリケーション(メモ帳など)を起動する方法

    この記事では、C++プログラムを使ってメモ帳(Notepad)などのサードパーティ製アプリケーションを起動する方法を解説します。実装は非常にシンプルで、コマンドプロンプトで使うコマンドをそのままC++から呼び出すだけで実現できます。ポイントとなるのは、標準ライブラリの system() 関数です。この関数の引数にアプリケーション名(コマンド)を文字列として渡すと、OSがそのコマンドを実行し、対応するアプリケーションが起動します。サンプルコード#include <iostream> using namespace std; int main() { cout <<

  2. C++プログラミングの始め方:初心者向けステップバイステップガイド

    C++プログラミングを学ぼうと決めたものの、何から手をつければよいかわからない——そんな方のために、この記事ではC++学習を始めるための基本的な手順をわかりやすく解説します。コンパイラの導入から、初めてのプログラム作成、コンパイルと実行まで、順を追って見ていきましょう。 ステップ1:C++コンパイラを入手する C++プログラミングを学び始める前に、まず最初に行うべきのがコンパイラの準備です。主要なOSプラットフォーム向けに、高品質な無料のC++コンパイラが複数提供されています。自分の環境に合ったものをダウンロードするか、手軽に試したい場合はtutorialspoint.comのオンラインコンパ