私は主に Windows 環境の出身なので、Linux で何かを書くことに移行するのに少し迷っています。
次のような単純な C/C++ アプリケーションがあるとします。
int main(int argc, char** argv)
{
int h = open("something");
while (true)
{
// do work
usleep(10000);
}
close(h);
}
WindowsではGetAsyncKeyState()
、エスケープキーなどを探すために(または他の種類のキーボードチェック機能)のようなものを使用し、それが押されたときにループから抜け出します。そうclose(h)
すれば、私が呼び出され、必要なすべてのクリーンアップを行うことができます。
私が Linux でアプリケーションを終了する方法は、CTRL+を使用していましCた。これは、私の読書によると、それSIGINT
が送信することを意味し、アプリケーションを終了させるための「フレンドリーな」方法です。ただし、私の経験では、それは単にすべてをドロップし、その信号を受け取ったときにどこにでも閉じてしまうだけです (つまり、ループ後のクリーンアップが実行されないことを意味します)。
signal()
をリッスンするために使用することを提案する人もいればSIGINT
、その方法に同意しない人もいます。(さらに、Windows と Linux の間での処理方法に多少の違いが生じる傾向があるため、両方のプラットフォームでの実行に可能な限り近づけたいと考えています。)
このようなことに対する「ベストプラクティス」はありますか?