電子書籍の厳選無料作品が豊富!

UNIX系システムで2038年問題ってありますよね。
要はカウンタのオーバーフローが問題なわけですが、
このカウンタは32bitの符号ありですよね。
なぜ符合「あり」のカウンタにしたんでしょうか?

A 回答 (2件)

当初のUNIXの設計としては、


・基本のデータ型が「32bit符号付整数」だった
・時刻値に、わざわざ符号無し整数という特殊なデータ型にするメリットを見いだせなかった(設計当時は、2038年にオーバーフローするのをそれほど問題視していなかった)
からでしょう。

UNIXを元にした「標準C言語ライブラリ」の「time関数」では、
1970年を起点とした時刻を返すため、32bit符号付整数の場合は2038年にオーバーフローするわけですが
このtime関数は「エラーの時-1を返す」ことで、エラー値と正しい時刻値を区別するようになってますので、
単純に「時刻は符号無し整数」に変更することはできません。
無駄が多いですが、符号付として意味がある仕様になってます。

まあ、先見の明がなかったと言ってしまえばそれまでですが、
それを言うと、ファイルサイズなんかも元々は32bitで、2GB超のファイルの取り扱いができないという問題もありました。
時刻だけの問題ではありません。

また、最近のUNIX系システムでは、32bit系でも、
時刻型(time_t)は64bitにしてますので、それを適切に扱えば、
2038年にオーバーフローすることはありません。
「time_tを32bitとして処理するようなプログラムをそのまま動かし続ける」場合のみ問題になります。

逆に、2038年問題はUNIX系システムだけの問題ではありません。
上述の通り、この時刻は「C言語の標準仕様」として定められていますので、
その仕様に基づいて作られたようなプログラムであれば、
time_t が32bitのシステムであったり、64bitのシステムでもアプリケーション側で32bitで扱ってたりすると、
UNIX以外でも2038年問題が発生します。
    • good
    • 0
この回答へのお礼

詳しいご回答ありがとうございます。
符号あり というのは意味があったんですね。

先見の明なしといえばY2K問題もそうだったですね。
7990年後に10000年問題は起きるんでしょうか?

お礼日時:2010/03/14 14:10

PDP-11の実装の問題だからじゃないのかなぁ、32bitの実装が特殊とか。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!