C99に対応した標準Cライブラリの実装レポートを行っていきます。

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

ホーム 全記事一覧 << 前の記事 次の記事 >>

 

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:0CM:0

コメント
コメントの投稿

管理者にだけ表示を許可する


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/61-826dce1a

ホーム 全記事一覧 << 前の記事 次の記事 >>

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

このブログをリンクに追加する

Powered By FC2ブログ 

Powered By FC2ブログ
ブログやるならFC2ブログ

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. 無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て template designed by 遥かなるわらしべ長者への挑戦.