Похоже, что тема конца света в последнее время стала едва ли не самой популярной. Видимо, человечество уже смирилось с самим фактом этого события, осознавая всю тяжесть накопленных за тысячелетия грехов, и остается только определиться с датой, привыкая постепенно к самой мысли о неизбежном.
Кто только не пытался определиться и предсказать дату второго пришествия. С большим напряжением мы пережили встречу 2000 года, ожидая, что вот теперь-то точно разверзнутся хляби небесные. Ан нет, пронесло... У-фффф... Да так расслабились, что почти незаметно прошла ошибка 29 февраля 2000 года, о которой стало известно большинству только когда она, собственно, появилась.
Что же еще нам готовит технический прогресс, за победу которого мы так давно и усиленно боремся? А вот что...
Как, может быть, не всем еще известно, время в языке программирования С, на котором написана известная операционная система UNIX (значение ее невозможно сегодня переоценить, ведь Интернет, в первую очередь, - сеть компьютеров, работающих под управлением UNIX) и все ее модификации, задается типом данных time_t, который является не чем иным, как знаковым длинным целым типом (long int), о чем можно удостовериться, заглянув в /usr/include/bits/types.h и найти определение типа __time_t, из которого потом в time.h и рождается тип time_t. Что же представляют из себя переменные типа time_t, определяющие текущее время? А это не что иное, как количество секунд, прошедшее с 0 часов 0 минут 1 января 1970 года. Не знаю уж, что произошло в тот год, что от него начал отсчет календарь нашей компьютерной эры, но количество этих секунд, как нам бы этого и не хотелось, неизменно увеличивается. Уже сегодня их количество перевалило за 980 миллионов! Вы, наверное, уже догадались, к чему я клоню? Именно. Максимальное значение, которое может представить вышеозначенный тип данных времени, равняется 2,147,483,648 (256 x 256 x 256 x 256 / 2). Несложные расчеты показывают, что переполнение разрядной сетки произойдет на восьмой секунде 14-й минуты 4-го часа 19-го дня января 2038 года. Что произойдет в этот момент - одному, наверное, изобретателю UNIX известно, но, по всей видимости, ничего хорошего не произойдет.
Тут явно присутствует и тайна магических чисел, как, например, событие сие произойдет спустя 18 дней и 3 часа после начала 2038 года - числа, которые издревле внушали страх всем христианам (3 раза прибавить друг к другу 6 получится 18, вспомним 666 - число зверя). Но эту проблему, как и тот факт, что ошибка 2038 выпадает на день крещения Христова по календарю православной конфессии, оставим на рассмотрение и толкование нумерологам от теологии.
Наша же задача, как говорится, знать нашего клопа (а враг программиста - клоп) в лицо, и желательно заранее.
А может, в моих выкладках не все так страшно? Может, и не доживем мы до этой ошибки, вследствие какой-нибудь более ранней и более грозной?
Специально для
"Компьютерных Вестей",
Дмитрий БОРЕЙЧУК,
программист,
[email protected]
![Версия для печати Версия для печати](https://www.kv.by/sites/all/modules/print/icons/print_icon.png)
Горячие темы