Programação C

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

Como usar a função gettimeofday em linguagem C?
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 (época do Unix). Neste artigo, vamos mostrar como usar o gettimeofday () função no Linux. Então vamos começar.

Sintaxe

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

O gettimeofday () 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 por microssegundos

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

O 2WL argumento aponta para o fuso horário estrutura. Normalmente deve ser definido como NULL porque struct fuso horário é 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
int main ()
struct timeval current_time;
gettimeofday (& current_time, NULL);
printf ("segundos:% ld \ nmicro segundos:% ld",
hora atual.tv_sec, current_time.tv_usec);
return 0;

Resultado:

Aqui, sys / tempo.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 mudará.

Erro de argumento NULL

#incluir
#incluir
int main ()
 
struct timeval current_time;
gettimeofday (NULL, NULL);
return 0;

Resultado:

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
int main ()
struct timeval tv;
time_t t;
struct tm * info;
buffer 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 ", informações);
printf ("% s", buffer);
strftime (buffer, sizeof buffer, "A hora é% I:% M% p.\ n ", informações);
printf ("% s", buffer);
return 0;

Resultado:

Neste exemplo, mostra como imprimir data e 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.

strftime () função irá gerar uma string formatada personalizada mostrando a data e hora do struct tm ponteiro. 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 a 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
%uma O nome abreviado do dia da semana de acordo com o local atual.
%UMA 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 a localidade 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 preferida da data para a localidade atual, mas sem hora.
% X Representação preferida da hora para a localidade atual, mas sem data.
% y O ano é decimal, mas nenhum século (faixa 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, end;
gettimeofday (& start, NULL);
 
para (int i = 0; i <1e5 ; i++)

 
gettimeofday (& end, NULL);
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 + início.tv_usec)));
return 0;

Resultado:

Este exemplo mostra que como gettimeofday () 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 () função pode ser usada, mas no novo código não deve ser usada. clock_gettime ()  função pode ser usada em vez de gettimeofday ().

Os 5 principais produtos ergonômicos de mouse de computador para Linux
O uso prolongado do computador causa dor no pulso ou nos dedos? Você está sofrendo de rigidez nas articulações e constantemente precisa apertar as mão...
Como alterar as configurações do mouse e touchpad usando Xinput no Linux
A maioria das distribuições Linux vem com a biblioteca “libinput” por padrão para lidar com eventos de entrada em um sistema. Ele pode processar event...
Remapeie os botões do mouse de maneira diferente para software diferente com o controle de botão do mouse X
Talvez você precise de uma ferramenta que possa fazer o controle do seu mouse mudar com cada aplicativo que você usa. Se for esse o caso, você pode ex...