Синтаксис
int gettimeofday (struct timeval * tp, struct timezone * tz)The gettimeofday () функцията е дефинирана в sys / време.з заглавен файл.
Аргументи
Тази функция взема два аргумента:
1ул аргументът сочи към timeval структура. The timeval структурата е декларирана, както е показано по - долу в sys / време.з заглавен файл:
struct timevaltime_t tv_sec; // използва се за секунди
suseconds_t tv_usec; // използва се за микросекунди
Структурата на структурата timeval представлява календарно време. Той има двама членове:
- tv_sec : Това е броят на секундите от епохата.
- tv_usec : Това са допълнителни микросекунди след изчисляване на броя секунди от епохата ..
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 ().