時間 - みる会図書館


検索対象: 月刊 C MAGAZINE 1990年7月号
51件見つかりました。

1. 月刊 C MAGAZINE 1990年7月号

ン■イ int tm hour ・ int tm mday int tm mon ・ int tm_year ・ int tm wday i nt tm_yday int tm isdst ・ なし 時 ( 0 ー 23 ) 日 ( ト 31 ) 月 ( 0 ー 11 ) 1900 年からの年数 日曜日からの日数 ( 0 ー 6 ) 1 月 1 日からの日数 ( 0 ー 365 ) 夏時間設定用のフラグ ・エラー * 注意 GMT 値は , グリニッジ標準時 1970 年 1 月 1 日 0 時 0 分 0 秒から経過した秒数が格 納されている。 1980 年 1 月 1 日以前の場合には loca は ime 関数は NULL を返す CMS-C Ve 「 . 5.1 ] ・用ラ去 time t mktime( struct tm * timeptr ) く time. h 〉 #include ■機能要約地方時間を GMT 値に変換する mktime() ・引数 struct tm { int tm sec int tm min ・ int tm hour ・ int tm mday i nt tm mon ・ int tm_year ・ int tm wday int tm_yday ; int tm isdst ・ 時間 / 日付の構造体 秒 ( 0 ー 59 ) 分 ( 0 ー 59 ) 時 ( 0 ー 23 ) 日 ( 0 ー 31 ) 月 ( ト ll) 1900 年からの年数 日曜日からの日数 ( 0 ー 6 ) 1 月 1 日からの日数 ( 0-365 ) 夏時間用のフラグ stime() [TurboC Ve 「 . 2.0 ] ー機能要約現在の時刻を設定する #include く time . h 〉 ・用法 int stime( time t *tp ) ・ ■引数 GMT からの経過秒数 ■戻り値成功した場合は 0 を返す time() ■機能要約 GMT からの経過を秒数で返す #include く time. h> ・用ラ去 time t time( time t *timeptr ) ・引数時間を格納する場所 ■戻り値経過した秒数 ■工ラー N ULL tzset( ) ー機能要約 3 つのグローバル変数に各値を格納する #include く time . h 〉 ・用法 void tzset( void ) ・ ・戻り値なし ■工ラーなし * 注意以下のグローバル変数に格納される } *timeptr tm 構造体へのポインタ CMS—C Ve 「 . 5.1 ] * 注意バッフアは少なくとも 8 バイトと終端レヾイトが必要 ■引数日付を格納するバッファ ■用法 char * strdate( char * date ) く time . h 〉 #include ■機能要約現在の日付を文字列に変換する —strdate() * 注意引数が 1980 年 1 月 1 日以前の場合には , mktime ( ) 関数は一 1 を返す ・戻り値変換された GMT 値 [MS-C Ve 「 . 5.1 ] * 注意バッフアは最低 8 バイトと終端 1 バイトが必要 ・エラーなし ・戻り値 char * : time へのポインタ ( 時間の形式は hh : mrn :ss) ■引数 char *time : 時刻を表す文字列 ・用ラ去 char * strtime( char *time ) く time. h 〉 #include ■機能要約現在の時刻を文字列に変換する —strtime() timezone daylight tznameC0] tzname[ 1 ] utime() GMT との時差 ( 秒 ) TZ 設定において夏時間調整ゾーンを指定したときには 0 以 外 TZ 設定からの 3 文字の文字列の値 夏時間調整の文字列。 TZ 設定が夏時間調整ゾーンを省略の 場合はから文字列となる CMS-C Ve 「 . 5.1 ] ■機能要約書き込み可能なファイルの変更日時をセット #include く sys%types. h 〉 く sys%utime. h 〉 ・用ラ去 int utime( char * path, struct utimbuf * times ) ■引数ファイルのバスネーム 格納された時間値を示すポインタ struct utimbuf { time t actime : アクセス時間 time t m ; 変史時間 } *times ・ ■戻り値正常終了 0 ■工ラー ー 1 , e 「「 no に次の値をセット EACCES OMFILE ENOENT EINVAL バス名がディレクトリまたは読み込み専用ファイル オープンしているファイルの数が多すぎる ファイルまたはパスが見つからない 引数が正しくない C プログラマのためのランタイムライプラリ入門 門 83

2. 月刊 C MAGAZINE 1990年7月号

リ . 4 ラタ乙 イラ たのて , それも合わせて見てほしい。グリ ニッジ標準時 ( 以後 GMT ) が基本単位になっ ており , その値がいろいろと変更されるこ とて必要な時間を得ることがてきる。 TZ 変数と tzset( ) 関数 時間に関する環境変数に TZ というのがあ る。これはタイムゾーンを定義してあるも のて , これを使って地方時間と GMT の差を 算出する。算出された時間は , daylight, timezone, tzname の各グローノヾル変数に格 納される。通常 , TZ 変数は SET コマンドて 登録するか , putenv() 関数を使用して環 境変数に登録しておかなくてはいけない 環境変数に登録された TZ から GMT との違 いを各変数に格納するには , tzset() 関数 を使用する。この tzset( ) 関数は , Turbo C Ver. 2. O,MS-C Ver. 5.1 いずれにもサポー トされており , サンプルプログラムは , tzset() 関数を使用したいちばん簡単な例 てある (tzset. c) 。 TZ 変数に格納される値には , いくっかの 決まった方式がある。 tzset() 関数て使用 している例を取り上げてみると「 TZ = EST5 PDT 」となっている。最初の 3 文字てある EST は , 現在の時間帯を指している文字列てあ る。そして真ん中の数字は , 現在の時間帯 と GMT との差を示している。つまり , 5 な ら GMT から東に向かって 5 時間のところを EST とし , 8 なら PST となる。もし , ー 1 なら ョーロッパ大陸ということになる。 最後の 3 文字は , 省略可能な地方時間の夏 時間を指している。ちなみに , PDT とは , Pacific Daylight Savings Time の意味て あり , 太平洋夏時間のことてある。 もし , この TZ 環境変数が登録されていな ければ , デフォルト値として ,MS-C Ver. 5.1 ては「 TZ=PST8PDT 」が採用され , Turbo C Ver. 2.0 ては「 TZ = EST5EDT 」が採用され ることになっている。 Fig. 1 各関数どうし関係 stime( ) ※ MS-DOS の システム日時 time_t GMT ( 1 月 1 日 , 1970 ) からの秒数 ctime( localtime( ) gmtime( ) strut tm GMT 各フィールドに値を入れる asctime( 1 2 : 1 2 : 12 \ n \ 0 Tue May 1 strut tm 地方時間 各フィールドに値を入れる asctime( ) mktime( ド struct timeb ftime( ) -strdate( ド 05 / 01 / 09 \ 0 -strtime( ド 1 2 : 1 2 : 12 \ 0 * MS-C だけ ※ Tu 「 böだけ C プログラマのためのランタイムライプラリ入門 79

3. 月刊 C MAGAZINE 1990年7月号

ランタイムライプラリー覧表 4 ランタイムライプラリー覧表 4 asctime ( ) ・機能要約日付および時間を ASC 文字列に変換する #include く time. h 〉 ・用ラ去 char *asctime( time ) struct tm * ti me ■引数 tm 構造体の内容は以下のとおりである int tm m day i nt tm wday ー 1 const struct tm int tm int tm int tm i nt tm i nt tm sec mln hour ・ mon year ・ 秒 ( 0 ー 59 ) 分 ( 0 ー 59 ) 時 ( 0 ー 23 ) 日 ( 1 ー 31 ) 月 ( 0 ー 11 ) 1900 年からの年数 日曜日からの日数 ( 0 ー 6 ) 1 月 1 日からの日数 ( 0 ー 365 ) 夏時間設定用のフラグ #include く time. h 〉 ・用法 double difftime( time t time2, time t timel ) ・戻り値 timel から time2 までの経過時間 ■工ラーなし * 注意 MS-C ve 「 . 5.1 では , 実行結果の表示に doub 厄のキャストを行う必要がある ftime() ■機能要約現在の時間を構造体にストアする #include く sys%types. h 〉 く sys%timeb. h 〉 ・用ラ去 void ftime( struct timeb * timeptr ) i nt tm_yday i nt tm isdst ・ ー引数 struct timeb { millitim ・ ti mezone dstfl ag GMT ( 1970 年 1 月 1 日 0 時 0 分 0 秒 ) から経過した秒数 1 秒以下をミリ秒で格納 地方時間と GMT との差を , 西回りの分単位で表現 夏時間調整が地方時に有効な場合は 0 以外の値 } tm *time ・ asctime ( ) 関数が返す文字列は tm 構造体に収められている , 値を文字列にす Mon Jan 02 02 : 03 : 55 1980 \ n \ 0 にその参考書式を示す * 注意 asctime によって得られる文字列は長さが 26 文字で , 24 時間表示である。以下 なし ・エラー ・戻り値変換された文字列への先頭アドレス clock() る ・機能要約この関数を起動したプロセスの実行に要したプロセッサ時間を得る } * timeptr ー戻り値なし ■工ラーなし * 注意 timezone フィールドは , グローバル変数 timezone から算出され , dstflg フィー ルドは , グローバル変数 day ⅱ ght から算出される gmtime() ■機能要約指定した時刻を tm 構造体に変換する #include く time. h> ・用ラ去 struct tm * gmtime( const time t * time ) ■引数時刻を格納した先頭アドレスへのポインタ #include く time. h> ・用法 clock t clock( void ) ・ ・戻り値プロセッサの秒数 ・エラー計測したプロセッサ時間が無効であるとき ctime() ・機能要約 time t 型の時刻を文字列に変換する #include く time . h 〉 ■用ラ去 char * ctime( const time t * time ) ■引数時刻を保持するバッフアへのポインタ ■戻り値変換された文字列の先頭ポインタ ・エラー 1980 年以前の日付が指定されていたときは , ・戻り値 struct tm* { int tm sec ・ int tm min : int tm hour ・ int tm mday int tm mon int tm_year ・ int tm wday int tm_yday int tm isdst ・ ーエラーなし 秒 ( 0 ー 59 ) 分 ( 0 ー 59 ) 時 ( 0 ー 23 ) 日 ( 1 ー 31 ) 月 ( 0 ー 11 ) 1900 年からの年数 日曜日からの日数 ( 0 ー 6 ) 1 月 1 日からの日数 ( 0 ー 365 ) 夏時間設定用のフラグ NULL が返る * 注意 t 面 e 関数で得られた time t 型の時問を以下のような 26 個の文字列 る。 asctime ( ) 関数とは異なっている。関数どうしの関係図を参照 Tue May 01 12 : 12 : 12 1990 \ n \ 0 difftime() ・機能要約時問の差を計算する こ変換す * 注意引数 time に 1980 年 1 月 1 日以前を指定した場合は NULL を返す localtime() ・機能要約 GMT から地方時問に直して tm 構造体に格納する #include く time. h> ■用ラ去 struct tm * localtime( const time t * time ) ・引数 GMT 値へのポインタ ■戻り値 struct tm* { int tm sec ・ int tm min ・ 秒 ( 0 ー 59 ) 分 ( 0-59 ) 82 CMAGAZINE 19 7

4. 月刊 C MAGAZINE 1990年7月号

サンプルプログラムを見てほしい (ftime. c)o このプログラムて、注意すべきは , 夏時 間の設定を確認することて、あろう。 gmtime() 関数 この関数は , time ( ) 関数によって返され た値を引数に与えると , tm 型の構造体に変 換する。 tm 構造体は , time. h に定義されて おり , 格納される値は GMT て、ある。 tm 構造 体は MS-C Ver. 5.1 も TurboC Ver. 2.0 も ともにまったく同じ構造体て、ある (Fig. 3 ) 。 この関数を使ったサンプルプログラムを 見てほしい ( gmt. c ) 。このプログラムは , GMT を求めるものて、ある。 time ( ) 関数によって返された値を tm 構造 体の gm time に引き渡している。その結果 , 構造体の各フィールドの値を参照すること て、 GMT 値を得ることがて、きる。 localtime() 関数 この関数は , time ( ) 関数によって得られ た値をこの関数に引き渡すと , 地方時間を 得ることがてきる。もちろん夏時間の考慮 もされている。引き渡される値を格納する 構造体は , tm 構造体と同じてある。この関 数の戻り値は , 格納してある構造体の先頭 を示すポインタアドレスて、ある。基本的に は , GMT の取得と同じて、ある。 サンプルプログラムを見てほしい ( 10Ca1. c) 。 time( ) 関数によって得られた値を c 引 time ( ) 関数に引き渡し , その値を asctime() 関数を使用して表示可能な文 字列にしている。 mktime( ) 関数 この関数は , MS-C Ver. 5.1 にしかサポ ートされていない関数て、 , おもな処理内容 は地方時間を GMT からの経過時間として秒 数に変換する。これは ca 忱 ime ( ) 関数の 反対の作業に等しい サンプルプログラム ( mktime. c ) て、は , GMT 値から asctime() 関数に引き渡して 地方時間の文字列を作成している。それに 対し , mktime ( ) 関数を使用して地方時間 値を GMT 値に戻し GMT 値から直接 ctime ( ) 関数を使用して文字列の作成を行 っている。これは , 結果的に同じになるは ずてある。 =trdate( ) 関数 この関数は , 現在の日付を取得して MM / DD / YY の形式に変換する機能をもってい る。なお , この関数には戻り値はない の関数は MS ー C Ver. 5.1 のみにサポートさ れている関数て、ある ( sdate. c ) 。 -strtime() 関数 この数は , 現在の時間を取得して HH : MM : SS の形式に変換する機能をもってい る。なお , この関数には戻り値はない の関数も MS-C Ver. 5.1 のみにサポートさ れている関数て、ある (stime. c)o stime() 関数 この関数は , GMT からの経過時間を引数 にすることて、 , 日時を設定する。もし , 成 功すれば 0 が返され , 失敗すれば日時の変更 は行われない サンプルプログラム ( sstime. c ) の中て、 , dostounix( ) 関数を使用しているが , れは日時の DOS 形式を UNIX 形式に変換す ラタ乙 イラ 門 る機能をもっている。この関数の実行後は , 正常に動作されているかどうかを必ず確認 してほしい この関数を実行すると GMT から現在まて、 の経過時間をトータル秒数て、引数に格納し てくれる。 utime() 関数 この関数は , 指定されたファイルを , 指 定した日時て、更新する機能をもっている。 もし , 指定日時が NULL なら , 現在時間が 指定される。なお , この関数は MS ー C Ver. 5.1 のみにサポートされている関数て、あ る (utime. c) 。 最後に , 日時が正しいかどうかを調べる サンプルプログラムを紹介しよう (vdate. c) 。これはいたって簡単なプログラムて、あ る。この中てヨ eapyea 「 ( ) 関数が使われて いるが , これはうるう年を調べる関数てあ る。ちなみに , うるう年てあるためには , 4 て割り切れかっ 100 て、割り切れない , ある いは 400 て割り切れる必要がある。 time() 関数 C プログラマのためのランタイムライプラリ入門 81

5. 月刊 C MAGAZINE 1990年7月号

かを見るために使用する。有効てない場合 は 0 , 有効な場合は非 0 に設定される。 ・ millitm このフィールドは , されている。 返される値は , double の秒値て、返される。 実際には , サンプルプログラムを見てほし い (diff. c) 。 clock( ) 関数 c ck ( ) 関数は , プログラムの開始から ftime( ) 関数 の経過を示すプロセッサ時間を返すのて、 , ふたつのイベント間を測定するのに非常に 便利てある。この関数の実行により返され この関数は , 現在時刻を ftime ( ) 関数の引 ・ time このフィールドは , GMT からの経過時間を 数が指し示す timeb 構造体に設定する。この る値は , 秒単位のプロセッサ時間と CLK 秒値て、格納される。 構造体は , timeb. h (YsysYtimeb. h) に登録 TCK マクロ ( time. h て定義 ) の積が返され されており , 内容を見てみると 4 つのフィー る。したがって , 実際に必要なプロセッサ ルドから構成されている ( Fig. 2 ) 。 ・ timezone 時間を求めるには , CLK TCK マクロて、割 このフィールドは , GMT と地方時間との差 以下に , この構造体の各フィールドを説 らねばならない。もし , 無効な値の場合は , を分単位て格納する。この値は GMT から西 明する。 1 の値が返される。 に向かって計測され , その反対はマイナス サンプルプログラムを見てほしい (clk. 符号をつけて表現する。なお , この値は , c ) 。このプログラムて、は , sta 「 t と end という ・ dstfag このフィールドには , 夏時間が有効力 フ グローバル変数 timezone から取り出されて 変数の間に 2000 回のループを行っているに すぎないが , 実際にはこの間にいろいろな 処理をさせるとよいだろう。最後には , Fig. 2 timeb 構造体の内容 START と END の差を CLK TCK マクロて、 Turbo C Ve 「 . 2.0 割ってからカウントした回数を表示して終 了している。 st 「 uct timeb ミリ秒単位の値が格納 MS-C Ver. 5.1 struct timeb long time; ShO 「 t millitm, short timezone; short dstflag , time-t unsigned short millitm; short timezone; dstflag , short time, ctime( ) 関数 この関数は , time ( ) 関数によって返され た time t 型の値を引数に取り込んて , 決まっ た書式の文字列て日時の表示を行う機能が ある。決まった書式というのは , 以下のと おりてある。 Tue May 01 12 : 12 : 12 1990 \ n \ 0 表示時間は 24 時間表記になっており , の文字列の最後には改行コードと文字列の 終端を示す NULL 文字がついている。全部 て 26 文字となる。 difftime( ) 関数 この関数は , time t 型の時間について , そ の差を算出する関数てある。計算の結果 , Fig. 3 tm 構造体の内容 MS-C V5. I&TurboC V2.0 も time. h から引用 * / struct tm / * seconds afte 「 the minute— LO, 59 ] int tm-sec; / * minutes after the hou 「一〔 0 , 59 ] int tm_min ; / * hours since midnight— [ 0 , 23 ] int tm-hour; / * dayofthemonth— CI , 31 ] int tm-mday, / * months since January— [ 0 , 1 1 ] int tm_mon; / * years since 1900 int tm-year, / * days since Sunday— LO, 6 ] int tm-wday; / * days since January 1 ー [ 0 , 365 ] int tm-yday, int tm-isdst , / * daylight savings time flag 80 CMAGAZINE 19 7

6. 月刊 C MAGAZINE 1990年7月号

読者稿プロこ、ラ乙 TSR によるマンデレプロ 藤本比呂 はしめに (Turbo C や QuickC ならば数値演算コプロセ なんといっても最高速コンパイラ MS-C るのてすが・・・・・・ない知恵をしばるしかない ロお絵書き専用にもう 1 台など , 打つ手はあ 値演算コプロセッサ , あるいはマンデルプ お金があれば , 32 ビットの高速の CPU と数 これはなんとかしなければなりません。 ードディスクの音は意外にうるさいてす て夜どおし音をたてているのてす ( とくにハ 物てあります。これが , 6 畳 2 間のアパート 4.0 。妻に頼みこんて去年やっとそろえた宝 Ver. 3.3 , MS-C Ver . 5.1 , MIFES Ver . 私のシステムは PC ー 9801RX4 , MS-DOS 面描くのに一昼夜かかりました。ちなみに かります。初めに作ったプログラムて、は 1 画 ところが , この計算にはとても時間がか んてきます。 スイッチを入れて , ビポーと音がすると飛 ロ , マンデルプロと騒ぎ出し , パソコンの 2 歳になる娘が丸いものを見るとマンデルプ プロの本など買ってきて読んているうちに かりとりつかれてしまいました。マンデル るというのはとても不思議な体験て , すっ ていくと , いくらても新しい図が現れてく も立たないという代物てすが , 図を拡大し るらしく , 私のような素人にはなんの役に 楽しめます。数学的には何か深い意味があ 描画するとなんとも奇妙な模様がててきて 繰り返し計算の結果をパソコンの画面上に をよくご存じだと思いますが , この単純な のて , みなさんマンデルプロ集合というの パソコン雑誌てときどき紹介されている ッサが買えていた ) の特徴を生かしてくふう しよう。そう思って , オプションをいろい -G2 80286 命令使用 -Ox 最大限の最適化 ろ調べていると , どうやら , 稿した TSRMAN3< す。 せる。このアイデアを実現したのが今回投 き , 起こしてやってマンデルプロを計算さ て仕事をする。こちらが CPU を使わないと ているが , ひとたび起こされると動き出し リに残っていて , 普段は何もしないて眠っ プログラムが終了しても , コードがメモ 型プログラム ) てす。 調べて , 最後にたどりついたのが TSR ( 常駐 。そこて , いろいろ OS を買うのてすが・・・ も出ません。お金があればマルチタスクの プロがパソコンを占領している間 , 手も足 ます。この 1 時間がもったいない。マンデル ところが , こうなると人間 , 欲が出てき 1 時間から 2 時間程度になりました。 間が短縮され , 1 画面の描画にかかる時間が てしまいましたが ) 。これてずいぶん計算時 らしました ( 絵のディテールはかなり失われ ち切り回数を , 当初の 1000 回から 50 回に減 また , マンデルプロの繰り返し計算の打 ロ描画速度より速くなりました ) 。 コン雑誌に出ていた power C のマンデルプ を使うのがよいらしい ( 以上の設定て某パソ from Compiler Makers 」に出ていた ) ( ー FPa は本誌 ' 90 年 1 月号「 lnformation -FPa 代替数値演算ライプラリの使用 プログラムは , 1 プログラム 操イ枋法 マンデルプロ計算プログラム ( 常駐型 ) tsrman3. exe 結果描画プログラム drawman3. exe のふたって、 1 セットてす。 2 入力テータ 入力は , 標準入力てすが , 2 本のプログラ ムて同じ入力をしてやる必要があるため , あらかじめファイルを作っておきます。 データは , ・結果を保存しておくためのファイルのバ ス名 ・マンデルプロ計算の範囲 (X min, y_min, X max, y max) ・計算のステップ数 ( 画素数 ) (x step, y step) の 7 つのデータを空白または改行て区切りま す。 計算の範囲としては , X rnln = y_mln = X max= y_max= とすると , マンデルプロ集合の全体像が得 られます。このひょうたん型の境界のとこ ろを拡大すると , さまざまな模様が楽しめ ます ( 「別冊サイエンス」 82 , 「コンピュータ ーレクリエーション I 」 ( 日経サイエンス ) に景 勝地の座標が出ています ) 。 計算のステップ数は 100 または 400 にしま す ( 400X400 て PC ー 9801 の画面いつばいにな ります。 100 x 100 てだいたいのあたりをつ けて , おもしろそうな絵がかけそうな場合 に 400 x 400 にするとよいてしよう。画素数 が多いとそれだけ計算時間がかかります ) 。 Conference Room 139

7. 月刊 C MAGAZINE 1990年7月号

時間に関する関数 C プログラマのための ランイプラリ 入門 秋津彰文 / 第 4 回 今回は , システムクロックやタイムスタンプなど , 時間を管理するため の関数を紹介する。時間の管理の形式には , MS-DOS 独自の時間形 式や LJN ー X 互換の形式かあり , これらをサポートするための関数かラ イプラリに用意されている。ただしこれらの関数は多少複雑にからみ あっているし , 時刻にしても , グリニッジ標準時と地方標準時の関係か あり , 名前や機能が似ている場合かあるので , 注意か必要だろう。 今回は , 時間 ( あるいはタイマ ) に関する 算などをプログラミングするときに使用す 逆に今回の連載て、いくっか調べたことの なかて、意外だったのは , うるう年の算出や 関数について説明する。 ると , 意外にめんどうなことをよく実感す 時間はシステムが起動されたときからカ zeller の方式 ( 日時から曜日を算出するアル る。 ウントされるが , ある一定期間 , 電源を切 ゴリズム ) など , 時間に関する機能が豊富に MS ー DOS て、いちばん気になるのが , ファ っていても内蔵の電池によってタイマ自身 サポートされていることだった。 イルの新規作成時間と史新時間て、あろう。 以下に , MS ー C Ver. 5.1 と Turbo C は動作している。そのため , 一度設定した たとえば , MS-DOS が最初から時間をまち 時間と日時は , 変更するまて変わることは Ver. 2.0 , および UNIX と ANSI との互換性 がえていたときは , 変更する機能やコマン まても含めた一覧表を掲示する (Tbl. 1 ) 。時 ドが MS ー DOS にはサポートされていないの 間に関する関数は , 相互関係が非常に深い。 このタイマ機能を利用して , ちょっと手 て困ることがある。最近てはそのためのツ の込んだ時間表示を行いたいとか , 日数計 わかりやすくするために図 (Fig. 1 ) を作成し ールをよく見かけるようになった。 TbI.1 ランタイムライプラリの比較 MS-C Ve 「 . 5.1 TurboC Ve 「 .2.0 asctime clock ctime diffitime ftime gmtime localtime 日時を ASC 日文字列に変換する プロセスが費やした CPU タイムを得る time t 型から文字列へ変換する time t 型の日時の差を計算する 現在の日時を得る time t 型から tm 型へ変換する (GMT) time t 型から tm 型へ変換する ( 地方時間 ) tm 型から time t 型へ変換する mm / dd / yy 型の形式で現在日付を得る hh : mm : ss 型の形式で現在時間を得る システム日時の設定を行う 1970 年 1 月 1 日 0 時 0 分 0 秒からの経過時間 3 つのグローバル変数に割り当てる ファイルの変更日時を設定する asctime clock ctime difftime ftime gmtime localtime mktime stddate stnme time utime stime time tzset tzset 78 CMAGAZINE 1 7

8. 月刊 C MAGAZINE 1990年7月号

ライフボート 0 「 m 面 00 (ompiler 「 5 Lattice C ポインタになっています。環境変 イプラリは , この変数を参照して , Lattice C 数は , Fig. 1 のような形式て入って 80X87 がついていれば , 80X87 用の グローバル変数 ライプラリを呼び出しています。 環境変数の追加および削除は , NDP が 0 のときは , 80X87 なし , 0 以 ① - STACK それぞれ関数 getenv( ) , rmvenv( ) 外のときは , 80X87 ありを示してい スタックの大きさを指定します。 よって行うことがてき , それぞれ , ます。 スタックには , 関数が呼び出さ この変数 en ⅵ「 on を変更しています ⑦ - PSP れたときの戻り番地や , 自動変数 ( ListI の使用例を参照 ) 。 (static や extern のキーワードなし 標準時間に対応する名称 ( 3 文 プログラムセグメントプレフィ ④ e 「「 no に , 関数内て、定義された変数 ) が割 字)てす。関数 tzset( ) て、初期化され ックス (PSP) へのポインタて、す。 り当てられます。したがって , 多 MS ー DOS て、発生したエラーを示 PSP については , MS-DOS のマニ ます。 量の自動変数を定義している場合 すェラー番号を , UNIX のエラー番 ュアルや参考書を参照してくださ ⑩ daylight には , STACK に , 必要なスタック 号に変換して代入されます。プロ の大きさを指定しておかないと , 標準時間に対応する名称 ( 3 文 グラムスタート時には 0 に初期化さ 一般に , PSP を書き換えたりす 実行時にスタックオーパフローが れますが , その後 , 工ラーが発生 字 ) て、す。関数 tzset ( ) て、初期化され ることはしないほうがいいて、しよ しても , ライプラリて、 , 0 に設定し 起きます。 ます。 直されることはありません。 ⑧ timezone @tzdtn ② - DOS 関数 pe 「「 0 「は , e 「「 no に基づい MS-DOS のバージョン番号が入 て , 対応するエラーメッセージを 夏時間に対応する名称 ( 3 文字 ) グリニッジ標準時との時間差を て、す。関数 tzset( ) て、初期化されま っています。プログラマは , この 表示します。 秒て、表したものて、す。関数 tzset() 変数を参照することて , DOS のバ て、初期化されます。 す。 ⑤ - MODEL ージョンを調べることがてきます。 ⑨ tzname ⑩ - XMODE DOS の第 1 バイトには , DOS の メモリモデルに対応した番号が , メジャーバージョン ( ヒ。リオドより 入ります。プログラムて、 , メモリ 実行モードが , リアルモードか , タイムソ・一ン名て、す。関数 tzset ( ) 前の番号 ) が , 第 2 バイトには , マ モデルをチェックすることがて、き プロテクトモードかを表していま て、初期化されます。 イナーバージョン ( ヒ。リオドより後 す。対応は Tbl.2 のとおりてす。 ます。 ⑩ tzstn メモリモデルと番号の対応は , ろの番号 ) が入っています。 TbI. 1 のようになっています。 ③ environ TbI.2 ⑥ -NDP -XMODE 環境変数へのポインタてす。変 0 数 en ⅵ「 on を参照することて , 現在 80X87 数値演算プロセッサが , 実 1 定義されている , 環境変数を調べ 行中のマシンについているかどう 2 ることがてきます。最後は , NULL かを示します。浮動小数点演算ラ Fig. 1 環境変数へのポインタの配列 TbI. 1 メモリモテルと番号の対応 メモリモデル - MODEL 0 1 2 3 モード リアルモード (MS-DOS) リアルモード ( OS / 2 の DOS 互換ボックス ) プロテクトモード ( OS / 2 ) environ の使用例 List 1 .COM/PEC=command.com "PATH=a:*bin;a:*red;a:*1c" ” RED=a:*red ” envlron extern Char **environ; char **p; for(p = environ; *p; p 十十 ) { printf("YnYtXs",*p); / * すべての環境変数を表示する * / NULL(O) lnformation from Compiler Makers 153

9. 月刊 C MAGAZINE 1990年7月号

Ohl 禧を 凵 - 冂 ン ト コ ノ・ス・ PERSONAL COMPUTER MAGAZINE マガジン コンピュータ時代を読むトレンド・マガジン MAGAZINE JAPANESE E 引 ON ソフ H ( ンク 月刊 情報処理試験 の 雑誌か勢揃い 報なる C プログラマーをめざすひとに〃 C 言語学習ソフト コンピュータ技術者必携 第 2 種・第 1 種・特種受験 MAGAZINE UNIX 学習ソフト 旧 A 「ソフトウェア (UNIX) 」 UN Ⅸシステムの基本機能をコマンドを通じて理解し、 UN Ⅸシステム上でプログラミングができるようになるこ とを目的とした学習ソフトで魂 第 1 章 マイクロコンピュータ用 OS す、 ぃ 第 2 章 UN Ⅸシステムの概要 第 3 章 システムの起動 第 4 章 ファイルシステムとその内部構造 第 5 章 シェルの使い方とコマンド IPA CAROL ℃」は、 C 言語を文法知識、プログラミング演習の両面から学習でき ファイルの編集 第 6 章 るソフトです。これから C を使う方、 C 言語らしいスタイルの華麗なプログラミングをめ 第 7 章 UN Ⅸの基本的なコマンド 文章の作成・処理・出力 第 8 章 ざす方むきのものです。 UN Ⅸシステムでのプログラム作り 第 9 章 C プログラマは、ポインタのポインタ、ポインタのポインタのポインタなどを自由に使 第 10 章 UN Ⅸシステムの導入と運用 いこなし、関数のポインタ呼び出しを活用し、リスト構造を使いこなし、そのうえ分か 標準学習時間 : 60 時間 適応機種 : PC ー 9801 シリーズ りやすくデバッグしやれ、プログラムを組むことが要求されます。 MS-DOS Ve 「 2.11 このソフトの学習内容は、入門編、基礎編、応用編に分かれ、 c 言語の文法全体 格 : 98 , 000 円 ( 消費税別 ) 価 を包括しています。また、内蔵の C シミュレータで与えられた問題を実行し、動作を確 C 言語関連書籍 認することで発見的学習を導くよう工夫されています。 標準学習時間 : 入門編 13 時間、基礎編 27 時間、応用編 30 時間 適応機種 : PC -9801 シリーズ C の基礎文法を豊富な例題で解説した入門書の決定 MS-DOS Ve 「 2.11 以上 B5 判 240 頁 2 , 060 円 版。 価 格 : 98 , 000 円 ( 消費税別 ) ( 消費税込み ) 〒 164 東京都中野区中野 5 ー 62 ー 1 お問い合わせ先 CAROL インフォメー シ・ヨン 株式会社 S 00 TEL ( 03 ) 319 ー 6991 FAX ( 03 ) 319 ー 6823 これは、一で学習した文字をソートするプログラムです . このプログラムのソート部分を震数化してください . ハⅢの内 ! 優禁数・ 4 「ⅱ・日 00 1 IPAØQDL [ 0 & Ln 「 C 」 興数の弓数はインタの配見物ーに 書 二二ロ 資料請求は、氏名・お動め先の名称・所属・住所・電 話番号を明記し資料請求券とともに郵送または FAX でお願い致します。「 C 」のサンプル版をお送り致しま / 、・を す。

10. 月刊 C MAGAZINE 1990年7月号

行き詰まるしかあるまい たったひとりが がんばって , 完了を遅らせることが簡単に て、きてしまう。 標準化のプロセスて、は全員の賛成を取り つけることに多大な力を注いて、いる。した がって , 反対者は , 全体に対して重大な責 務を負っている。何を変更すれば賛成て、き るかをて、きるかぎり明確に表明しなければ ならない。それから , 約束を破ってはなら ない。多数派が反対者の変更に賛成したら 反対者は降参しなければならない。このよ うなとき , 反対者は「それて、けっこうて、す。 しかし・・・・・」と , 新たな問題をもちだして はいけない もっとも , これだけて、は完了を確約する に十分な機構とはいえない。 このプロセス て、は , ときどきはガンコ者も容認しなけれ ばならない。多数派が受け入れ不可能な変 更を誰かがいいはっても , 議事進行が可能 て、なければならない。この場合 , 多数派は 正規の手続きを踏んだことを ( 利害関係のな い第三者に対して ) 表明する重い責務を負っ ている。少数派の視点は公の場て、公表され るべきて、ある。 わたしのコンセンサスの , ロ語的な定義 は次のようになる。、、全員が賛成すること〃 これがベストだ。あるいは , 、、賛成した多数 派は反対した少数派が不快 ( 訳注 : dis agreeable ここて、はなかなか賛成しない人 と不愉快な人の両方を意味している ) て、ある ことにも同意すること〃 最終的にコンセンサスを必要とするなら , 邪悪な政治の効力を消滅させることになる。 正義の政治は正しく機能する。そして , 誰 もが判断を下すための具体的なドキュメン トをもち , そのすばらしき日にむかって標 準を推し進めることになる。最終的にて、き たものが気に入れば些細な戦術は忘れてし まう。「悟りの政治」て、もべターだ。コンセ ンサスの光に参加者全員のバラの輝きが加 わる。 しかし , 邪悪な政治は将来に禍根を残す。 承認への詰めの段階て、は , 威圧的な多数派 と策をろうする少数派の両者に大きな負い 目がある。全会一致の支持を取りつけるか , さもなければ取りつけられなかったことを 弁護するのに苦労するに違いない。発言権 を悪用しようとする連中に立ち向かわなけ ればならない X3J11 の発足当時は , 私たちは力不足て、ロ バートのルールを十分に使いきれなかった。 理解が進むにつれ , 何人かが手段として使 い始めたが , その使い方が正しくなかった。 当時の議事録は , 修正動議に対する修正動 議などナンセンスなものばかりだ。しかし , いまや私たち全員が理解を深められるよう になった。 初期のころに策をろうして得た勝利はす べて , 犠牲が大きすぎることが明らかにな った。長期間彼らの良識 ( とコンセンサス ) を勝ち取らんとするならば , 無理強いはだ めだ。私にとって興味ある発見は , その勝 利が、、正しい〃かどうかさえ問題にならな ことだ。しばしば次回かその次の会議て、 い は , ある投票に関して技術的なメリットに 賛同した。しかし , もしなんらかの形て、投 票に不正があると , いっかはわからないが おそらくひっくり返ることになる。 新しいアイデアが一人前になるには , 必 ず時間がかかることを学んだ。参加者にじ っくりと考えさせてどうなるか追跡してみ よう。宿題にして次の会議まて、 , 同療とデ イスカッションしてもらう。そして , ある アイデアに違和感がなくなったときに本当 のコンセンサスの準備が整う。これは政治 だ ( なんらかの形容詞を読者て、つけてほし い ) 。 正義と邪悪の狭間で フラストレーションいつばいのこの時期 , 私はこのような基本理念にしがみついてい る。 ANSI のレベルて、は , 私は心から本当の コンセンサスを形成て、きたと信じている。 X3J11 もそう考えている。上位委員会て、ある X3 もそうだ。そして ANSI が決定を下すと きがきた。 遅れにイライラしてはいるが , ( 重苦しい ) 意見の不一致を避けるための当局者全員の このうえない努力を誇りに思ってもいる。 現在の反対者はたったひとりだ。彼の意見 に賛成した者は誰ひとりいなかった。した がって , 彼を除く全員が彼を不愉快な人間 と考えているという自信を深めた。 ISO 戦線に関してはいくつか思うところが ある。後から加わったヨーロッパ人には同 情て、きる。私たち経験のある者とは違い 彼らにはコンセンサスを作り上げる時間は なかった。彼らは私たちの終結したいとい う希望をたんに疲れたからだと誤解してい る。たしかに疲れていることにまちがいな い。仕事はすんだとも考えている。自分が 完全には参加しなかった会議における論議 について問題を提起するような人間が , 後 からいろいろいうのはやめてもらいたい ( そ れが正しいか正しくないかは別にして ) 。 X3J11 が現在の C 標準の威力をもって ISO 内部の少数派に圧力をかけようとすれば , ISO のほかのメンバに対してそのことをアヒ。 ールする機会はいくらて、もある。強制力の ある「 Normative Addenda 」を作成するだけ て、十分だ。他方 , 少数派がよい標準の採択 をプロックしていたら , 遅らせる以上のこ とはなにもて、きない。ついにはコンセンサ ス作成のプロセスがまかりとおることにな どちらが現実かを把握するには , 私はこ の問題に深くかかわりすぎている。私にと っての正義の政治はほかの人にとっては邪 悪の政治かもしれない。その逆もある。プ ロセスがいつかまとまると信じて辛抱する ことが大事だ。 Programming on PurPOSe 17