Retrieving system time: gettimeofday()

Some time ago, a friend of mine reported a problem with gettimeofday() under MinGW. It was a relatively common error: 'gettimeofday' undeclared (first use this function). Cause and solution of this problem is kind of easy, and we’ll present it at the end of the post. However, what’s that function gettimeofday()?

gettimeofday() is a function for retrieving system time in POSIX-compliant systems. Unlike the time() function, which has a resolution of 1 second, gettimeofday() has a higher resolution: microseconds. Specifically, the prototype of gettimeofday() is:

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

The function retrieves the current time expressed as seconds and microseconds since the Epoch, and stores it in the timeval structure pointed to by tp. The struct timeval has the following members:

long int tv_sec: Number of whole seconds of elapsed time.
long int tv_usec: The rest of the elapsed time (a fraction of a second), represented as the number of microseconds.

Thanks to the tv_usec member, we have a resolution of microseconds. It’s also important to remember what the Epoch is. The Epoch is just an arbitrary starting date set by the system in order to compute time, i.e., it’s a reference or base time. For instance, POSIX-compliant systems measure system time as the number of seconds elapsed since the start of the epoch at 1970-01-01 00:00:00 Z.

On its side, the struct timezone was used to return information about the time zone. However, using this parameter is obsolete (e.g., it has not been and will not be supported by libc or glibc). Therefore, tzp should be a null pointer, else the behavior may be unspecified (check your system’s specifications).

gettimeofday() returns 0 for success, or -1 for fail. Simple. Further, this function should be available in sys/time.h. But my friend’s installation of MinGW only included the following in sys/time.h:

#include <windows.h>

#ifndef _TIMEVAL_DEFINED /* also in winsock[2].h */
#define _TIMEVAL_DEFINED
struct timeval {
  long tv_sec;
  long tv_usec;
};
#define timerisset(tvp)	 ((tvp)->tv_sec || (tvp)->tv_usec)
#define timercmp(tvp, uvp, cmp) \
	(((tvp)->tv_sec != (uvp)->tv_sec) ? \
	((tvp)->tv_sec cmp (uvp)->tv_sec) : \
	((tvp)->tv_usec cmp (uvp)->tv_usec))
#define timerclear(tvp)	 (tvp)->tv_sec = (tvp)->tv_usec = 0
#endif /* _TIMEVAL_DEFINED */

Continue reading “Retrieving system time: gettimeofday()”

Douze ans sont si peu de chose

Douze ans sont si peu de chose dans l’existence d’un homme! On ne les sent point passer! Elles vont l’une après l’autre, les années, doucement et vite, lentes et pressées, chacune est longue et si tôt finie! Et elles s’additionnent si promptement, elles laissent si peu de trace derrière elles, elles s’évanouissent si complètement qu’en se retournant pour voir le temps parcouru on n’aperçoit plus rien, et on ne comprend pas comment il se fait qu’on soit vieux.
Guy de Maupassant (Adieu, Contes du Jour et de la Nuit, 18 mars 1884)


Notas de Alejandro: Porque en la entrada sobre Verdana referencio acontecimientos de hace casi 12 años. Traducción mía: “¡Doce años son tan poca cosa en la existencia de un hombre! ¡No se les siente pasar! ¡Van uno tras otro, los años, despacio y de prisa, lentos y apresurados, cada uno es largo y, no obstante, tan prontamente acabado! Y se acumulan tan rápido, dejando tan poca huella detrás de ellos, se desvanecen tan completamente que al volvernos para ver el tiempo transcurrido no se percibe nada, y no se comprende cómo es que uno se hizo viejo.”

Verdana

V de Verdana

Cuando yo tenía 16 años, una de las asignaturas que cursaba en la facultad era “Laboratorio de Física”. Si recuerdo bien, el curso encuadraba en el segundo semestre de Informática. La profesora proponía una discusión teórica importante, amparada en un desfile de unidades SI, leyes de Ohm y Kirchhoff, simplificación de redes, etcétera. Sin embargo, fiel a su nombre laboratorista, la asignatura era decididamente práctica: trabajábamos con resistencias, conductores, interruptores, y nos debatíamos entre el multímetro analógico y el digital. La profesora abordaba estas teorías con notable entusiasmo (hasta donde resulta posible el entusiasmo con estas cosas), y el técnico que nos instruía en el apartado práctico se esforzaba por corresponder con los hilvanados teóricos. Sólo el horario me resultaba objetable: las clases ocupaban los primeros espacios de la tarde, y en esas horas, recién completado el almuerzo y extrañada la siesta, lo menos que provoca es atender a las relaciones entre la intensidad, el voltaje y la resistencia. Sin embargo, aquello era miel en contraste con algunas materias realmente aburridas que cursaría algunos años después: desde las 2 pm, con exposiciones interminables sobre temas absurdos; uno termina aprendiendo la utilísima habilidad de dormir con los ojos abiertos.

Insistiré en mis 16 años para tratar de justificar lo que diré a continuación. Cuando uno es joven y arrogante, sobredimensiona el escaso conocimiento que posee. En aquel entonces yo tenía una computadora con Windows y Microsoft Word. Gracias a tal combinación Windows + Word, llegué a la creencia de ser un macho alfa, especie de Napoleón en la pintura de Jacques-Louis David (Napoleon crossing the Alps). Además de la edad, quizás pueda justificarme el hecho de que mi primer editor de texto fue el viejo y fiel “edit” que venía (y viene) con el sistema operativo de Microsoft. Luego mi corazón adolescente recibió el cariño de WordStar durante la época de liceísta. Y bueno, cuando uno viene de bailar con las feas y se encuentra con una medianamente bonita, surge una atracción casi inevitable.

Siempre he sostenido que la emoción del primer beso sólo es comparable con la que sientes en ese otro momento mágico en el que descubres la Nutella. Pero a esas emociones se acercaron muchísimo las cosas sentidas en aquel instante en que desplegué la lista de fuentes: Arial, Comic Sans, Courier New, Times New Roman, System, Verdana, el Paraíso. Como en el tema de Rubén Blades, aparece la lista de fuentes “y el tipo se cree un James Bond”. Entonces, en el primer trabajo de “Laboratorio de Física”, debuté con Verdana. Aunque siempre atiendo mis contenidos con la mayor de las prioridades, no negaré que en aquel trabajo estaba encandilado con mis “habilidades” para la tipografía posmoderna: todo estaba escrito en Verdana, y a mí me parecía el mejor trabajo del mundo sólo por eso. No recuerdo la calificación recibida, pero el número resulta irrelevante ahora. Lo importante es la vividez con la que conservo aquella fascinación mía por Verdana. La primera siempre es especial. Sin embargo, en retrospectiva y con el juicio de la madurez, aquello constituyó una predilección absurda y tipográficamente intolerable para un trabajo de Física. Además, al poco tiempo noté que mi amada Verdana me era infiel: la encontré feliz en los rótulos, encabezados y párrafos de otra gente. Amortigüé el despecho con Arial y Times New Roman, pero todavía tendría que pasar mucho tiempo para que mi camino se cruzara con el amor verdadero (LaTeX); eso es otra historia.

Hace años que no escribo con Word. Y a Verdana, en general, la he reducido a los recuerdos, de los cuales el más claro es éste. Ah, Verdana, vares ser honrada i sincera, i la primera de segona mà[ref]Vares ser honrada i sincera, i la primera de segona mà (Fuiste honrada y sincera, y la primera, de segunda mano) es de la canción La Primera, del disco Per al meu amic de Joan Manuel Serrat.[/ref]. Qué se le hace.