Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » _time_ Работа с астрономическим временем. Отсчёт интервалов времени.

_time_ Работа с астрономическим временем. Отсчёт интервалов времени. (Мини-учебник с ejudge = Чернокнижка)

PDF-файл _time_ Работа с астрономическим временем. Отсчёт интервалов времени. (Мини-учебник с ejudge = Чернокнижка) Практика расчётов на ПЭВМ (37193): Книга - 3 семестр_time_ Работа с астрономическим временем. Отсчёт интервалов времени. (Мини-учебник с ejudge = Чернокнижка) - PDF (37193) - СтудИзба2019-05-08СтудИзба

Описание файла

Файл "_time_ Работа с астрономическим временем. Отсчёт интервалов времени." внутри архива находится в папке "Мини-учебник с ejudge = Чернокнижка". PDF-файл из архива "Мини-учебник с ejudge = Чернокнижка", который расположен в категории "". Всё это находится в предмете "практика расчётов на пэвм" из 3 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст из PDF

1Работа с календарным временем и интервалами времениВ данном разделе рассматриваются функции работы с календарным временем и интервалами времени в операционных системах, удовлетворяющих стандарту POSIX.1.1 Работа с календарным временем (ANSI C)Типы данныхКалендарное время включает в себя год, месяц, день месяца и текущее время суток.

Дляхранения календарного времени используется тип time_t. В POSIX-системах календарноевремя хранится как количество секунд, прошедшее от «начала эпохи», причём для простотысчитается, что каждый 4-й год всегда високосный. Эпоха началась (для UNIX) в полночь 1января 1970 г. по Гринвичу. Время отсчитывается по часовому поясу Гринвичского меридианабез перехода на летнее время (так называемое «Универсальное координированное время»UTC — Coordinated Universal Time).В настоящее время в POSIX-системах тип time_t эквивалентен типу long.

Диапазоназначений типа long (32 бита) достаточно для представления дат, лежащих в отрезке длинойпримерно 136 лет. Поскольку отрицательные числа используются для представления дат до1970 года, переполнение текущего представления типа time_t может произойти в 2038 году,если, конечно, до этого момента представление не будет изменено.Для более удобного представления календарного времени используется тип struct tm,определённый следующим образом.struct tm{intintintintintintintintint};tm_sec;tm_min;tm_hour;tm_mday;tm_mon;tm_year;tm_wday;tm_yday;tm_isdst;/*/*/*/*/*/*/*/*/*секунды [0-60] */минуты [0-59] */час [0-23] */день месяца [1-31] */месяц [0-11], 0 = январь */число лет от 1900 г */день недели [0-6], 0 = воскр.

*/день года [0-365] */летнее время */Поле tm_sec обычно хранит значения в интервале от 0 до 59, но может хранить и 60, когдадля коррекции времени в календарь вставляется дополнительная секунда.Поле tm_year хранит год, отсчитываемый от 1900 года, то есть, например, значение 100в поле tm_year означает 2000 год.Поле tm_wday хранит день недели, отсчитываемый от воскресенья (значение 0) и до субботы (значение 6).Поле tm_isdst хранит информацию о том, действует ли в описываемый момент летнее время. Этот флаг больше нуля, если летнее время действует, нуль, если летнее время недействует, и отрицателен, если информация о действии летнего времени отсутствует.Оба описанных выше типа определены в заголовочном файле <time.h>, определённомстандартом ANSI C, то есть должны присутствовать в любой достаточно современной систе1ме программирования на Си. Стандарт ANSI не определяет внутреннее представление длятипа time_t.ФункцииВ стандарте ANSI C также определяется набор функций для манипулирования с календарным временем.

Прототипы этих функций определены в заголовочном файле <time.h>.Функция time позволяет получить текущее системное календарное время. Функция имеет следующий прототип:time_t time(time_t *pval);Функция возвращает текущее календарное время. Кроме того, если указатель pval ненулевой, функция записывает текущее время по указанному адресу.Функции localtime, gmtime преобразовывают дату из секундного представленияtime_t в структурное представление struct tm. Они имеют следующие прототипы:struct tm *gmtime(const time_t *timep);struct tm *localtime(const time_t *timep);extern char *tzname[2];long int timezone;Функция gmtime конвертирует календарное время timep в развёрнутое структурное представление, выражающее универсальное координированное время (UTC), т.

е. время Гринвичского меридиана без перехода на летнее время. Функция возвращает указатель на статическую область памяти, которая переписывается при каждом вызове функций работы с календарным временем. Поэтому при необходимости эту структуру нужно скопировать в другоеместо.Функция localtime конвертирует календарное время timep в развёрнутое структурное представление в определённом пользователем или системой часовом поясе. Функцияустанавливает переменную tzname в имя текущего часового пояса (tzname[0] — имя часового пояса зимнего времени, tzname[1] — имя часового пояса летнего времени), переменную timezone в разницу в секундах между поясным временем и универсальным координированным временем (UTC).

Функция возвращает указатель на статическую областьпамяти, которая переписывается при каждом вызове функций работы с календарным временем. Поэтому при необходимости эту структуру нужно скопировать в другое место.Функция mktime конвертирует календарное время местного часового пояса в развёрнутом структурном формате в секундное представление. Функция имеет следующий прототип:time_t mktime(struct tm *timeptr);Функция игнорирует содержимое полей tm_wday, tm_yday, tm_isdst и перевычисляетих, используя оставшиеся поля структуры.

Если значение какого-либо поля структуры находится за пределами допустимых значений, оно нормализуется, например, 40 октября становится 9 ноября. Вызов mktime заполняет переменную tzname информацией о местномчасовом поясе. Если заданное структурное представление не может быть преобразовано впосекундное представление, функция возвращает значение (time_t)(-1) и не изменяетзначения полей tm_wday и tm_yday.Функции ctime и asctime конвертируют календарное время в символьную строку.

Ониимеют следующие прототипы:2char *asctime(const struct tm *timeptr);char *ctime(const time_t *timep);Функция ctime преобразует календарное время timep в строку вида"Tue Nov7 11:32:11 2000\n"Дни недели сокращаются до ‘Sun’, ‘Mon’, ‘Tue’, ‘Wed’, ‘Thu’, ‘Fri’, ‘Sat’. Имя месяца сокращается до ‘Jan’, ‘Feb’, ‘Mar’, ‘Apr’, ‘May’, ‘Jun’, ‘Jul’, ‘Aug’, ‘Sep’, ‘Oct’, ‘Nov’, ‘Dec’.

Возвращаемое значение указывает на статическую область памяти, которая переписывается привызовах функций ctime и asctime. Функция заполняет переменную tzname информацией о местном часовом поясе.Функция asctime преобразовывает развёрнутое структурное представление timeptrв строку того же самого формата, что функция ctime. Возвращаемое значение указывает на статическую область памяти, которая переписывается при вызовах функций ctime иasctime. Функция заполняет переменную tzname информацией о местном часовом поясе.Функция strftime позволяет получать строковое представление времени согласно заданной форматной строке. Прототип следующий:size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);Функция форматирует время в развёрнутом структурном представлении tm в соответствиисо спецификацией формата format и помещает результат в символьный массив s размераmax.Обычные символы копируются из форматной строки в строку s без преобразования.Спецификаторы формата начинаются со знака ’%’ и приведены в таблице.Функция возвращает количество символов, записанных в массив s, не считая последнего символа ’\0’ (то есть, длину строки s), при условии, что длина получившейся строки sменьше max.

В противном случае функция возвращает 0, а содержимое массива s не определено.Пример программы#include <time.h>#include <stdio.h>#define SIZE 256intmain (void){charbuffer[SIZE];time_tcurtime;struct tm *loctime;/* Get the current time. */curtime = time(NULL);/* Convert it to local time representation. */loctime = localtime(&curtime);3сокращённое имя дня недели (например, Tue)полное имя дня недели (например, Tuesday)сокращённое имя месяца (например, Nov)полное имя месяца (например, November)дата и время (например, Nov 7 11:32:11 2000)день месяца (например, 07)час в 24-часовой шкале (от 00 до 23)час в 12-часовой шкале (от 01 до 12)день года (от 001)месяц года (от 01)минуты в часе (00–59)индикатор AM/PMсекунды в минуте (00–59)неделя (считая от воскресенья) в году (от 00)день недели (0 — воскресенье)неделя (считая от понедельника) в году (от 00)дата (например, Nov 7 2000)время (например, 11:32:11)год в веке (00-99)год (например, 2000)имя часового пояса (если определено) (например, MSK)символ %%a%A%b%B%c%d%H%I%j%m%M%p%S%U%w%W%x%X%y%Y%Z%%Таблица 1: Спецификаторы формата функции strftime/* Print out the date and time in the standard format.

*/fputs(asctime(loctime), stdout);/* Print it out in a nice format. */strftime(buffer, SIZE, "Today is %A, %B %d.\n", loctime);fputs(buffer, stdout);strftime(buffer, SIZE, "The time is %I:%M %p.\n", loctime);fputs(buffer, stdout);return 0;}1.2 Дополнительные функции POSIXФункции, описанные в предыдущем разделе, позволяют получать время с точностью досекунды. Часто требуется получить время с более высокой точностью.

Для этого стандартPOSIX определяет дополнительные функции.Функция gettimeofday описана следующим образом.#include <sys/time.h>#include <unistd.h>int gettimeofday(struct timeval *tv, struct timezone *tz);Тип struct timeval определён следующим образом.4#include <sys/time.h>struct timeval{long tv_sec;long tv_usec;};/* секунды *//* микросекунды */Второй аргумент этой функции не должен использоваться, он должен иметь значениеNULL. Функция заполняет поле tv_sec структуры tv текущим календарным временем, аполе tv_usec микросекундами в секунде.

Функция возвращает 0 при успешном завершении и -1 при ошибке. В этом случае переменная errno содержит код ошибки (единственнаяпричина возможной ошибки — недопустимый адрес tv).1.3 Приостановка выполнения программыФункции, описываемые в данном разделе, позволяют приостановить выполнение программы на заданный промежуток времени. Функции завершают работу в двух ситуациях:либо истечёт промежуток времени, либо процессу поступит сигнал, который процесс не игнорирует.Функция sleep позволяет приостановить выполнение программы на заданное количество секунд.#include <unistd.h>unsigned int sleep(unsigned int seconds);Выполнение программы приостанавливается на указанное количество секунд.

Выполнениепрограммы продолжится, когда либо истечёт указанный интервал времени, либо в программупоступит неигнорируемый сигнал. Функция возвращает количество секунд, оставшееся доистечения интервала времени (0, если интервал времени истёк).Функция sleep может использовать в своей работе сигнал SIGALRM, поэтому не рекомендуется смешивать вызовы alarm() и sleep().Функция usleep позволяет приостановить выполнение программы на заданное количество микросекунд.#include <unistd.h>void usleep(unsigned long usec);Функция usleep может реализовываться через системный вызов nanosleep (см. ниже).

Обсуждение использования этих функции находится ниже.Системный вызов nanosleep приостанавливает выполнение программы по крайней мере на интервал времени req.#include <time.h>int nanosleep(const struct timespec *req,struct timespec *rem);Структура timespec используется для задания интервалов времени с наносекундной(10−9 ) точностью. Структура определена в файле <time.h> следующим образом.5struct timespec{time_t tv_sec;longtv_nsec;};/* секунды *//* наносекунды */Значение поля tv_nsec должно лежать в пределах 0–999 999 999.nanosleep приостанавливает выполнение программы по крайней мере на время, заданное в *req. Функция может завершиться раньше, если процесс получил неигнорируемыйсигнал.

В этом случае функция возвращает -1, устанавливает переменную errno в значение EINTR и записывает оставшееся время в структуру, на которую указывает rem, еслиrem не равен NULL. Значение *rem может быть использовано для вызова nanosleep длязавершения паузы.В отличие от sleep и usleep, nanosleep не использует никаких сигналов, стандартизован POSIX, позволяет задавать время с большей точностью и позволяет легко продолжитьпаузу после прерывания от сигнала.Для отсчёта времени система использует свой внутренний таймер, имеющий на некоторых машинах (например, i386) частоту 100 Гц, а на других машинах — 1000 Гц. Частота таймера определяется константой HZ, определённой в файле <time.h>.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
427
Средний доход
с одного платного файла
Обучение Подробнее