Como usar o GetTimeOfday Função no idioma C?

Como usar o GetTimeOfday Função no idioma C?
O gettimeofday () Função recebe a hora do relógio do sistema. O horário atual é expresso em segundos e microssegundos decorridos desde 00:00:00, 1 de janeiro de 1970 (UNIX Epoch). Neste artigo, vamos mostrar como usar o gettimeofday () função no Linux. Então vamos começar.

Sintaxe

int gettimeofday (struct timeval *tp, folha de estrutura *tz)

O gettimeofday () A função é definida em sys/tempo.h arquivo de cabeçalho.

Argumentos

Esta função leva dois argumentos:

O 1st argumento aponta para o Timeval estrutura. O Timeval estrutura é declarada como abaixo em sys/tempo.h arquivo de cabeçalho :

struct timeval
time_t tv_sec; // usado por segundos
suseconds_t tv_usec; // usado para microssegundos

A estrutura da estrutura do tempo representa um tempo de calendário. Tem dois membros:

  • TV_SEC : É o número de segundos desde a época.
  • TV_USEC : São microssegundos adicionais após o número de segundos de cálculo desde a época…

O 2nd argumento aponta para o fuso horário estrutura. Normalmente deve ser definido como nulo porque Fuzão horário de estrutura é obsoleto. Este argumento é apenas para compatibilidade com versões anteriores.

Valores de retorno

No sucesso, o gettimeofday () retornar 0, para falha, a função retorna -1.

Simples, pegue tempo e impressão

#incluir
#incluir
int main ()
struct timeval current_time;
gettimeOfday (& current_time, null);
printf ("segundos: %ld \ nmicro segundos: %ld",
hora atual.TV_SEC, current_time.TV_USEC);
retornar 0;

Saída:

Aqui, sys/tempo.h foi incluído para gettimeofday () Função e estrutura TimeVal. O gettimeofday () Função Defina o tempo de estrutura do tempo no tempo (current_time). TV_SEC é o número integral de segundos decorridos desde o início do UNIX Epoch, Na meia -noite UTC em 1 de janeiro de 1970 e TV_USEC é um número adicional de microssegundos decorridos de TV_SEC. Se você executar o programa, você deverá ver a saída. Cada vez que você executa o programa, a saída muda.

Erro de argumento nulo

#incluir
#incluir
int main ()
struct timeval current_time;
gettimeofday (nulo, nulo);
retornar 0;

Saída:

Neste exemplo, mostra que o primeiro argumento do gettimeofday () função não deve ser nula. O aviso de compilação virá se o primeiro argumento for nulo.

Formatando o exemplo atual do tempo

#incluir
#incluir
#incluir
int main ()
TV TIMVAL STRUT;
time_t t;
struct tm *info;
buffer de char [64];
gettimeOfday (& TV, NULL);
T = TV.tv_sec;
info = localTime (& t);
printf ("%s", asctime (info));
strftime (buffer, sizeof buffer, "hoje é %a, %b %d.\ n ", info);
printf ("%s", buffer);
strftime (buffer, sizeof buffer, "o tempo é %i: %m %p.\ n ", info);
printf ("%s", buffer);
retornar 0;

Saída:

Neste exemplo, mostra como imprimir a data e a hora em formato diferente. Não é muito fácil representar datas do valor de retorno de gettimeofday () função . Aqui, horário local() e strftime () As funções são usadas para representar bem o valor de retorno de gettimeofday ().

O horário local() a função leva um argumento, que é uma referência a um ponteiro do TV_SEC Campo de estrutura timeval e retorna uma referência a um ponteiro de um estrutura tm objeto.

O strftime () a função gerará uma sequência personalizada e formatada, mostrando a data e a hora do estrutura tm ponteiro. Especificadores de formato são usados ​​para exibição formatada. Por exemplo, a sequência do formato “%d-%m-%y%h:%m:%s” Especifica a data e a hora neste formulário:

14-04-2020 13:09:42

A seguir estão os especificadores de conversão, podem ser usados ​​para exibição formatada:

Especificador Significado
%a O nome abreviado do dia da semana, de acordo com o local atual.
%A O nome do dia da semana de acordo com o local atual.
%b Nome do mês abreviado, conforme o local atual.
%B Nome do mês inteiro conforme o local atual.
%c A representação preferida de data e hora para o local atual.
%d Como um número decimal para o dia do mês (intervalo de 01 - 31).
%H Usando 24 -HRs (variação 00 - 23) até a hora como número decimal.
%EU Usando 12 hrs (variação 00 - 23) até a hora como número decimal.
%j Como um número decimal para o dia do ano (intervalo 001-366).
%m Como um número decimal para o mês (intervalo de 01 - 12).
%M O número decimal do minuto.
%p Com base no valor do tempo especificado, 'AM' ou 'PM' ou nas seqüências equivalentes para o local atual.
%S O número decimal do segundo.
%x Representação preferida da data para o local atual, mas sem tempo.
%X Representação preferida do tempo para o local atual, mas sem data.
%y O ano é decimal, mas sem século (varia de 00 - 99).
%Y O ano é decimal, incluindo o século.
%Z O fuso horário.

Usando gettimeofday para medir o tempo de execução do programa

#incluir
#incluir
int main ()
struct timeval Start, fim;
gettimeofday (& start, nulo);
para (int i = 0; i <1e5 ; i++)

gettimeofday (& end, nulo);
printf ("O tempo necessário para contar para 10^5 é: %LD Micro segundos \ n",
((fim.tv_sec * 1000000 + final.TV_USEC) -
(começar.TV_SEC * 1000000 + Iniciar.TV_USEC)));
retornar 0;

Saída:

Este exemplo mostra que como gettimeofday () A função pode ser usada para o cálculo do tempo de execução de um programa.

Conclusão

Dessa forma, o gettimeofday () A função pode ser usada no Linux. Para portar o código existente, o gettimeofday () a função pode ser usada, mas em novo código, não deve ser usado. clock_gettime () a função pode ser usada em vez de gettimeofday ().