6 पॉइंट द्वारा xguru 2021-12-30 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 2038-01-09 3:14:07 UTC के बाद 32-bit time_t ओवरफ्लो हो जाता है

  • Linux kernel ने कुछ साल पहले आंतरिक रूप से इसे 64-bit में बदल दिया था, और Alpine ने 3.13 से time_t को 64-bit में बदल दिया

  • GNU glibc ने 2.34 से 64-bit time_t का समर्थन शुरू तो किया, लेकिन इसका तरीका तकनीकी रूप से पूरी तरह संतोषजनक नहीं है

  • musl या अन्य UNIX C library implementations में नए code में time_t हमेशा 64-bit होता है, और पुराने 32-bit code के लिए compatibility stubs दिए जाते हैं

→ यानी समय के साथ यह अपने-आप Y2038 compatible हो जाता है

  • Microsoft ने msvcrt में इससे एक कदम आगे जाकर डिफ़ॉल्ट रूप से 64-bit time_t का उपयोग किया, और _USE_32BIT_TIME_T macro इस्तेमाल करने पर पुराने 32-bit functions तक पहुंच मिलती है

  • GNU glibc ठीक ऊपर के दोनों तरीकों के उलट तरीका अपनाता है

→ इसे इस्तेमाल करने के लिए -D_TIME_BITS=64 को स्पष्ट रूप से निर्दिष्ट करना पड़ता है

→ हो सकता है कभी इसका डिफ़ॉल्ट बदल जाए, लेकिन अब तक ऐसा बिल्कुल नहीं हुआ है

⇨ इसी तरह 2GiB से बड़ी files को handle करने के लिए ज़रूरी -D_FILE_OFFSET_BITS=64 भी अभी तक स्पष्ट रूप से देना पड़ता है

→ साथ ही 32-bit systems पर -D_TIME_BITS=64 के साथ build नहीं किया जा सकता (यानी Y2038 compatibility संभव नहीं है)

1 टिप्पणियां

 
xguru 2021-12-30

अभी लगभग 16 साल बचे हैं, लेकिन Linux ऐसे उपकरणों में भी बहुत इस्तेमाल होता है जिन्हें लंबे समय तक बदला नहीं जाता..