Como usar a função gettimeofday na linguagem C?

How Use Gettimeofday Function C Language



o gettimeofday () função obtém a hora do relógio do sistema. A hora atual é expressa em segundos decorridos e microssegundos desde 00:00:00 de 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

intgettimeofday( estruturatimeval*cidade, estruturafuso horário*tz)

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







Argumentos

Esta função leva dois argumentos:



O 1stargumento aponta para o timeval estrutura. o timeval estrutura é declarada como abaixo em sys / time.h arquivo de cabeçalho :



estruturatimeval{
time_t tv_sec; // usado por segundos
suseconds_t tv_usec; // usado por microssegundos
}

A estrutura struct timeval representa uma hora do calendário. Tem dois membros:





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

O 2WLargumento aponta para o fuso horário estrutura. Normalmente deve ser definido como NULL porque struct fuso horário está obsoleto. Este argumento é apenas para compatibilidade com versões anteriores.

Valores de retorno

Com sucesso, o gettimeofday () retorna 0, em caso de falha a função retorna -1.



Obtenha tempo e impressão simples

#incluir
#incluir

inta Principal() {
estruturatimeval current_time;
gettimeofday(Ehora atual,NULO);
printf ('segundos:% ld nmicrossegundos:% ld ',
hora atual.tv_sec,hora atual.tv_usec);

Retorna 0;
}

Saída:

Aqui, sys / time.h foi incluído para gettimeofday () função e estrutura temporal. o gettimeofday () função definir a hora no membro da estrutura timeval (current_time). tv_sec é o número integral de segundos decorridos desde o início do Época do UNIX , à meia-noite UTC de 1º de janeiro de 1970 e tv_usec é o número adicional de microssegundos decorridos de tv_sec. Se você executar o programa, deverá ver a saída. Cada vez que você executa o programa, a saída muda.

Erro de argumento NULL

#incluir
#incluir

inta Principal() {

estruturatimeval current_time;
gettimeofday(NULO,NULO);
Retorna 0;
}

Saída:

Neste exemplo mostra o primeiro argumento do gettimeofday () função não deve ser NULL. Um aviso de compilação virá se o primeiro argumento for NULL.

Exemplo de formatação de hora atual

#incluir
#incluir
#incluir

inta Principal() {
estruturatv timeval;
time_t t;
estruturatm*informação;
Caracteresamortecedor[64];

gettimeofday(Etelevisão,NULO);
t=televisão.tv_sec;

informação= horário local (Et);
printf ('% s', asctime (informação));
strftime (amortecedor, tamanho deamortecedor, 'Hoje é% A,% B% d. n',informação);
printf ('% s',amortecedor);
strftime (amortecedor, tamanho deamortecedor, 'A hora é% I:% M% p. n',informação);
printf ('% s',amortecedor);

Retorna 0;
}

Saída:

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

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

o strftime () função irá gerar uma string formatada e personalizada mostrando a data e hora do struct tm ponteiro. Os especificadores de formato são usados ​​para exibição formatada. Por exemplo, a string de formato% d-% m-% Y% H:% M:% S especifica a data e hora neste formato:

14-04-2020 13:09:42

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

Especificador Significado
%para O nome abreviado do dia da semana de acordo com o local atual.
%PARA O nome do dia da semana de acordo com o local atual.
% b Nome do mês abreviado de acordo com o local atual.
% B Nome do mês completo de acordo com o local atual.
% c A representação preferencial de data e hora para o local atual.
% d Como um número decimal para o dia do mês (intervalo 01 - 31).
% H Usando 24 horas (intervalo 00 - 23) para a hora como número decimal.
%EU Usando 12 horas (intervalo 00 - 23) para 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 01 - 12).
% M O número decimal do minuto.
% p Com base no valor de tempo especificado, 'am' ou 'pm' ou as strings equivalentes para o local atual.
% S O número decimal do segundo.
% x Representação preferencial da data para o local atual, mas sem hora.
% X Representação preferencial da hora para o local atual, mas sem data.
%e O ano é decimal, mas nenhum século (faixa de 00 a 99).
%E O ano é decimal incluindo o século.
%COM O fuso horário.

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

#incluir
#incluir

inta Principal() {

estruturainício do tempo,fim;
gettimeofday(Ecomeçar,NULO);

para (inteu= 0;eu<1e5 ;eu++) {
}

gettimeofday(Efim,NULO);
printf ('O tempo necessário para contar até 10 ^ 5 é:% ld micro segundos n',
((fim.tv_sec * 1000000 +fim.tv_usec) -
(começar.tv_sec * 1000000 +começar.tv_usec)));

Retorna 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

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