この章の目次にもどる
前頁:1.8 デバイス管理にもどる
次頁:1.10 システム管理機能にすすむ

1.9 時計管理

1.9.1 時計管理機能の概要

時計管理機能では、 システム内部で保持している基準時間であるシステム時間の取出し / 設定、 およびカレンダー日付時刻との変換機能を提供している。

システム時間はグリニッチ標準時 GMT (Greenwich Mean Time) の 1985年1月1日 00:00 からの秒数で表わされた32ビットの値であり、 ファイルの生成 / 更新 / アクセス日時等のシステム内部の時間表現として使用される。

システム時間に対して、 マシンが実際に存在する地域の時間をローカル時間と呼ぶ。 時計管理機能ではシステム時間とローカル時間との時差を保持し、 ローカル時間での日付時刻の取出し / 設定機能も提供している。

システム時間とローカル時間の関係は、 以下に示す時間補正データとして定義される。

	typedef struct {
		W	adjust;		/* システム時間との時差(秒) */
		W	dst_flg;	/* DST の適用タイプ */
		W	dst_adj;	/* DST 調整時間(分) */
	} TIMEZONE;

adjust はローカル時間とシステム時間 ( GMT ) との時差であり、グリニッチから西方向への秒単位で表現される、 - (12 × 60 × 60) 〜 + (12 × 60 × 60) の範囲の値である。

dst_flg はサマータイム ( Daylight Saving Time, DST ) の適用タイプを示し 0 は適用しないことを示す。 0 以外の値は適用することを示すが、 その意味は時計管理機能では関知せず、 単に 0 か 0 でないかの判断のみを行なっている。

dst_adj は DST による時間の調整時間 ( 分 ) を示す - (12×60) 〜 + (12×60) の値である。 時計管理機能では DST が適用されるか否かの判断は行なわず、 システムプログラムが DST が実際に適用される期間の開始時に、 dst_adj を適当な値に設定し、 DST が適用される期間の終了時に、dst_adj を 0 に設定することを想定している。

時間補正データにより、ローカル時間は以下の式で定義されることになる。

    ローカル時間(秒)
        = システム時間(秒) - adjust + (dst_flg ? (dst_adj×60): 0)

なお、時間の設定はユーザレベル0のプロセス以外から行なうことは禁止されている。

また、時計管理機能では、 以下に示す構造体で定義されるカレンダー日付時刻をサポートしており、 システム時間との変換機能が提供されている。

	typedef struct {
		W	d_year;	  /* 1990年からのオフセット(85〜) */
		W	d_month;  /* 月 ( 1 〜 12, 0) */
		W	d_day;	  /* 日 ( 1 〜 31 ) */
		W	d_hour;	  /* 時 ( 0 〜 23 ) */
		W	d_min;	  /* 分 ( 0 〜 59 ) */
		W	d_sec;	  /* 秒 ( 0 〜 59 ) */
		W	d_week;	  /* 週 ( 1 〜 54 ) */
		W	d_wday;	  /* 曜日 ( 0 〜 6, 0が日曜) */
		W	d_days;	  /* 日 ( 1 〜 366 ) */
	} DATE_TIM;

d_week は、 その年の1月1日の週を1とした場合の週の数を意味し、 d_days は、 その年の1月1日を1とした場合の日数を意味する。 また、d_month = 0 は、 特殊な意味として使用される。

1.9.2 データ/定数の定義

時計管理システムコールはすべて WORD 型の関数値をとり、 何らかのエラーがあった場合は「負」のエラーコードが戻る。 正常終了時には「0」が戻る。

□ 時間補正データ定義

typedef struct {
	W	adjust;		/* システム時間との時差(秒) */
	W	dst_flg;	/* DSTの適用タイプ */
	W	dst_adj;	/* DST調整時間(分) */
} TIMEZONE;

□ カレンダー日付時刻定義

typedef struct {
	W	d_year;		/* 1900年からのオフセット(85〜) */
	W	d_month;	/* 月 ( 1 〜 12, 0) */
	W	d_day;		/* 日 ( 1 〜 31 ) */
	W	d_hour;		/* 時 ( 0 〜 23 ) */
	W	d_min;		/* 分 ( 0 〜 59 ) */
	W	d_sec;		/* 秒 ( 0 〜 59 ) */
	W	d_week;		/* 週 ( 1 〜 54 ) */
	W	d_wday;		/* 曜日 ( 0 〜 6, 0が日曜) */
	W	d_days;		/* 日 ( 1 〜 366 ) */
} DATE_TIM;

1.9.3 システムコール

get_tim
 
システム時間の取得

【形式】

ERR get_tim(STIME* time, TIMEZONE* tz)

【パラメータ】

STIME*  time    システム時間の格納領域
                NULL  格納しない

TIMEZONE*  tz   時間補正データの格納領域
                NULL  格納しない

【リターン値】

=0  正常
<0  エラー(エラーコード)

【解説】

現在のシステム時間、および時間補正データを取り出す。

【エラーコード】

ER_ADR      : アドレス(time,tz)のアクセスは許されていない。
set_tim
 
システム時間の設定

【形式】

ERR set_tim(STIME time, TIMEZONE* tz)

【パラメータ】

STIME   time    設定するシステム時間
                ≦0   設定しない

TIMEZONE*  tz   設定する時間補正データ
                NULL  設定しない

【リターン値】

= 0  正常
< 0  エラー(エラーコード)

【解説】

現在のシステム時間、および時間補正データ設定する。

本システムコールの実行はユーザレベル 0 のプロセスのみ許可される。

【エラーコード】

ER_ACCES    : レベル 0 のユーザでない。
ER_ADR      : アドレス(tz)のアクセスは許されていない。
ER_PAR      : パラメータが不正である(tz の内容が範囲外)。
get_tod
 
日時の取得/変換

【形式】

ERR get_tod(DATE_TIM* dt, STIME time, Bool local)

【パラメータ】

DATE_TIM*  dt      変換した日時の格納領域

STIME      time    変換するシステム時間
                   ≦ 0  現在のシステム時間を変換

Bool       local   ローカル時間指定
                   = 0  GMT 時間
                         dt には時間補正を行わない結果を戻す。
                   ≠ 0  ローカル時間
                         dt には時間補正を行った結果を戻す。

【リターン値】

=0  正常
<0  エラー(エラーコード)

【解説】

指定したシステム時間または現在のシステム時間をカレンダー日付時刻に変換する。

【エラーコード】

ER_ADR  : アドレス(data_tim)のアクセスは許されていない。
set_tod
 
日時の設定/変換

【形式】

ERR set_tod(DATE_TIM* dt, STIME* time, Bool local)

【パラメータ】

DATE_TIM*  dt     設定 / 変換する日時

STIME*     time   変換したシステム時間の格納領域
                  NULL  現在のシステム時間として設定する
                        (ユーザレベル 0 のプロセスのみ許可)

Bool      local   ローカル時間指定
                  = 0  GMT 時間
                        dt は時間補正を行わない日時とみなす。
                  ≠ 0  ローカル時間
                        dt は時間補正を行った日時とみなす。

【リターン値】

=0    正常
<0    エラー(エラーコード)

【解説】

指定したカレンダー日付時刻をシステム時間に変換する。

指定した日時の内容のうち、d_week ( 週 ), d_wday ( 曜日 ) は無視される。 d_days ( 日数 ) の値は d_month = 0 のときのみ有効であり、 d_month ≠0 のときは無視される。

【エラーコード】

ER_ACCES    : レベル 0 のユーザでない(time=NULLの時)。
ER_ADR      : アドレス(tz)のアクセスは許されていない。
ER_PAR      : パラメータが不正である(dat_tim の内容が範囲外)。

この章の目次にもどる
前頁:1.8 デバイス管理にもどる
次頁:1.10 システム管理機能にすすむ