C Програмиране

Как да използвам функцията gettimeofday на език C?

Как да използвам функцията gettimeofday на език C?
The gettimeofday () функция получава времето на часовника на системата. Текущото време се изразява в изминали секунди и микросекунди от 00:00:00, 1 януари 1970 г. (Unix Epoch). В тази статия ще ви покажем как да използвате gettimeofday () функция в Linux. И така, нека започнем.

Синтаксис

int gettimeofday (struct timeval * tp, struct timezone * tz)

The gettimeofday () функцията е дефинирана в sys / време.з заглавен файл.

Аргументи

Тази функция взема два аргумента:

1ул аргументът сочи към timeval структура. The timeval структурата е декларирана, както е показано по - долу в sys / време.з заглавен файл:

struct timeval
time_t tv_sec; // използва се за секунди
suseconds_t tv_usec; // използва се за микросекунди

Структурата на структурата timeval представлява календарно време. Той има двама членове:

2nd аргументът сочи към часова зона структура. Обикновено трябва да бъде зададено на NULL, защото структурна часова зона е остаряла. Този аргумент е само за обратна съвместимост.

Връща стойности

При успех, gettimeofday () връщане 0, при неуспех функцията връща -1.

Лесно получаване на време и печат

#include
#include
int main ()
struct timeval current_time;
gettimeofday (& current_time, NULL);
printf ("секунди:% ld \ nмикро секунди:% ld",
текущо време.tv_sec, текущо_ време.tv_usec);
връщане 0;

Изход:

Тук, sys / време.з е включен за gettimeofday () функция и структура на времето. The gettimeofday () функция задава времето в timeval (current_time) член на структурата. tv_sec е интегралният брой секунди, изминали от началото на UNIX епоха, в полунощ UTC на 1 януари 1970 г. и tv_usec е допълнителен брой микросекунди, изминали от tv_sec. Ако стартирате програмата, трябва да видите резултата. Всеки път, когато стартирате програмата, изходът ще се промени.

NULL Аргумент Грешка

#include
#include
int main ()
 
struct timeval current_time;
gettimeofday (NULL, NULL);
връщане 0;

Изход:

В този пример е показан първият аргумент на gettimeofday () функцията не трябва да е NULL. Предупреждението за компилация ще дойде, ако първият аргумент е NULL.

Пример за форматиране на текущото време

#include
#include
#include
int main ()
struct timeval tv;
време_t t;
struct tm * информация;
char буфер [64];
 
gettimeofday (& tv, NULL);
t = tv.tv_sec;
info = localtime (& t);
printf ("% s", asctime (информация));
strftime (буфер, размер на буфер, "Днес е% A,% B% d.\ n ", информация);
printf ("% s", буфер);
strftime (буфер, размер на буфер, "Времето е% I:% M% p.\ n ", информация);
printf ("% s", буфер);
връщане 0;

Изход:

В този пример е показано как се отпечатва дата и час в различен формат. Не е много лесно да се представят дати от възвръщаемата стойност на gettimeofday () функция . Тук, местно време() и strftime () функции се използват, за да представят добре връщаната стойност на gettimeofday ().

The местно време() функция приема аргумент, който е препратка към указател на tv_sec сферата на struct timeval и връща препратка към указател на a struct tm обект.

The strftime () ще генерира персонализиран, форматиран низ, показващ датата и часа от struct tm указател. Спецификаторите на формата се използват за форматиран дисплей. Например низът за формат „% d-% m-% Y% H:% M:% S“ указва датата и часа в тази форма:

14-04-2020 13:09:42

Следват спецификаторите за преобразуване, които могат да се използват за форматиран дисплей:

Спецификатор Значение
% a Съкратеното име на делничния ден според настоящия локал.
% A Името на делничния ден според настоящия локал.
% b Име на съкратения месец според настоящия локал.
% Б Име на пълния месец според настоящия локал.
%° С Предпочитаното представяне на дата и час за настоящия локал.
Като десетично число за деня на месеца (диапазон 01 - 31).
% Н Използване на 24 часа (диапазон 00 - 23) до часа като десетично число.
% I Използване на 12 часа (диапазон 00 - 23) до часа като десетично число.
% j Като десетично число за деня на годината (диапазон 001-366).
% m Като десетично число за месеца (диапазон 01 - 12).
% М Десетичното число на минутата.
% p Въз основа на посочената стойност на времето, или 'am' или 'pm', или еквивалентните низове за текущия локал.
Десетичното число на секундата.
Предпочитано представяне на датата за текущия локал, но без време.
Предпочитано представяне на времето за текущия локал, но без дата.
% y Годината е десетична, но няма век (диапазон от 00 - 99).
% Y Годината е десетична, включително век.
% Z Часовата зона.

Използване на gettimeofday за измерване на времето за изпълнение на програмата

#include
#include
 
int main ()
 
struct timeval начало, край;
gettimeofday (& start, NULL);
 
за (int i = 0; i <1e5 ; i++)

 
gettimeofday (& end, NULL);
printf ("Времето, необходимо за отчитане до 10 ^ 5 е:% ld микро секунди \ n",
((край.tv_sec * 1000000 + край.tv_usec) -
(започнете.tv_sec * 1000000 + старт.tv_usec)));
връщане 0;

Изход:

Този пример показва как gettimeofday () функция може да се използва за изчисляване на времето за изпълнение на програма.

Заключение

По този начин gettimeofday () функция може да се използва в Linux. За пренасяне на съществуващ код, gettimeofday () функция може да се използва, но в нов код не трябва да се използва. clock_gettime ()  функция може да се използва вместо gettimeofday ().

Безплатни и игри с отворен код за разработване на Linux игри
Тази статия ще обхване списък с безплатни двигатели за игри с отворен код, които могат да се използват за разработване на 2D и 3D игри на Linux. Същес...
Урок Сянка на Tomb Raider за Linux
Shadow of the Tomb Raider е дванадесетото допълнение към поредицата Tomb Raider - франчайз за екшън-приключенска игра, създаден от Eidos Montreal. Игр...
Как да увеличите FPS в Linux?
FPS означава Кадри в секунда. Задачата на FPS е да измерва честотата на кадрите при възпроизвеждане на видео или игрални изпълнения. С прости думи бро...