|
|
|
| 2008/10/07 11:42||▲
|
|
|
exit関数は、文字通りプログラムを終了させる関数ですが、実行環境であるTOPPERS/JSPカーネルには、ほぼ同じ動作をするkernel_exit関数がありますので、これを使うことにします。
#include <t_searvices.h> #include <t_config.h>
void exit(int status) { if (!vsns_ini()) kernel_exit(); call_atexit(); cpu_terminate(); sys_exit(); }
ここで、vsns_ini関数を使って、カーネルが起動しているかどうかを判別しています。カーネルが起動していない状態で、kernel_exit関数を呼び出すと、いろいろと問題が生じる可能性が懸念されるからです。
call_atexit();以降は、kernel_exit関数の後半部分と同じです。カーネルが起動していない状態であれば、CPUロック状態ですので、t_lock_cpu関数の呼び出しなどは行っていません。
kernel_exit関数の後半部分では、syslog_terminate関数の呼び出しを行っているのですが、静的APIのATT_INIで登録した初期化ルーチンが呼び出される前にsyslog_terminate関数を呼び出すと、まともに動くかどうかわからないので、ここでは省略しています。
exit関数の引数には、プログラムの終了コードを渡す必要がありますが、今回の実装ではこの値は無視しています。ただし、<stdlib,h>ヘッダでは、終了コードのためのマクロを2つ定義しなければなりません。
#define EXIT_SUCCESS 0 #define EXIT_FAILUE 1
このうち、EXIT_SUCCESSは0でなければなりませんが、EXIT_FAILUREは非0であれば何でもかまいませんので、今回は1にしておきました。
|
| 2006/05/24 01:55|一般ユーティリティ|TB:0|CM:0|▲
|
|
|
コメント
|
|
コメントの投稿
|
|
|
|
|
トラックバック
|
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/61-826dce1a
|
|
|
|
|
ホーム
全記事一覧
<< 前の記事
次の記事 >>
|