Cómo usar la función getTimeOfday en el idioma C?

Cómo usar la función getTimeOfday en el idioma C?
El GetTimeOfday () La función obtiene el tiempo del reloj del sistema. La hora actual se expresa en segundos transcurridos y microsegundos desde 00:00:00, 1 de enero de 1970 (Epoch UNIX). En este artículo, le mostraremos cómo usar el GetTimeOfday () función en Linux. Entonces empecemos.

Sintaxis

int getTeofday (struct timeval *tp, struct timone *tz)

El GetTimeOfday () la función se define en sys/tiempo.H archivo de cabecera.

Argumentos

Esta función toma dos argumentos:

El 1calle El argumento apunta al horario de tiempo estructura. El horario de tiempo La estructura se declara a continuación en sys/tiempo.H archivo de cabecera :

Struct TimeVal
TIME_T TV_SEC; // usado para segundos
suseconds_t tv_usec; // utilizado para microsegundos

La estructura del horario de tiempo de estructura representa un tiempo calendario. Tiene dos miembros:

  • TV_SEC : Es el número de segundos desde la época.
  • TV_USEC : Se trata de microsegundos adicionales después del número de segundos de cálculo desde la época ..

El 2Dakota del Norte El argumento apunta al zona horaria estructura. Normalmente debe configurarse en nulo porque Struct Timone es obsoleto. Este argumento es solo para la compatibilidad hacia atrás.

Valores de devolución

Sobre el éxito, el GetTimeOfday () return 0, para el fracaso, la función devuelve -1.

Simple Get Time e Impresión

#incluir
#incluir
int main ()
struct timeVal Current_time;
getTimeOfday (& curtent_time, null);
printf ("segundos: %ld \ nmicro segundos: %ld",
tiempo actual.TV_SEC, Current_Time.TV_USEC);
regresar 0;

Producción:

Aquí, sys/tiempo.H ha sido incluido para GetTimeOfday () Función y estructura de tiempo temporal. El GetTimeOfday () Función establece el tiempo de estructura de tiempo en TimeVal (current_time). TV_SEC es el número integral de segundos transcurridos desde el inicio del Época unix, A la medianoche de UTC el 1 de enero de 1970 y TV_USEC es un número adicional de microsegundos transcurridos desde TV_SEC. Si ejecuta el programa, debería ver la salida. Cada vez que ejecute el programa, la salida cambiará.

Error de argumento nulo

#incluir
#incluir
int main ()
struct timeVal Current_time;
GetTimeOfday (NULL, NULL);
regresar 0;

Producción:

En este ejemplo muestra ese primer argumento del GetTimeOfday () la función no debe ser nula. La advertencia de compilación vendrá si el primer argumento es nulo.

Formateo de tiempo actual Ejemplo

#incluir
#incluir
#incluir
int main ()
Struct Timeval TV;
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 (búfer, sizeOf buffer, "Hoy es %A, %B %D.\ n ", información);
printf ("%s", búfer);
strftime (búfer, sizeof buffer, "El tiempo es %i: %m %p.\ n ", información);
printf ("%s", búfer);
regresar 0;

Producción:

En este ejemplo, muestra cómo imprimir la fecha y la hora en diferente formato. No es muy fácil representar fechas 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 ().

El hora local() la función toma un argumento, que es una referencia a un puntero del TV_SEC campo de Estrucado Tiempo Tiempo y devuelve una referencia a un puntero de un estructura tm objeto.

El strftime () la función generará una cadena personalizada y formateada que muestra la fecha y hora desde el estructura tm puntero. Los especificadores de formato se utilizan para la pantalla formateada. Por ejemplo, la cadena de formato "%d-%m-%y%h:%m:%s" especifica la fecha y el tiempo de esta forma:

14-04-2020 13:09:42

Los siguientes son los especificadores de conversión, pueden usarse para la pantalla formateada:

Especificador Significado
%a El nombre abreviado del día de la semana según el local actual.
%A El nombre del día de la semana según el local actual.
%b Nombre del mes abreviado según el lugar actual.
%B Nombre del mes completo según el lugar actual.
%C La representación preferida de la fecha y la hora para la actualidad actual.
%d Como número decimal para el día del mes (rango 01 - 31).
%H Uso de 24 horas (rango 00 - 23) a la hora como número decimal.
%I Uso de 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 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 localidad actual.
%S El número decimal del segundo.
%X Representación preferida de la fecha para la localidad actual, pero sin tiempo.
%X Representación preferida de la hora para la localidad actual, pero sin fecha.
%Y El año es decimal pero sin siglo (varía de 00 a 99).
%Y El año es decimal, incluido el siglo.
%Z La zona horaria.

Uso de GetTeofday para medir el tiempo de ejecución del programa

#incluir
#incluir
int main ()
Estrucia de inicio de tiempo horario, final;
GetTimeOfday (& Start, Null);
para (int i = 0; i <1e5 ; i++)

GetTimeOfday (& End, Null);
printf ("El tiempo necesario para contar hasta 10^5 es: %ld micro segundos \ n",
((fin.TV_SEC * 1000000 + final.TV_USEC) -
(comenzar.TV_SEC * 1000000 + Inicio.TV_USEC)));
regresar 0;

Producción:

Este ejemplo muestra que como GetTimeOfday () La función puede usarse para el cálculo del tiempo de ejecución de un programa.

Conclusión

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