UNIX の time(2) システム コール はtime_t time(time_t *t);
、戻り値と参照渡しの 2 つの方法で現在の時刻を返します。この冗長性の合理的な理由は何ですか? なぜそれを定義しないのtime_t time(void);
ですか?
1 に答える
int
古代の歴史ですが、これはおそらく long が 2 つの 16 ビット値によってタンデムでシミュレートされた時期に関連しています。そうでなければ、本当の明白な理由はありません。興味深いことに、UNIX™ 7th Edition マニュアルtime
には廃止された文書が記載されています。
名前
time, ftime – 日付と時刻を取得する
あらすじ
long time(0)
long time(tloc)
long *tloc;
#include <sys/types.h>
#include <sys/timeb.h>
ftime(tp)
struct timeb *tp;
説明
Time は、1970 年 1 月 1 日 00:00:00 GMT からの時間を秒単位で返します。tlocが null でない場合、戻り値もtlocが指す場所に格納されます。ftime エントリは、次のように定義されているように、引数が指す構造体を埋めます
<sys/timeb.h>
。/* * Structure returned by ftime system call */ struct timeb { time_t time; unsigned short millitm; short timezone; short dstflag; };
この構造体には、エポックからの経過時間 (秒単位)、最大 1000 ミリ秒のより正確な間隔、ローカル タイムゾーン (グリニッジから西への分単位で測定)、およびゼロ以外の場合は夏時間がローカルに適用されることを示すフラグが含まれます。年の適切な時期に。
関連項目
date(1)、stime(2)、ctime(3)
アセンブラ
(ftime = 35.) sys ftime; bufptr (time = 13.; obsolete call) sys time (time since 1970 in r0-r1)
「廃止された呼び出し」という指定に注意し、戻り値が 2 つの (16 ビット) レジスタr0とr1にあることに注意してください。