Programación en C

Cómo utilizar la función gettimeofday en lenguaje C?

Cómo utilizar la función gettimeofday en lenguaje C?
La gettimeofday () La función obtiene la hora del reloj del sistema. El tiempo actual se expresa en segundos transcurridos y microsegundos desde las 00:00:00 del 1 de enero de 1970 (época Unix). En este artículo, le mostraremos cómo utilizar el gettimeofday () función en Linux. Entonces empecemos.

Sintaxis

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

La gettimeofday () la función está definida en sys / time.h archivo de cabecera.

Argumentos

Esta función toma dos argumentos:

El 1S t El argumento apunta a la timeval estructura. La timeval La estructura se declara de la siguiente manera en sys / time.h archivo de cabecera :

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

La estructura struct timeval representa un tiempo de calendario. Tiene dos miembros:

El 2Dakota del Norte El argumento apunta a la zona horaria estructura. Normalmente debería establecerse en NULL porque estructura de zona horaria es obsoleto. Este argumento es solo para compatibilidad con versiones anteriores.

Valores devueltos

En el éxito, el gettimeofday () devuelve 0, en caso de error, la función devuelve -1.

Obtenga tiempo e imprima de forma sencilla

#incluir
#incluir
int main ()
struct timeval current_time;
gettimeofday (& current_time, NULL);
printf ("segundos:% ld \ nmicro segundos:% ld",
tiempo actual.tv_sec, current_time.tv_usec);
return 0;

Producción:

Aquí, sys / time.h ha sido incluido para gettimeofday () función y estructura de tiempo. La gettimeofday () función establece el tiempo en el miembro de estructura timeval (current_time). tv_sec es el número entero de segundos transcurridos desde el inicio de la Época UNIX, a la medianoche UTC del 1 de enero de 1970 y tv_usec es el número adicional de microsegundos transcurridos de tv_sec. Si ejecuta el programa, debería ver la salida. Cada vez que ejecute el programa, la salida cambiará.

Error de argumento NULL

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

Producción:

En este ejemplo se muestra que el primer argumento de la gettimeofday () la función no debe ser NULL. La advertencia de compilación vendrá si el primer argumento es NULL.

Ejemplo de formato de hora actual

#incluir
#incluir
#incluir
int main ()
struct timeval tv;
time_t t;
struct tm * info;
tampón char [64];
 
gettimeofday (& tv, NULL);
t = tv.tv_sec;
info = hora local (& t);
printf ("% s", asctime (info));
strftime (buffer, sizeof buffer, "Hoy es% A,% B% d.\ n ", información);
printf ("% s", búfer);
strftime (buffer, sizeof buffer, "El tiempo es% I:% M% p.\ n ", información);
printf ("% s", búfer);
return 0;

Producción:

En este ejemplo se muestra cómo imprimir la fecha y la hora en diferentes formatos. No es muy fácil representar fechas a partir del valor de retorno de gettimeofday () función . Aquí, hora local() y strftime () Las funciones se utilizan para representar muy bien el valor de retorno de gettimeofday ().

La hora local() La función toma un argumento, que es una referencia a un puntero de la tv_sec campo de estructura timeval y devuelve una referencia a un puntero de un estructura tm objeto.

La strftime () La función generará una cadena formateada personalizada que muestra la fecha y hora del estructura tm puntero. Los especificadores de formato se utilizan para la visualización formateada. Por ejemplo, la cadena de formato "% d-% m-% Y% H:% M:% S" especifica la fecha y la hora en este formato:

14-04-2020 13:09:42

A continuación se muestran los especificadores de conversión, que se pueden utilizar para visualización formateada:

Especificador Significado
%a El nombre abreviado del día de la semana según la configuración regional actual.
%A El nombre del día de la semana según la configuración regional actual.
%B Nombre del mes abreviado según la configuración regional actual.
%B Nombre del mes completo según la configuración regional actual.
%C La representación preferida de fecha y hora para la configuración regional actual.
%D Como un número decimal para el día del mes (rango 01 - 31).
% H Usando 24 horas (rango 00-23) a la hora como número decimal.
%I Usando 12 horas (rango 00-23) a la hora como número decimal.
% j Como número decimal para el día del año (rango 001-366).
%metro Como un número decimal para el mes (rango 01 - 12).
%METRO El número decimal del minuto.
%pag Según el valor de hora especificado, ya sea 'am' o 'pm' o las cadenas equivalentes para la configuración regional actual.
%S El número decimal del segundo.
%X Representación preferida de la fecha para la configuración regional actual, pero sin hora.
%X Representación preferida de la hora para la configuración regional actual, pero sin fecha.
% y El año es decimal pero no el siglo (rango de 00 a 99).
% Y El año es decimal, incluido el siglo.
% Z La zona horaria.

Usar gettimeofday para medir el tiempo de ejecución del programa

#incluir
#incluir
 
int main ()
 
estructura timeval start, end;
gettimeofday (& start, NULL);
 
para (int i = 0; i <1e5 ; i++)

 
gettimeofday (& end, NULL);
printf ("El tiempo necesario para contar hasta 10 ^ 5 es:% ld microsegundos \ n",
((final.tv_sec * 1000000 + fin.tv_usec) -
(comienzo.tv_sec * 1000000 + inicio.tv_usec)));
return 0;

Producción:

Este ejemplo muestra que cómo gettimeofday () La función se puede utilizar para calcular el tiempo de ejecución de un programa.

Conclusión

De esta manera, el gettimeofday () la función podría usarse en Linux. Para portar código existente, el gettimeofday () La función se puede usar pero en el código nuevo no se debe usar. clock_gettime ()  La función se puede utilizar en lugar de gettimeofday ().

Motores de juegos gratuitos y de código abierto para desarrollar juegos de Linux
Este artículo cubrirá una lista de motores de juegos de código abierto y gratuitos que se pueden usar para desarrollar juegos 2D y 3D en Linux. Existe...
Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider es la duodécima incorporación a la serie Tomb Raider, una franquicia de juegos de acción y aventuras creada por Eidos Montre...
Cómo impulsar FPS en Linux?
FPS significa Cuadros por segundo. La tarea de FPS es medir la velocidad de fotogramas en reproducciones de video o actuaciones de juegos. En palabras...