渡された引数が常にNULLの場合、time_t time(time_t *t)
関数はエラーを返すことはできますか?time(NULL)が失敗を返すことはありますか?
コールがtime(NULL)
の場合、戻り値を確認する必要がありますか?
文書化されている唯一のエラーコードは、ポインタが無効であることに関連するEFAULTです。
渡された引数が常にNULLの場合、time_t time(time_t *t)
関数はエラーを返すことはできますか?time(NULL)が失敗を返すことはありますか?
コールがtime(NULL)
の場合、戻り値を確認する必要がありますか?
文書化されている唯一のエラーコードは、ポインタが無効であることに関連するEFAULTです。
はい。エポックは、time_t型のオブジェクトに収まらないので
[EOVERFLOW]秒数:
時間()関数は次の場合に失敗することがあります
time
は文書が場合失敗する可能性があります。
出典:http://pubs.opengroup.org/onlinepubs/9699919799/functions/time.html
が、これは約22年で、やいなや、およびない64ビットシステムまたは64ビットtime_t
を利用、32ビットのもので、実際に起こらないことを期待しています。
また、任意のの存在はかが例を失敗する可能性が不合格ならない彼らの存在は、深刻な品質の-実装欠陥だろうけれどもまた、実装定義のエラーが可能になります。
EFAULT
は、プログラムに未定義の動作がある場合にのみ発生するため、問題のない/存在しません。
これにもかかわらず、現実世界ではtime
は実際には失敗しません。
(POSIX劣化モードの機能を考慮していない)
ユニットは、独立したシステム上でオフにしたとき、基本となるリアルタイムクロックサブシステムは、クロック・インテグリティ(バッテリー)の損失のようなハードウェア障害を持っていた場合、リターン確かにtime()
の値は(time_t) -1
になります。その場合、それはtime_t*
で渡されたものは何の違いもありません。
私はRHEL、SLES、UBTUをチェックしました。 time_t time(time_t *t)
機能がこれまでに返すことができます元の質問に
Q0を行く、とにかく
time() returns the time since the Epoch (00:00:00 UTC, January 1, 1970), measured in seconds.
If t is non-NULL, the return value is also stored in the memory pointed to by t.
:man 2 pageは同じ(関連する)ものを生み出します渡された引数が常にNULLの場合は失敗しますか?
Q1:呼び出しは時間(NULL)の場合、我々はまだ、戻り値をチェックする必要がありますか?
Q2:のみ文書エラー・コードは、ポインタが無効であることに関係する、EFAULT
あります。
NULL
を渡していると言ったように、問題はありません。 C規格で"カレンダー時間が使用できない" 場合は、time()
は(time_t)(-1)
を返すことができます。たとえば、1999年の標準では、7.23.2.4節、パラ3に記載されています。
この文言は具体的ではありませんが、エラー状態を示すことをお勧めします。恐らく実装はシステムクロックにアクセスできない場合、(time_t)(-1)
を返す可能性があります。
Rの答えはposix仕様の場合について説明しています。
昔、VMSでは、システムクロックは現地時間であった。遅くまで、OSがタイムゾーンをサポートしたときまで、time()は常に-1を返しました。 – richardb
@ user3159253いくつかのジャンク値に対して、 'time((time_t *)junk)'の場合はEFAULTを返すことができます。 EFAULTを返すことができる時点で、私はすでにプログラムの動作が失われたと考えています。 – user2864740
* some *ジャンク品です。問題は疑問に思えますが、私は弁護士に餌をあげましょう。 – user2864740
@ user3159253よく知られていることとは何の関係もありませんが(他の意味の中でも非常に現実的な選択でした)それは機能契約に成文化されていればどんな価値(**)であってもかまいませんでした。 – user2864740