Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

TERM=xterm

HOSTTYPE=i386

PATH=/usr/local/bin:/bin:/usr/bin:

HOME=/usr/neil

LS_OPTIONS=-N --color=tty -T 0

SHELL=/bin/bash

OSTYPE=Linux

...

Как это работает

Для вывода всего окружения программа в цикле обращается к переменной

environ
— массиву нуль-терминированных строк.

Время и дата

Программе часто полезно иметь возможность определить время и дату. Возможно, она хочет зарегистрировать длительность собственного выполнения или ей нужно изменять свое поведение в определенные моменты времени. Например, игра может отказываться запускаться в рабочие часы или программа резервного копирования по расписанию хочет дождаться ранних часов, прежде чем начать резервное копирование в автоматическом режиме.

Примечание

Во всех системах UNIX применяется одна и та же точка отсчета времени и дат: полночь по Гринвичу (GMT) на 1 января 1970 г. Это "начало эпохи UNIX", и ОС Linux — не исключение. Время в системе Linux измеряется в секундах, начиная с этого момента времени. Такой способ обработки аналогичен принятому в системе MS-DOS за исключением того, что эпоха MS-DOS началась в 1980 г. В других системах применяют точки отсчета иных эпох.

Время задается с помощью типа

time_t
. Это целочисленный тип, достаточный для хранения дат и времени в секундах. В Linux-подобных системах это тип
long integer
(длинное целое), определенный вместе с функциями, предназначенными для обработки значений времени, в заголовочном файле time.h.

Примечание

Не думайте, что для хранения времени достаточно 32 битов. В системах UNIX и Linux, использующих 32-разрядный тип

time_t
, временное значение "будет превышено" в 2038 г. Мы надеемся, что к тому времени системы перейдут на тип
time_t
, содержащий более 32 битов. Недавнее широкое внедрение 64-разрядных процессоров превращает это практически в неизбежность.

#include <time.h>

time_t time(time_t *tloc);

Вы можете найти низкоуровневое значение времени, вызвав функцию

time
, которая вернет количество секунд с начала эпохи (упражнение 4.6). Она также запишет возвращаемое значение по адресу памяти, на который указывает параметр
tloc
, если он — непустой указатель.

Упражнение 4. Функция
time

Далее для демонстрации функции time приведена простая программа envtime.c.

#include <time.h>

#include <stdio.h>

#include <unistd.h>

#include <stdlib.h>

int main {

 int i;

 time_t the_time;

 for (i = 1; i <= 10; i++) {

the_time = time((time_t *)0);

printf("The time is %ld\n", the_time);

sleep(2);

 }

 exit(0);

}

Когда вы запустите программу, она будет выводить низкоуровневое значение времени каждые 2 секунды в течение 20 секунд.

$ ./anytime

The time is 1179643852

The time is 1179643854

The time is 1179643856

The time is 1179643858

The time is 1179643860

The time is 1179643862

The time is 1179643864

The time is 1179643866

The time is 1179643868

The time is 1179643870

Как это работает

Программа вызывает функцию

time
с пустым указателем в качестве аргумента, которая возвращает время и дату как количество секунд. Программа засыпает на две секунды и повторяет вызов time в целом 10 раз.

Использование времени и даты в виде количества секунд, прошедших с начала 1970 г., может быть полезно для измерения длительности чего-либо. Вы сможете сосчитать простую разность значений, полученных из двух вызовов функции

time
. Однако комитет, разрабатывавший стандарт языка ISO/ANSI С, в своих решениях не указал, что тип
time_t
будет применяться для определения произвольных интервалов времени в секундах, поэтому была придумана функция
difftime
, которая вычисляет разность в секундах между двумя значениями типа
time_t
и возвращает ее как величину типа
double
:

#include <time.h>

double difftime(time_t time1, time_t time2);

Функция

difftime
вычисляет разницу между двумя временными значениями и возвращает величину, эквивалентную выражению
время1–время2
,
как число с плавающей точкой. В ОС Linux значение, возвращаемое функцией
time
, — это количество секунд, которое может обрабатываться, но для максимальной переносимости следует применять функцию
difftime
.

  • Читать дальше
  • 1
  • ...
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: