18.1.3. Ограничения, связанные со временем

18.1.3. Ограничения, связанные со временем

В 32-разрядных системах Linux, как и в большинстве систем Unix, переменная time_t является целым числом со знаком длиной 32 бита. Это означает, что в 10:14:07 вечера 18 января (четверг) 2038 года она переполнится. Поэтому время 10:14:08 вечера 18 января (четверг) 2038 года будет представлено как 3:45:52 вечера 13 декабря (пятница) 1901 года. Как видите, система Linux не проявляет "проблему 2000-го года" (поскольку используются собственные библиотеки времени), однако с ней связана "проблема 2038-го года".

На 64-разрядных платформах переменная time_t является соответственно 64-битовым числом со знаком. Это действительно эффективное решение, поскольку 64-битовое время со знаком можно назвать астрономическим.

Для того чтобы определить начальное время, текущее время, конечное время для используемой системы можно создать и запустить данную программу daytime.с.

 1: /* daytime.с */

 2:

 3: #include <stdio.h>

 4: #include <sys/time.h>

 5: #include <unistd.h>

 6:

 7: int main () {

 8:  struct timeval tv;

 9:  struct timezone tz;

10:  time_t now;

11:  /* beginning_of_time — это наименьшее значении, измеряемое time_t*/

12:  time_t beginning_of_time = 1L<<(sizeof(time_t)*8 - 1);

13:  /* end_of_time - это наибольшее значение, измеряемое time_t */

14:  time_t end_of_time = ~beginning_of_time;

15:

16:  printf("time_t имеет %d бит в длину ", sizeof(time_t) *8);

17:

18:  gettimeofday(&tv, &tz);

19:  now = tv.tv_sec;

20:  printf("Текущее время дня, представленное в виде структуры timeval: "

21:   "tv.tv_sec = 0x%08x, tv.tv_usec = 0x%08х "

22:   "tz.tz_minuteswest = 0x%08х, tz.tz_dsttime = 0x%08x ",

23:   tv.tv_sec, tv.tv_usec, tz.tz_minuteswest, tz.tz_dsttime);

24:

25:  printf("Демонстрация ctime()%s: ",

26:   sizeof(time_t)*8 <= 32 ? "" :

27:   " (может зависнуть после печати первой строки; нажмите "

28:   "Control-C)") ;

29:  printf("текущее время: %s", ctime(&now));

30:  printf("начало времени: %s", ctime(&beginning_of_time));

31:  printf("конец времени: %s", ctime(&end_of_time));

32:

33:  exit(0);

34: }

К сожалению, функция ctime() является итеративной по своей природе. Это означает, что она (при любых практических целях) никогда не прерывает свою работу в 64-разрядных системах даже для астрономических дат (вроде 64-битового времени начала и завершения). Если вы устали ждать, когда же программа завершит свою работу, нажмите Control-C для ее завершения.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

ОКНО ДИАЛОГА: Марк Шаттлворт: «Со временем весь софт будет свободным»

Из книги Журнал «Компьютерра» № 37 от 10 октября 2006 года автора Журнал «Компьютерра»

ОКНО ДИАЛОГА: Марк Шаттлворт: «Со временем весь софт будет свободным» Автор: Дмитрий ЛяховМарк Шаттлворт (Mark Shuttleworth) — фигура в мире высоких технологий необычная. Будучи отцом Ubuntu Linux, Марк известен прежде всего как второй космический турист, побывавший в космосе вслед за


8.2 СИСТЕМНЫЕ ОПЕРАЦИИ, СВЯЗАННЫЕ СО ВРЕМЕНЕМ

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

8.2 СИСТЕМНЫЕ ОПЕРАЦИИ, СВЯЗАННЫЕ СО ВРЕМЕНЕМ Существует несколько системных функций, имеющих отношение к времени протекания процесса: stime, time, times и alarm. Первые две имеют дело с глобальным системным временем, последние две — с временем выполнения отдельных


48 Связанные объекты

Из книги Человеческий фактор в программировании автора Константин Ларри Л

48 Связанные объекты Что делает тот или иной предмет легким для понимания? Что делает тот или иной предмет простым в использовании? Что превращает совокупность объектов — не отдельных, а представленных в определенном контексте — в набор рабочих инструментов? Возьмем


В ногу со временем Александр Бородин

Из книги Цифровой журнал «Компьютерра» № 6 [2.2.2010 — 9.2.2010] автора Журнал «Компьютерра»

В ногу со временем Александр Бородин Наш читатель Александр Бородин, проживающий в Оттаве (Канада), решил поделиться впечатлениями от взаимодействия с самой передовой издательской технологией. С ее помощью Александру удалось быстро и качественно издать собственную


В ногу со временем Александр Бородин

Из книги Цифровой журнал «Компьютерра» № 7 [9.2.2010 — 16.2.2010] автора Журнал «Компьютерра»

В ногу со временем Александр Бородин Наш читатель Александр Бородин, проживающий в Оттаве (Канада), решил поделиться впечатлениями от взаимодействия с самой передовой издательской технологией. С её помощью Александру удалось быстро и качественно издать собственную


Урок №2: Подготовить инструменты для управления временем

Из книги Практический курс по Тайм Менеджменту автора Абрамовский Иван

Урок №2: Подготовить инструменты для управления временем Подготовить Инструменты для управления временемВторое правило Управления временем гласит - держи голову пустой. Это значит что голова всегда должна быть свободна для новых мыслей, идей. Человек не должен


Урок №8: Правила управления временем

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Урок №8: Правила управления временем Правила Управления Временем1. Делать только главные задачи. (Главные это те что дают 80% результата)2. Держи голову пустой. (Всю информацию записывать на внешний носитель)3. Ежедневно просматривайте ваш список дел на сегодня4. Переносите


1.7.4 Связанные документы

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

1.7.4 Связанные документы Серия RFC не содержит спецификаций протоколов и была опубликована как отдельный набор документов For Your Information (FYI — К вашему сведению). Например: RFC 1325 Answers to commonly asked "new Internet user" questions (Ответы на наиболее распространенные вопросы новых пользователей


3.14.5 Сопоставление с датой и временем

Из книги Ководство автора Лебедев Артём Андреевич

3.14.5 Сопоставление с датой и временем Пусть надо выделить дату и время, записанные в формате mm/dd/yy hh:mm:ss. Вот первая попытка: datetime = /(dd)/(dd)/(dd) (dd): (dd): (dd)/.Но такой образец распознает некоторые некорректные даты и отвергает правильные. Следующий вариант более избирателен.


7.14. Манипулирование временем без даты

Из книги C++. Сборник рецептов автора Диггинс Кристофер

7.14. Манипулирование временем без даты Иногда нужно работать с временем дня в виде строки. На помощь снова приходит метод strftime. Можно «разбить» время на часы, минуты и секундыt = Time.nowputs t.strftime("%H:%M:%S") # Печатается 22:07:45А можно только на часы и минуты (прибавив 30 секунд, мы даже


§ 151. Со временем все портится

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

§ 151. Со временем все портится 10 октября 2008Автору совершенно очевидно, что со временем человечество работает все хуже и хуже (прогресс этому совершенно не мешает). Люди хотят затрачивать меньше сил и денег, получая все больше и больше взамен. То, что будет у людей через сто


5.3. Выполнение вычислений с датами и временем

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

5.3. Выполнение вычислений с датами и временем ПроблемаТребуется узнать количество времени, прошедшего между двумя точками даты/времени.РешениеЕсли обе временные точки находятся между 1970 и 2038 годами, то используйте тип time_t и функцию difftime, определенную в заголовочном


Функции работы со временем

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

Функции работы со временем Функция Краткое описание asctime преобразование времени из структуры (внутренней формы) в символьную строку ctime преобразование времени из длинного целого (long int) в строку символов gmtime преобразование времени из целого (int) в


12.3. Команды для работы с датой и временем

Из книги Разработка ядра Linux автора Лав Роберт

12.3. Команды для работы с датой и временем Время/дата и измерение интервалов времениdateКоманда date без параметров выводит дату и время на стандартное устройство вывода stdout. Она становится гораздо интереснее при использовании дополнительных ключей форматирования


Типы данных для работы с датой и временем

Из книги автора

Типы данных для работы с датой и временем В версиях 4.x и 5.x и 1-м диалекте 6.x присутствует только один тип данных - DATE, который позволяет хранить информацию о дате и времени суток. В 3-м диалекте существует 3 типа для работы с датой и временем - это тип TMESTAMP, хранящий информацию о


Глава 10 Таймеры и управление временем

Из книги автора

Глава 10 Таймеры и управление временем Отслеживание хода времени очень важно для ядра. Большое количество функций, которые выполняет ядро, управляются временем (time driven), в отличие от тех функций, которые выполняются по событиям[53] (event driven). Некоторые из этих функций