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 timevaltime_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 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:42A 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 ().