¿Cómo usar la función gettimeofday en lenguaje C?

How Use Gettimeofday Function C Language



los 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

En tgettimeofday( estructuratimeval*ciudad, estructurazona horaria*tz)

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







Argumentos

Esta función toma dos argumentos:



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



estructuratimeval{
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:





  • tv_sec : Es el número de segundos desde la época.
  • tv_usec : Son microsegundos adicionales después del cálculo del número de segundos desde la época. .

El 2Dakota del NorteEl 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

En tprincipal() {
estructuratimeval current_time;
gettimeofday(&tiempo actual,NULO);
printf ('segundos:% ld ortemicrosegundos:% ld ',
tiempo actual.tv_sec,tiempo actual.tv_usec);

regreso 0;
}

Producción:

Aquí, sys / time.h ha sido incluido para gettimeofday () función y estructura temporal. los 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 el resultado. Cada vez que ejecute el programa, la salida cambiará.

Error de argumento NULL

#incluir
#incluir

En tprincipal() {

estructuratimeval current_time;
gettimeofday(NULO,NULO);
regreso 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

En tprincipal() {
estructuratimeval tv;
time_t t;
estructuratm*info;
carbonizarsebuffer[64];

gettimeofday(&televisor,NULO);
t=televisor.tv_sec;

info= hora local (&t);
printf ('%s', asctime (info));
strftime (buffer, tamaño debuffer, 'Hoy es% A,% B% d. orte',info);
printf ('%s',buffer);
strftime (buffer, tamaño debuffer, 'El tiempo es% I:% M% p. orte',info);
printf ('%s',buffer);

regreso 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 () .

los 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.

los 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 Sentido
%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 tiempo especificado, '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.
%CON La zona horaria.

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

#incluir
#incluir

En tprincipal() {

estructurainicio de timeval,fin;
gettimeofday(&comienzo,NULO);

por (En tI= 0;I<1e5 ;I++) {
}

gettimeofday(&fin,NULO);
printf ('El tiempo necesario para contar hasta 10 ^ 5 es:% ld microsegundos orte',
((fin.tv_sec * 1000000 +fin.tv_usec) -
(comienzo.tv_sec * 1000000 +comienzo.tv_usec)));

regreso 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 () .