パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

OpenBSD 5.5、2038年問題に対応」記事へのコメント

  • NetBSD は 6.0 から既に全 arch で 64bit time_t になっていますが、世の中、time_t = long 決め打ちとかなソースがまだまだあるので、それらについて対応していくという地道な作業が続きます。演算とか入出力とかも。time_t = 64bit という決め打ちも、まだそうなっていないOSがあるのでダメです。
    • まぁ主な問題は各種プロトコルやファイルフォーマットで 32bit な UNIX 時間が使われていることですね。

      --
      [Q][W][E][R][T][Y]
      親コメント
      • by Anonymous Coward
        ピコーン!いいこと考えた。
        ファイルのタイムスタンプを2秒単位で丸めて記録するようにすれば同じビット数で倍の期間使えるようになるぞ!
        • #ネタ元を知ってて言ってると理解していますが。

          一応解説するとFAT の修正時刻のタイムスタンプは2秒単位です。
          んでもって、いわゆる UNIX 時間ではありません。

          --
          [Q][W][E][R][T][Y]
          親コメント
        • by Anonymous Coward

          Windowsの標準機能でZip圧縮・展開して奇数秒が丸められても誰も気にしていないようだから、それほど荒唐無稽な話でもないんじゃね。
          # NTFS拡張レコードの記録に対応した圧縮ツールを使っても、Windowsの標準機能で展開すると拡張レコードは無視されるので、やっぱり奇数秒は丸められる。

        • time_t の実態が 32bit の符号付き整数であるにも関わらず
          内部では符号なし実数として扱っているのでした。

          ((~ (time_t) 0) (time_t) 0) = 1
          0x80000000 = 2038-01-19 03:14:08 UTC
          0xFFFFFFFFF = 2106-02-06 06:28:15 UTC

      • by Anonymous Coward

        バイナリファイルでバイナリ形式で、日付保存していたらバイナリファイルのフォーマットから見直しが必要で悲惨

        下手にコンパイルし直すと読み込むバイナリがずれて、プログラムが暴走しかねない

      • by Anonymous Coward

        time_t が long なシステムが多いようですが、
        これをunsigned longに直すだけで、あと70年近く先送りできると思うのですが…>32ビットunix
        たとえファイルにバイナリで埋め込まれていてもそのまま対応できるし。
        まあ一部ソースでtime_tが符号付きだと思い込んで大小比較してるようなやつは修正の必要がありますが、C言語規格でもtime_tをunsignedにしてはいけないみたいなことは書いてないので、それはそもそもそのソースが規格外ということで。

    • by Anonymous Coward
      また、64ビット化したところで根本解決ではなく2922億年問題へと問題を先送りしただけじゃないか、という話かと一瞬思った。
      • by Anonymous Coward

        その問題は弥勒菩薩様がなんとかしてくださるはず。

    • >time_t = 64bit
      「コンパイル エラー:
       修正候補: ステートメントの最後」

      by VBA

      • by Anonymous Coward

        おもしろいつもりなのか?

身近な人の偉大さは半減する -- あるアレゲ人

処理中...