#include <sys/time.h> #include <sys/types.h> static FILE *log; static int first_time = 1; struct timeval start; void open_log(const char *logfile) { log = fopen(logfile, "w"); } void lprintf(const char* fmt, ...) { va_list args; struct timeval current; uint64_t secs, usecs; char string[8192]; char msg[8192]; if (first_time) { first_time = 0; gettimeofday(&start, NULL); } gettimeofday(¤t, NULL); secs = current.tv_sec - start.tv_sec; while (current.tv_usec < start.tv_usec) { secs --; current.tv_usec += 1000000; } usecs = current.tv_usec - start.tv_usec; va_start(args, fmt); vsnprintf(msg, 8192, fmt, args); va_end(args); if (msg[strlen(msg) - 1] == '\n') msg[strlen(msg) - 1] = '\0'; snprintf(string, 8192, "[%02llu.%06llu] %s\n", secs, usecs, msg); if (log) { fputs(string, log); fflush(log); } else { lprintf("unable to write logfile, file logging disabled"); } }