全て、
プログラムで終了ハンドラーを開発したいと考えています。
私はCが初めてです。Cでシグナルを管理することがすべてですか?
プログラムが正常に終了したかどうかを確認するにはどうすればよいですか?
そうでない場合、終了時に最大の情報を取得するにはどうすればよいですか?
全て、
プログラムで終了ハンドラーを開発したいと考えています。
私はCが初めてです。Cでシグナルを管理することがすべてですか?
プログラムが正常に終了したかどうかを確認するにはどうすればよいですか?
そうでない場合、終了時に最大の情報を取得するにはどうすればよいですか?
C (C89 および C99 標準) では、プログラムの終了時に呼び出される関数を登録できatexit()
ます。これは信号とは関係ありません。シグナル ハンドラーとは異なり、複数の終了ハンドラーを登録できます。終了ハンドラは、 に登録されたときとは逆の順序で呼び出されます。atexit()
プログラムが正常に終了すると、終了ステータスが返されるという慣習があります0
。これは、プログラムのどこからでも、どこからでも実行return 0
できmain()
ますexit(0)
。
wait()
Unix/Linux/POSIX タイプのオペレーティング システム (Windows は不明) では、親プロセスは、システム コールまたはそのバリアントを使用して、子プロセスに関する終了ステータス情報を取得します。
例:簡単なプログラムとその出力を次に示しatexit()
ます。
#include <stdlib.h>
#include <stdio.h>
static void exit_handler1(void)
{
printf("Inside exit_handler1()!n");
}
static void exit_handler2(void)
{
printf("Inside exit_handler2()!n");
}
int main(int argc, char *argv[])
{
atexit(exit_handler1);
atexit(exit_handler2);
return 0;
}
プログラムによって生成される出力:
Inside exit_handler2()!
Inside exit_handler1()!
私が間違っていない場合は、終了時にプログラムから結果を返すことについて質問します。exit(x);
プログラムから値を返すには、関数を使用する必要があります。パラメータとして任意の整数値を入力できますx
。#include <stdlib.h>
そして、プログラムの開始時に使用することを忘れないでください。
ここを見ると、必要なものがすべて見つかります: http ://www.cplusplus.com/reference/cstdlib/exit/
ここに新しいリンクを追加しました。ご覧ください。